导航

Spring-MVC使用

Posted on 2017-02-05 17:09  曹大爷  阅读(115)  评论(0)    收藏  举报

 

在整个 Spring MVC 框架中,DispatcherServlet 处于核心位置,它负责协调和组织不同组件完成请求处理并返回响应工作。在看 DispatcherServlet 类之前,我们先来看一下请求处理的大致流程:

  1. Tomcat 启动,对 DispatcherServlet 进行实例化,然后调用它的 init() 方法进行初始化,在这个初始化过程中完成了:
  2. 对 web.xml 中初始化参数的加载;建立 WebApplicationContext (SpringMVC的IOC容器);进行组件的初始化;
  3. 客户端发出请求,由 Tomcat 接收到这个请求,如果匹配 DispatcherServlet 在 web.xml 中配置的映射路径,Tomcat 就将请求转交给 DispatcherServlet 处理;
  4. DispatcherServlet 从容器中取出所有 HandlerMapping 实例(每个实例对应一个 HandlerMapping 接口的实现类)并遍历,每个 HandlerMapping 会根据请求信息,通过自己实现类中的方式去找到处理该请求的 Handler (执行程序,如Controller中的方法),并且将这个 Handler 与一堆 HandlerInterceptor (拦截器) 封装成一个 HandlerExecutionChain 对象,一旦有一个 HandlerMapping 可以找到 Handler 则退出循环;(详情可以看 [Java]SpringMVC工作原理之二:HandlerMapping和HandlerAdpater 这篇文章)
  5. DispatcherServlet 取出 HandlerAdapter 组件,根据已经找到的 Handler,再从所有 HandlerAdapter 中找到可以处理该 Handler 的 HandlerAdapter 对象;
  6. 执行 HandlerExecutionChain 中所有拦截器的 preHandler() 方法,然后再利用 HandlerAdapter 执行 Handler ,执行完成得到 ModelAndView,再依次调用拦截器的 postHandler() 方法;
  7. 利用 ViewResolver 将 ModelAndView 或是 Exception(可解析成 ModelAndView)解析成 View,然后 View 会调用 render() 方法再根据 ModelAndView 中的数据渲染出页面;
  8. 最后再依次调用拦截器的 afterCompletion() 方法,这一次请求就结束了。

 

1.配置文件

1.1.添加配置文件  applicationContext-mvc.xml 

 项目右键new-other-Spring  勾选context

添加扫描

<context:component-scan base-package="test.SpringMVC">

</context:component-scan>

1.2配置web.mxl文件

<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:applicationContext-mvc.xml</param-value>

        </init-param>

</servlet>

    <!-- 映射文件 -->

    <servlet-mapping>

        <servlet-name>dispatcherServlet</servlet-name>

        <url-pattern>*.do</url-pattern>

    </servlet-mapping>

2.访问方法方式@RequestMapping("xxxx") 加在方法上(访问映射路径)

3.返回jsp页面  return "xxxx.jsp"; 方法返回类型String

4.jsp页面传递参数取值SpringMVC自动注入属性值

   4.1 方法参数名与jsp传递名相同  (String uname)

   4.2通过对象名接收(User u)自动注入

       4.3  通过@RequestParam("uname ") 获取参数名与jsp传递名       相同

   4.4 (HttpServletRequest request) 方法参数获取        request 然后request.getParameter("uname")

5.转发从定向Controller相互跳转

   forward转发redirect重定向

   方法:“redirect:/ xxController.do”                  “forward:/ xxController.do”

   转发传递参数:方法参数直接获取

 

6.参数返回jsp页面

1.使用(@ModelAttribute("user") User us)接收参数

表示将User对象保存到HttpServletRquest中,在页面上以${user.userName}进行获取

2.通过HttpServletRequest 返回参数到jsp页面

方法中参数添加HttpServletRequest request

中文乱码:

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>