Spring入门配置(三) - MVC

一、开发中的主要配置

  1. 导入相关jar包坐标

    spring-context、spring-webmvc、spring-jdbc、spring-tx、servlet-api、jsp-api、jstl、jackson-core、jackson-databind、jackson-annotations等,视需求而定

  2. web.xml文件中配置SpringMVC相关

    web.xml中filter、listener、servlet配置有先后顺序要求,否则会产生异常

    1. CharacterEncodingFilter 过滤器,主要用于解决post请求时的乱码问题
      <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>
          <!--使用该编码类型-->
          <init-param>
              <param-name>forceEncoding</param-name>
              <param-value>true</param-value>
          </init-param>
      </filter>
          <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

       

    2. ContextLoaderListener 监听器,详情请看:Spring入门配置(一) - IOC中第六部分
      <!--Spring的监听器-->
      <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      <!--全局参数,指定spring配置文件路径-->
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
      </context-param>

       

    3. 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:spring-mvc.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>

      url-pattern配置/和/*的区别

  3. 配置spring-mvc.xml

    1. 配置SpringMVC命名空间
      命名空间:
      xmlns:mvc="http://www.springframework.org/schema/mvc"
      约束路径:
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc.xsd
    2. 配置MVC注解驱动
      <!--mvc的注解驱动,配置处理器映射器HandlerMapping,处理器适配器HandlerAdaptor-->
      <mvc:annotation-driven/> 
    3. 配置组件扫描
      <context:component-scan back-package="包全限定名(controller层)"/>
    4. 访问静态资源
      <mvc:default-servlet-handler/>

    5. 配置文件配置视图解析器 ViewResolver

      视图解析器的默认设置

      REDIRECT_URL_PREFIX = "redirect:"  --重定向前缀
      FORWARD_URL_PREFIX = "forward:"    --转发前缀(默认值)
      prefix = "";     --视图名称前缀
      suffix = "";     --视图名称后缀

      配置访问jsp页面时的返回数据

      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          <property name="prefix" value="/WEB-INF/views/"></property>
          <property name="suffix" value=".jsp"></property>
      </bean>
    6. 拦截器配置
      <mvc:interceptors><!--该标签内配置多个拦截器-->
          <mvc:interceptor>
              <!--对哪些路径进行拦截,本例中拦截所有-->
              <mvc:mapping path="/**"/>
              <mvc:exclude-mapping path=""/>
              <bean class="MyInterceptor全类名"/>
          </mvc:interceptor>
      </mvc:interceptor>
    7. 异常配置
      <bean class="SimpleMappingExceptionResolver全类名">
          <property name="defaultErroeView" value="error"/><!--默认错误视图-->
              <property name="exceptionMappings">
                  <map>
                      <entry key="MyException全类名" value="error"/> 
                      <entry key="其他异常全类名" value="error"/>
                  </map>
              </property>
      </bean>
    8. 其他需要注入的bean等配置
  4. 常见所需注解

    1. @RequestMapping("/访问地址")
      • 作用:用于建立请求 URL 和处理请求方法之间的对应关系
      • 位置:
        • 类上,请求URL 的第一级访问目录。此处不写的话,就相当于应用的根目录
        • 方法上,请求URL的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径
      • 属性:
        • value:用于指定请求的URL。它和path属性的作用是一样的
        • method:用于指定请求的方式
        • params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样
      • 举例:
        • params = {"accountName"},表示请求参数必须有accountName
        • params = {"moeny!100"},表示请求参数中money不能是100
    2. @ResponseBody

      告知SpringMVC框架,方法返回的字符串不是跳转是直接在http响应体中返回。

    3. @RequestBody

      当使用ajax提交时,可以指定contentType为json形式,那么在方法参数位置使用@RequestBody可以直接接收集合数据而无需使用POJO进行包装。

      @RequestMapping("/quick13")
      @ResponseBody
      public void quickMethod13(@RequestBody List<User> userList) 
    4. @RequestParam

      当请求的参数名称与Controller的业务方法参数名称不一致时,就需要通过@RequestParam注解显示的绑定。有以下参数可以使用:

      • value:与请求参数名称
      • required:此在指定的请求参数是否必须包括,默认是true,提交时如果没有此参数则报错
      • defaultValue:当没有指定请求参数时,则使用指定的默认值赋值
      <!--form表单代码-->
      <form action="${pageContext.request.contextPath}/quick14" method="post">
          <input type="text" name="name"><br>
          <input type="submit" value="提交"><br>
      </form>
      //获取请求数据时的注解配置
      public
      void quickMethod14(@RequestParam("name") String username)
    5. @PathVariable(value="name" method=...)

      获取Restful风格参数时的配置,Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:

      • GET:用于获取资源
      • POST:用于新建资源
      • PUT:用于更新资源
      • DELETE:用于删除资源

      在SpringMVC中可以使用占位符进行参数绑定。地址/user/zhangsan可以写成/user/{name},占位符{name}对应的就是zhangsan的值。在业务方法中我们可以使用@PathVariable注解进行占位符的匹配获取工作。

      @RequestMapping("/quick19/{name}")
      @ResponseBody
      public void quickMethod19(@PathVariable(value = "name",required = true) String name){
          System.out.println(name);
      }
    6. @RequestHeader

      属性如下:

      • value:请求头的名称
      • required:是否必须携带此请求头
    7. @CookieValue

      属性如下:

      • value:指定cookie的名称
      • required:是否必须携带此cookie

二、获取请求响应数据

  1. 请求
    获取数据方法前需加注解 @ResponseBody
    获取集合类型数据:请求数据为json类型时,@RequestBody 注释直接获取
    <form action="${pageContext.request.contextPath}/quick12" method="post">
        <input type="text" name="userList[0].username"><br>
        <input type="text" name="userList[0].age"><br>
        <input type="text" name="userList[1].username"><br>
        <input type="text" name="userList[1].age"><br>
        <input type="submit" value="提交"><br>
    </form>
    @RequestMapping("/quick12")
    @ResponseBody
    public void quickMethod12(Vo vo) throws IOException {
        System.out.println(vo.getUserList());
    }
  2. 响应
    <!--配置处理器适配器指定类型转换器-->
    <
    bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean> </list> </property> </bean>

三、拦截器

Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。

将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。

  1. 拦截器和过滤器的区别

  2. 自定义拦截器

    1. 创建拦截器类实现HandlerInterceptor接口
    2. 配置拦截器
    3. 测试拦截器的拦截效果
posted @ 2019-07-14 00:00  想学好Java  阅读(220)  评论(0编辑  收藏  举报