Spring MVC
Spring MVC属于SpringFrameWork的后续产品。Spring框架提供了构建WEB应用程序的全功能MVC模块。
使用Spring可插入的MVC框架,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架。
Spring MVC 3.0新特性
支持REST风格的URL
添加更多注解,可完全注解驱动
引入HTTP输入输出转换器(HttpMessageConverter)
和数据转换、格式化、验证框架无缝集成
对象静态资源处理提供特殊支持
更加灵活的控制器方法签名,可完全独立于ServletAPI
SpringMVC开发环境的简单搭建
需要加载的依赖
<!-- springmvc依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
springmvc最核心的类是DispatcherServlet
我们需要将它配置在web.xml
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
通过<url-patten>指定的路径,进入DispatcherServlet类里的service方法去处理
我们还需要在WebRoot下配置一个xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">
</beans>
配置好后我们就可以发布到tomcat
访问index
SpringMVC开发结构
package com.baobaotao.web;
...
@Controller ① 将UserController变成一个Handler
@RequestMapping(“/user”) ②指定控制器映射的URL
public class UserController {
@RequestMapping(value = “/register”) ③处理方法对应的URL,相对于
②处的URL
public String register() {
return “user/register”; ④返回逻辑视图名
}
}
@RequestMapping支持URL
@RequestMapping不但支持标准的URL,还支持Ant风格(即?、*和**的字符,参见3.3.2节的内容)的和带{xxx}占位符的URL。以下URL都是合法的:
/user/*/createUser
匹配/user/aaa/createUser、/user/bbb/createUser等URL。
/user/**/createUser
匹配/user/createUser、/user/bbb/aa/createUser等URL。
/user/createUser??
匹配/user/createUseraa、/user/createUserbb等URL。
/user/{userid}
匹配/user/123、/user/abc等URL。
/user/**/{userid}
匹配/user/aa/bb/123、/user/aa/abc等URL。
/company/{companyid}/user/{userid}/detail
匹配/company/123/user/313/detai等URL。
Restful风格设计概念
REST,即Representational State Transfer的缩写。“表现层状态转化”。研究计算机科学两大前沿---软件和网络---的交叉点
“表现层”其实指的是“资源”(Resources)的“表现层”。所谓“资源”,就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具有信息。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。
restful URI的设计不该包含动词。因此“资源”表示一种实体,所以应该是名词,URI不应该有动词,某个URI是/arcticle/show/1,其中show是动词,这个URI就设计错了,正确的写法应该是//arcticle/1,然后用GET方法表示show.
优质WEB框架五条关键原则列举如下:
为所有“事物”定义ID
将所有事物连接在一起(超链接)
使用标准方法(Get、Post、Delete、Put)
资源多重表述(针对不同的需求提供资源多重表述 arcticle/1)
无状态通信(节省服务器内存)
REST是设计风格而不是标准 目的只是让URI看起来更简洁使用,是资源状态的一种表达,资源时由URI来指定,对资源的操作包括获取、创建、修改、删除资源这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。通过操作资源的表现形式来操作资源。
常用操作:
GET 获取
POST 提交
PUT 更新
DELETE 删除
常用的URI风格例如:
http://write.blog.csdn.net/postlist/0/all/draft
SpringMVC配置
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
SpringMVC限定请求方法
请求方法,在HTTP中这被叫做动词(varb),除了两个大家熟知的(GET和POST)之外,标准方法集合中还包含PUT、DELETE、HEAD和OPTIONS。这些方法的含义连同行为许诺都一起定义在HTTP规范之中,一般浏览器只支持GET和POST方法。
示例:
查询
创建一个jsp
<body>
<form action="<%=path%>/query" method="get">
<input type="text" name="name"/><input type="submit" value="查询">
</form>
</body>
创建一个@Controller层的类
package cn.et.springmvc.lession01;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* SpringMVC中一个路径和方法的映射叫做一个action(动作)
* @author Administrator
*
*/
@Controller
public class HelloController{
@RequestMapping("/query")
public String query(String name,HttpServletResponse response) throws Exception{
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println(name+":查询");
return null;
}
}
访问index并查询
新增
<body>
<form action="<%=path%>/add/55" method="post">
<input type="text" name="name"/><input type="submit" value="添加">
</form>
</body>
@RequestMapping(value="/add/{id}",method=RequestMethod.POST)
public String add(@PathVariable(value="id")String id,String name,HttpServletResponse response) throws Exception{
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println(id+"="+name+":添加");
return null;
}
因为是修改所以我们需要在web.xml里配置一个请求限定的
<!-- 请求method支持put和delete必须添加过滤器 -->
<filter>
<filter-name>myFile</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFile</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
通过POST请求的_method参数指定请求方法,HiddenHttpMethodFilter动态更改HTTP头信息。
修改
<body>
<form action="<%=path%>/update/11" method="post">
<input type="hidden"name="_method" value="put" >
<input type="text" name="name"/><input type="submit" value="提交">
</form>
</body>
@RequestMapping(value="/update/{id}",method=RequestMethod.PUT)
public String update(@PathVariable(value="id")String id,String name,HttpServletResponse response) throws Exception{
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println(id+"="+name+":修改");
return null;
}
删除
<body>
<form action="<%=path%>/delete" method="post">
<input type="hidden"name="_method" value="delete" >
<input type="text" name="name"/><input type="submit" value="提交">
</form>
</body>
@RequestMapping(value="/delete",method=RequestMethod.DELETE)
public String delete(String name,HttpServletResponse response) throws Exception{
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println(name+":删除");
return null;
}
个URI就设计错了,正确的R写法应该是//
arc