springMVC基础

  一:SpringMVC概述

  Spring MVC框架是围绕DispatcherServlet这个核心展开的,DispatcherServlet是Spring MVC的总导演,总策划,它负责截获请求并将其分派相应的处理器处理。

  二:SpringMVC体系结构

  体系结构如下:

  

  从接收请求到返回响应,Spring MVC框架的众多组件同理配合,各司其职,有条不紊地完成分内的工作。在整个框架中,DispatcherServlet处于核心位置,它负责协调和组织不同组件以完成请求处理并返回响应的工作。和大多数Web MVC框架一样,Spring MVC通过一个前端Servlet接收所有的请求,并将具体工作委托给其他组件进行处理,DispatcherServlet就是Spring MVC的前端Servlet。Spring MVC处理请求的整体过程如下:

  1.整个过程始于客户端发出一个HTTP请求,web应用服务器接收到这个请求,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器就将该请求转交给DispatcherServlet处理。

  2.DispatcherServlet接收到这个请求后,将根据请求信息及HandlerMapping的配置找到处理请求的处理器(Handler)。可将HandlerMapping看成路由控制器,将Handler看成目标主机。

  3.当DispatcherServlet根据HandlerMapping得到对应当前请求的Handler后,通过HandlerAdapter对Handler进行封装,再以统一的适配器接口调用Handler。

  4.处理器完成业务逻辑的处理后将返回一个ModelAndView给DispatcherServlet,ModelAndView包含了视图逻辑名和模型数据信息。

  5.ModelAndView中包含的是“逻辑视图名”而非真正的视图对象,DispatcherServlet借由ViewResolver完成逻辑视图名到真实视图对象的解析工作。

  6.当得到真实的视图对象View后,DispatcherServlet就使用这个View对象对ModelAndView中的数据模型进行视图渲染。

  7.最终客户端得到的响应消息可能是一个普通的HTML页面,也可能是一个XML或JSON串,甚至是一张图片或一个PDF文档等不同的媒体形式,

  :案例分析

  1.添加SpringMVC所需要的jar包,大致如下:(根据需要还可自行添加)

  

  2.web容器之web.xml配置:

  

  3.SpringMVC默认配置文件名及位置:

  SpringMVC默认的配置文件名格式:web.xml中配置的“servlet的名称”+“-”+servlet.xml。那么,该SpringMVC的配置文件名为:test-servlet.xml。存放位置默认在WEB-INF目录下,即WEB-INF/test-servlet.xml。如下:

  

  内容如:

  

  4.Controller层

   4.1.StartController自己自己编写的ctrl

  

  当在浏览器中输入:http://localhost:7080/testSpringMVC/start.test请求的时候,会被总派发器DispatcherServlet拦截,经由HandlerMapping把请求映射到具体的控制器。从test-servlet.xml中可以得知:<prop key="start.test">startController</prop>,<bean id="startController" class="com.olymtech.springmvc.StartController"></bean>。将此请求映射到StartController控制器。经由该控制器处理后返回ModelAndView,其中返回的有个逻辑视图名“start”,然后配置中的视图解析器,把控制器返回的视图逻辑名映射到一种具体的视图实现。

  运行结果:页面跳到start.jsp页面,控制台打印出:controller is start!

  4.2.使用自带的ctrl

  这样一来不需要自己编写ctrl去实现Controller接口,但这仅仅用于配置逻辑视图名,直接跳转页面。从test-servlet.xml配置文件中可以看出:

  

  当在浏览器中输入:http://localhost:7080/testSpringMVC/login.test请求的时候,会被总派发器DispatcherServlet拦截,经由HandlerMapping把请求映射到具体的控制器。从test-servlet.xml中可以得知:<prop key="login.test">loginController</prop>。将此请求映射到ParameterizableViewController控制器(自带的控制器实现类)。从配置中可以看出,其中返回的有个逻辑视图名“login”,然后配置中的视图解析器,把控制器返回的视图逻辑名映射到一种具体的视图实现。

  运行结果:页面跳到login.jsp页面。

  4.3.使用自带的ctrl的另一种写法

  这样一来不需要自己编写ctrl去实现Controller接口,但这仅仅用于配置逻辑视图名,直接跳转页面。从test-servlet.xml配置文件中可以看出:

  

  当在浏览器中输入:http://localhost:7080/testSpringMVC/login.test请求的时候,会被总派发器DispatcherServlet拦截,经由HandlerMapping把请求映射到具体的控制器。从test-servlet.xml中可以得知:<prop key="login.test">loginController</prop>。将此请求映射到UrlFilenameViewController控制器(自带的控制器实现类)。然后配置中的视图解析器,把控制器返回的视图逻辑名映射到一种具体的视图实现。(不用显示的指定逻辑视图名,而是默认截取url请求中的login)。

  运行结果:页面跳到login.jsp页面。

  4.4.自己编写的ctrl继承能自动实现对象封装的AbstractCommandController

  

  Emp实体对象:

  

  我们的目的是在员工添加页面,输入相关信息,点击add按钮,能将表单信息提交到ctrl层,并自动封装成Emp对象,而不是利用传统的方式:request.getParameter("name"),这种方式去获取传过来的参数。

  首先,我们根据请求:http://localhost:7080/testSpringMVC/add_emp.test,到达添加员工页面:

  

  当输入这些信息到达EmpController之后,根据test-servlet.xml中的配置,会被自动封装成到command对象中。这样有个缺点就是对Date类型的参数无法封装。

 

posted @ 2016-07-13 19:58  夏日树叶  阅读(411)  评论(0编辑  收藏  举报