SpringMVC入门丶请求参数绑定丶常用注解

SpringMVC入门

  1. 创建WEB工程,引入依赖

    <!-- 版本锁定 -->
    <properties>
    <spring.version>5.0.2.RELEASE</spring.version>
    </properties>
    <dependencies>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring.version}</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
    </dependency>
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
    </dependency>
    </dependencies>
    
  2. 在web.xml中配置一个核心前端控制器(DispatcherServlet)

    <!--配置一个核心前端控制器-->
    <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:Springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>
    
  3. 编写springmvc.xml的配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">
    
    <!-- 配置spring创建容器时要扫描的包 -->
    <context:component-scan base-package="com.qin"></context:component-scan>
    
    <!-- 配置视图解析器 -->
    <bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--前缀-->
    <property name="prefix" value="/WEB-INF/pages/"></property>
    <!--后缀-->
    <property name="suffix" value=".jsp"></property>
    </bean>
    
    <!-- 配置spring开启注解mvc的支持-->
    <mvc:annotation-driven></mvc:annotation-driven>
    </beans>
    
  4. 编写Controller

    //表示此类是一个controller
    @Controller
    public class HelloController {
    
        /**
         * 测试path
         * @return
         */
        @RequestMapping(path = "/hello")
        public String hello(){
            System.out.println("hello SpringMVC!");
            return "success";
        }
    
    }
    
  5. 在WEB-INF目录下创建pages文件夹,编写success.jsp的成功页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
       <title>hello</title>
    </head>
    <body>
       <h3>Success!!!</h3>
    </body>
    </html>
    
  • 入门案例的分析
    • 当启动Tomcat服务器的时候,因为配置了load-on-startup标签,所以会创建DispatcherServlet对象,
      就会加载springmvc.xml配置文件
    • 开启了注解扫描,那么HelloController对象就会被创建
    • 从index.jsp发送请求,请求会先到达DispatcherServlet核心控制器,根据配置@RequestMapping注解
      找到执行的具体方法
    • 根据执行方法的返回值,再根据配置的视图解析器,去指定的目录下查找指定名称的JSP文件
    • Tomcat服务器渲染页面,做出响应

SpringMVC的一次完整的执行

​ RequestMapping注解

1. RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系
2. RequestMapping注解可以作用在方法和类上
    1. 作用在类上:第一级的访问目录
    2. 作用在方法上:第二级的访问目录
    3. 细节:路径可以不编写 / 表示应用的根目录开始
3. RequestMapping的属性
    1. path 指定请求路径的url    
    2. value value属性和path属性是一样的
    3. mthod 指定该方法的请求方式,不写代表匹配所有 method = {RequestMethod.POST}
    4. params 指定限制请求参数的条件              params = {"username"}
    5. headers 发送的请求中必须包含的请求头

请求参数的绑定

  1. 请求参数的绑定说明
    1. 绑定机制
      1. 表单提交的数据都是k=v格式的 username=haha&password=123
      2. SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
      3. 要求:提交表单的name和参数的名称是相同的
    2. 支持的数据类型
      1. 基本数据类型和字符串类型
      2. 实体类型(JavaBean)
      3. 集合数据类型(List、map集合等)
  2. 基本数据类型和字符串类型
    1. 提交表单的name和参数的名称是相同的
    2. 区分大小写
  3. 实体类型(JavaBean)
    1. 提交表单的name和JavaBean中的属性名称需要一致
    2. 如果一个JavaBean类中包含其他的引用类型,那么表单的name属性需要编写成:对象.属性 例如:
      address.name
  4. 给集合属性数据封装
    1. 在jsp中姓名:<input type="text" name="list[0].name" >
  5. 请求参数中文乱码的问题
<!--在web.xml中配置过滤器-->
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

6.自定义类型转换器

​ java为我们提供了一个接口,我们可以通过实现Converter接口来自定义转换器

​ 1.自定义类型转换器

//自定义类型转换器(String->Date)
public class StringToDateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String source) {
        if (source == null){
            throw new RuntimeException("字符串不能为空");
        }

        try {
            DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date date = sdf.parse(source);
            return date;
        } catch (ParseException e) {
            throw new RuntimeException("字符串异常");
        }
    }
}
 2. 注册自定义类型转换器,在SpringMvc.xml中编写配置
<!-- 注册自定义类型转换器 -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="cn.itcast.utils.StringToDateConverter"/>
        </set>
    </property>
</bean>

<!-- 在Spring对MVC注解的支持中配置conversion-service -->
<mvc:annotation-driven conversion-service="conversionService"/>

常用的注解

  1. RequestParam注解

    1. 作用: 把请求中指定的参数传递给控制器中的形参
    2. 属性 :
      1. value: 请求参数中的名称
      2. required: 请求参数中是否必须有此参数,默认值是true,即必须提供
    3. 例:
    @RequestMapping(path="/hello")
    public String sayHello(@RequestParam(value="username",required=false)String name) {
        System.out.println(name);
        return "success";
    }
    
  2. RequestBody注解

    1. 作用: 用于获取请求体的内容(ps:get方法不行)
    2. 属性
      • required: 是否必须有请求体,默认是true
    3. 例:
    @RequestMapping(path="/hello")
    public String sayHello(@RequestBody String body) {
        System.out.println(body);
        return "success";
    }
    
  3. PathVariable注解

    1. 作用: 用于绑定url中的占位符.(如/delete/{id},{id}就是占位符)
    2. 属性
      • value: 指定url中占位符的名称
    3. Restful风格的url
      1. 请求路径一样,可以根据不同的请求方式来执行后台的不同方法
      2. restful风格的url的优点
        1. 结构清晰
        2. 易于理解
        3. 符合标准
        4. 扩展方便
    4. 例:
    @RequestMapping(path="/hello/{id}")
    public String sayHello(@PathVariable(value="id") String id) {
        System.out.println(id);
        return "success";
    }
    
  4. RequestHeader注解

    1. 作用:获取指定请求头的值
    2. 属性
      • value:请求头的名称
    3. 例:
    @RequestMapping(path="/hello")
    public String sayHello(@RequestHeader(value="Accept") String header) {
        System.out.println(header);
        return "success";
    }
    
  5. CookieValue注解

    1. 作用: 用于获取指定cookie的名称的值
    2. 属性
      • value: cookie的名称
    3. 例:
    @RequestMapping(path="/hello")
    public String sayHello(@CookieValue(value="JSESSIONID") String cookieValue) {
        System.out.println(cookieValue);
        return "success";
    }
    
  6. ModelAttribute注解

    1. 作用
      1. 出现在方法上:表示当前方法会在控制器方法执行前线执行。
      2. 出现在参数上:获取指定的数据给参数赋值。
    2. 应用场景
      • 当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。

猜你喜欢

转载自blog.csdn.net/qq_35472880/article/details/83513507