ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

J2EE-020 Spring(五) Spring-MVC(上)

2021-04-28 13:06:36  阅读:211  来源: 互联网

标签:J2EE RequestMapping Spring 路径 MVC 放行 user mvc public


J2EE-020 Spring(五) Spring-MVC(上)

Spring-MVC

1.创建mvc项目步骤

1.引入Spring-mvc,Jar包

`   <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.2.5.RELEASE</version>
</dependency>`

2.在web.xml中配置servlet

<servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--要求DispatcherServlet实例和Web服务器同时实例化-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <!--里面设置值越大执行优先级越高-->
        <load-on-startup>0</load-on-startup>
    </servlet>
    <!--配置Servlet-->
    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

因为servlet是方法后才走init方法初始化,spring-mvc要提前加载Bean文件需要设置和Web服务器同时实例化,其中 contextConfigLocation是固定搭配,加载Bean classpath:spring-configuration的配置文件名加载Bean,0为设置优先级

3.在spring-mvc.xml中配置通过扫描包的方式加载Bean

<context:component-scan base-package="包路径"></context:component-scan>`

4.将实体类加入Bean

在实体类中标注注解@Controller让包加载到Bean,@RequestMapping(“访问路径”)设置在方法。

回顾知识点,servlet的访问路径配置,注解形式@webservlet(name=“类名称”,urlPatterns =“路径”)

@Controller
public class TestController {
    public TestController(){
        System.out.println("sss");
    }
    @RequestMapping("/hello")
    public String doindex(){
      return "index";
    }
}

4.配置视图解析器

这里发现这里实际访问路径为/WEB-INF/views/XX.jsp,
通过配置视图解析器简化代码

<bean id="viewresolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="WEB-INF/views/"></property>
        <property name="suffix" value=".jsp"></property>
</bean>

其中prefix为前部路径,suffix为后半截路径

5.测试成功

在这里插入图片描述

2.静态资源放行(二种)

引出问题:之前servlet的老问题了,就是我们所有请求都进行了拦截进入Baseservlet那么js,css,image文件是肯定进入不了代码找不到对应的路径,因此我们需要对一些静态资源进行放行,再BaseServlet中我们解决的办法是通过请求的后缀和固定请求放行(指不需要权限认证的login,Verification Code)

1.第一种(mvc自定义标签放行)

1.开启自定义配置文件

再在bean文件中配置<mvc:annotation-driven></mvc:annotation-driven>

2.定义需要放行的静态资源路径

配置需要放行的路径 <mvc:resources mapping="/static/js/**" location="/static/css/"/>mapping是路径下的什么文件,这个意思static/js下面的所有文件,loaction表示加载路径

<mvc:resources mapping="/static/js/**" location="/static/css/"/>
    <mvc:resources mapping="/static/css/**" location="/static/css/"></mvc:resources>
    <mvc:resources mapping="/static/image/**" location="/static/image/"></mvc:resources>

3.测试

加载了css静态代码

2.第二种(自动放行所有静态资源)

放行所有静态资源<mvc:default-servlet-handler/>

在bean配置文件中配置<mvc:default-servlet-handler/>会自动放行所有的静态资源 ,
配置使用自定义mvc标签<mvc:annotation-driven></mvc:annotation-driven>

测试

成功测试成功

3.SpringMVC常用API

@Conttroller

@Conttroller,标注在类上高速MVC这个是一个控制器
在这里插入图片描述

@RequestMapping

标注在类代表父路径,标注在方法表示子路径
注意,在视图解析器InternalResourceView中的前部份方法prefix中一定要以/开头,不如标注在RequestMapping上的方法会变为根目录

错误示范在这里插入图片描述在这里插入图片描述
正确示范
在这里插入图片描述

@RequestParams(“请求参数的名称”)

用于将请参数区数据映射到功能方法上
代码实现

 @RequestMapping("/hello1")
    public ModelAndView doindex(@RequestParam("msg")String msg){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("index");
        mv.addObject("msg",msg);
        return mv;
    }

返回一个ModelAndView,setViewName表示返回的视图名称,addObject为添加参数
前端用JSP调用获得的MSG参数为:${msg}
测试在这里插入图片描述

@ResponseBody()和@RequestBody()

@ResponseBody()作用是将返回对象JSON格式返回给前端
@RequestBody()把前端的请求JSON转为对应的实体对象

1.引入jackjson-databind

因为spring-mvc是用的jackjson里的json,所以引入jackjson,注意这里一定要引用2.9版本以上的<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.8</version> </dependency>

2.编码

 @RequestMapping(value = "/userJson",method = RequestMethod.POST)
    @ResponseBody
    public User json(@RequestBody(required = false)  User user) {
        return user;
    }

RequestMapping类型默认是GET设置method = RequestMethod.POST为POST

测试

用Talend API进行测试在这里插入图片描述

@RestController

让整个类返回对象都以JSON格式返回
在这里插入图片描述

@PathVarible

Rest风格URL请求,比如请求System/{nothing}/{default}
在请求参数标注就可以拿值
编码

`@GetMapping("/system/{name}/{math}")
    public String rest(@PathVariable("name") String name,@PathVariable("math") String math){
        return "name="+name+"math="+math;
}`

测试

在这里插入图片描述

参数绑定

基础参数(属性,对象)

简单类型

<form action="receiveString" method="post">
    <input name="username" value="张三" type="text"/>
    <input type="submit" value="提交">
</form>
@RequestMapping("/receiveString")
public void receiveString(String username){
   System.out.println(username); 
}

包装类类型

//定义类型
public class Subject{
   private  User user;
}
public class User {
   private  String name;
   private Integer age;
}
<form action="receiveUser" method="post">
   用户名:<input type="text" name="user.name" value="张三"></br>
   年龄:<input type="text" name="user.age" value="18"></br>
    <input type="submit" value="提交">
</form>
@RequestMapping("/receiveUser")
public void pojo(Subject user){
      User user = new User();
       user.setName(subject.user.getName());
       user.setAge(subject.user.getAge());
       return user;
}

测试
在这里插入图片描述

高级参数(数组,List)

数组

<form action="receiveArray" method="post">
    <c:forEach item="${userList}" var="user">
       用户名:<input type="text" name="username" value="${user.username}"></br>
       年龄:<input type="text" name="age" value="${user.age}"></br>
    </c:forEach>
    <input type="submit" value="提交">
</form>
@RequestMapping("/receiveArray")
public void pojo(Integer age[]){
   for(int age : ages)
   System.out.println(age);
}

List

<form action="receiveList" method="post">
    <c:forEach item="${userList}" var="user">
       用户名:<input type="text" name="userList[0].username"></br>
       年龄:<input type="text" name="userList[0].age"></br>
       用户名:<input type="text" name="userList[0].username"></br>
       年龄:<input type="text" name="userList[0].age"></br>
    </c:forEach>
    <input type="submit" value="提交">
</form>
@RequestMapping("/receiveList")
public void pojo(UserCustom userCustom){
   System.out.println(userCustom);
}

标签:J2EE,RequestMapping,Spring,路径,MVC,放行,user,mvc,public
来源: https://blog.csdn.net/qq_35059264/article/details/116201074

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有