SpringMVC

SpringMVC框架学习

一、SpringMVC框架

二、入门程序

三、SpringMVC与Mybatis整合

四、SpringMVC注解开发

五、SpringMVC与structs2的区别


post17

SpringMVC框架

什么是SpringMVC

springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。

springmvc是一个基于mvc的web框架。

MVC在b/s系统下的应用

MVC就是一个设计模式

SpringMVC框架

第一步:发起请求到前端控制器(DispatcherServlet)

第二步:前端控制器请求HandlerMapping查找 Handler
可以根据xml配置、注解进行查找

第三步:处理器映射器HandlerMapping向前端控制器返回Handler

第四步:前端控制器调用处理器适配器去执行Handler

第五步:处理器适配器去执行Handler

第六步:Handler执行完成给适配器返回ModelAndView

第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象,包括 Model和view

第八步:前端控制器请求视图解析器去进行视图解析
根据逻辑视图名解析成真正的视图(jsp)

第九步:视图解析器向前端控制器返回View

第十步:前端控制器进行视图渲染
视图渲染将模型数据(在ModelAndView对象中)填充到request域

第十一步:前端控制器向用户响应结果

组件:

  1. 前端控制器DispatcherServlet(不需要程序员开发)
    作用接收请求,响应结果,相当于转发器,中央处理器。
    有了DispatcherServlet减少了其它组件之间的耦合度。

  2. 处理器映射器HandlerMapping(不需要程序员开发)
    作用:根据请求的url查找Handler

  3. 处理器适配器HandlerAdapter
    作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler

  4. 处理器Handler(需要程序员开发)
    注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler

  5. 视图解析器View resolver(不需要程序员开发)
    作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)

  6. 视图View(需要程序员开发jsp)
    View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)

入门程序

准备

需求:SpringMVC和Mybatis的商品订单案例模型

开发环境:Java 1.7
ide:idea

数据库环境:四个表,items、orderdetail、orders、user

spingmvc版本:3.2
需求将spring3.2所有jar一起加进去

配置前端控制器

在web.xml中配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">   <display-name>springmvcfirst1208</display-name> 

<!-- springmvc前端控制器 -->
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器、适配器等等)
如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-serlvet.xml(springmvc-servlet.xml)
-->

<init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/../config/springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name>
<!--
第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析
第二种:/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析
使用此种方式可以实现 RESTful风格的url
第三种:/*,这样配置不对,使用这种配置,最终要转发到一个jsp页面时,
仍然会由DispatcherServlet解析jsp地址,不能根据jsp页面找到handler,会报错。 -->

<url-pattern>*.action</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>

配置处理器适配器

在classpath下的springmvc.xml中配置处理器适配器

1
2
<!-- 处理器适配器 所有处理器适配器都实现 HandlerAdapter接口 --> 
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />

通过查看原代码:

1
2
3
public boolean supports(Object handler) {
return handler instanceof Controller;
}

此适配器能执行实现 Controller接口的Handler。

1
2
3
public interface Controller {
ModelAndView handleRequest(HttpServletRequest var1, HttpServletResponse var2) throws Exception;
}
Just for fun!
------------- 文章已经到尾 -------------