Spring学习笔记5-MVC-1

来源:互联网 发布:淘宝宅腐仓 编辑:程序博客网 时间:2024/06/05 17:49
1、概述
Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架
Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口。
支持 REST 风格的 URL 请求
采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性
2、开发步骤
加入 jar包
在 web.xml 中配置 DispatcherServlet
加入 Spring MVC 的配置文件
编写处理请求的处理器,并标识为处理器
编写视图
3、JAR文件
spring-aop/spring-beans/spring-context/spring-core/spring-expression/spring-web/spring-webmvc
4、配置DispatcherServlet
DispatcherServlet 默认加载 /WEB-INF/<servletName-servlet>.xml 的 Spring 配置文件, 启动 WEB 层的 Spring 容器。可以通过 contextConfigLocation 初始化参数自定义配置文件的位置和名称
<servlet>
<servlet-name>test</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>test</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
5、创建SpringMVC配置文件
配置自动扫描的包
<context:component-scan base-package="com.test.springmvc"></context:component-scan>
配置视图名称解析器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages"/>
<property name="suffix" value=".jsp"/>
</bean>
6、创建请求处理器
类注解@Controller、方法注解@RequestMapping("/testSpringMVC")
7、@RequestMapping映射请求
Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求
@RequestMapping类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目录
@RequestMapping方法处:提供进一步的细分映射信息。相对于类定义处的 URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于WEB 应用的根目录
DispatcherServlet 截获请求后,就通过控制器上@RequestMapping 提供的映射信息确定请求所对应的处理方法。
@Controller@RequestMapping("/test")
//类定义处标记的@RequestMapping 限定了处理器类可以处理所有 URI 为 /test 的请求,它相对于 WEB 容器部署的根路径
public class MyTest
@RequestMapping("/springMVC")
//处理器类可以定义多个处理方法,处理来自/test下的请求,这个方法处理的是:/test/springMVC请求
public String myTest(){}
@RequestMapping 除了可以使用请求 URL 映射请求外还可以使用请求方法、请求参数及请求头映射请求
@RequestMapping 的 value、method、params 及 heads分别表示请求 URL、请求方法、请求参数及请求头的映射条件,他们之间是与的关系,联合使用多个条件可让请求映射更加精确化。
params 和 headers支持简单的表达式:
--param1: 表示请求必须包含名为 param1 的请求参数
--!param1: 表示请求不能包含名为 param1 的请求参数
--param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1
--{“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2的两个请求参数,且 param1 参数的值必须为 value1
Ant 风格资源地址支持 3 种匹配符:
?:匹配文件名中的一个字符 –
*:匹配文件名中的任意字符 –
**:** 匹配多层路径 –
@RequestMapping 还支持 Ant 风格的 URL:
/user/*/createUser: 匹配 
/user/aaa/createUser、/user/bbb/createUser 等 URL
/user/**/createUser: 匹配 
/user/createUser、/user/aaa/bbb/createUser 等 URL
/user/createUser??: 匹配 
/user/createUseraa、/user/createUserbb 等 URL
8、@RequestMapping扩展:@PathVariable映射URL绑定的占位符
带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable("xxx") 绑定到操作方法的入参中。
@RequestMapping("/delete/{id}")
public String delete(@PathVariable("id") Integer id){......... return "redirect:/xxx.action"}
9、REST
1、Representational  State  Transfer:(资源)表现层状态转化
2、资源Resources:一个具体的存在,可以通过URI来访问
3、表现层Representation:把资源具体呈现出来的形式
4、状态转化State Transfer:每发出一个请求,就代表客户端和服务器的一次交互过程。HTTP协议是一个无状态协议即所有状态都保存在服务器上,
因此,如果客户端想要操作服务器则必须通过某种手段,让服务器发生状态转化,而这种转化是建立在表现层上的,更准确来说:服务器端发生的变化
体现在表现层,具体来说HTTP协议里面,4个表示操作方式的动词:GET/POST/PUT/DELETE分别代表4种操作,GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源
5、HiddenHttpMethodFilter:浏览器中form表单只支持GET/POST请求,而Spring3.0添加一个过滤器可以将这些请求转化为标准的HTTP方法从而支持剩余的DELETE/PUT请求。