1. 今日大纲
1、 搭建SSM环境
2、 基于SSM环境实现用户管理系统
3、 学习基于mybatis的分页插件 -- 分页助手
4、 学习基于mybatis的通用Mapper插件
5、 学习RESTful Web Service
2. 统一开发环境
1、 JDK
1.7 32? 64? 推荐使用64.
2、 Eclipse
使用4.4.1 luna 课前资料中提供
3、 数据库,mysql 《淘宝技术这十年》
a) 统一使用5.6,但是,项目开发阶段可以使用5.5或5.6
b) Mysql的读写分离,统一成5.6
4、 数据库的客户端工具
a)
b) Mysql最好用的客户端。
c)
5、 Maven
a) 统一使用3.2.3
b) 统一使用Maven的私服
c) 192.168.0.47 不能使用ip:192.168.0.30 ~ 192.168.0.55
http://192.168.0.47:8081/nexus/#welcome
d)
6、 SVN
a) 作用:用于管理项目的版本
b) Svn: 192.168.0.47
c) 账户:姓名 (拼音) 张三,zhangsan,密码:123456
7、 实施:《Eclipse相关配置.docx》
2.1. 实施
2.1.1. Eclipse
3. 搭建SSM环境
3.1. 数据库
3.1.1. 使用navicat创建数据库连接
执行SQL脚本:
3.1.2. Tb_user
查看表结构:
表结构:
3.2. 创建工程
3.2.1. 新建工程
3.2.2. 填写项目的Maven坐标
Maven会自动从192.168.0.47的私服下载所需要的依赖。
3.3. 统一管理依赖的版本
需要将多个项目的依赖的版本号统一管理起来。
如何实现? --- 使用Maven的继承实现。
3.3.1. 导入itcast-parent
3.4. 完整pom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.itcast.parent</groupId>
<artifactId>itcast-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 集中定义依赖版本号 -->
<properties>
<junit.version>4.10</junit.version>
<spring.version>4.1.3.RELEASE</spring.version>
<mybatis.version>3.2.8</mybatis.version>
<mybatis.spring.version>1.2.2</mybatis.spring.version>
<mybatis.paginator.version>1.2.15</mybatis.paginator.version>
<mysql.version>5.1.32</mysql.version>
<slf4j.version>1.6.4</slf4j.version>
<jackson.version>2.4.2</jackson.version>
<druid.version>1.0.9</druid.version>
<httpclient.version>4.3.5</httpclient.version>
<jstl.version>1.2</jstl.version>
<servlet-api.version>2.5</servlet-api.version>
<jsp-api.version>2.0</jsp-api.version>
<joda-time.version>2.5</joda-time.version>
<commons-lang3.version>3.3.2</commons-lang3.version>
<commons-io.version>1.3.2</commons-io.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.spring.version}</version>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.jolbox</groupId>
<artifactId>bonecp-spring</artifactId>
<version>0.8.0.RELEASE</version>
</dependency>
<!-- httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<!-- JSP相关-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-api.version}</version>
<scope>provided</scope>
</dependency>
<!-- 时间操作组件 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda-time.version}</version>
</dependency>
<!-- Apache工具组件-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java编译插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
3.4.1. 继承parent
3.4.2. 出现小红叉
解决:
原因:
定义的java编译器插件的jdk版本和默认使用的jdk版本不一致,导致。
3.5. 子工程使用依赖
3.5.1. Parent中的依赖管理
3.6. 导入依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.itcast.parent</groupId>
<artifactId>itcast-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>cn.itcast.usermanage</groupId>
<artifactId>itcast-usermanage</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.jolbox</groupId>
<artifactId>bonecp-spring</artifactId>
</dependency>
<!-- JSP相关-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- Apache工具组件-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>80</port>
<!--
http://127.0.0.1:{port}/{path}
-->
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
3.7. 运行tomcat插件
运行出错:
问题:
解决:
需要将itcast-parent安装到本地仓库。
3.8. Web.xml
<?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"
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>itcast-usermanage</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext*.xml</param-value>
</context-param>
<!--Spring的ApplicationContext载入 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 编码过滤器,以UTF8编码-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置SpringMVC框架入口-->
<servlet>
<servlet-name>itcast-usermanage</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/itcast-usermanage-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>itcast-usermanage</servlet-name>
<!--
可以:
*.xxx
/xxx/*
/
不可以:
/*
-->
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
3.9. Jdbc.properties
3.10. Spring容器配置文件
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!-- 使用spring自带的占位符替换功能-->
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<!-- 允许JVM参数覆盖-->
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<!-- 忽略没有找到的资源文件 -->
<property name="ignoreResourceNotFound" value="true" />
<!-- 配置资源文件 -->
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
<!-- 扫描包 -->
<context:component-scan base-package="cn.itcast"/>
<!-- 定义数据源 -->
<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"
destroy-method="close">
<!-- 数据库驱动 -->
<property name="driverClass" value="${jdbc.driverClassName}" />
<!-- 相应驱动的jdbcUrl -->
<property name="jdbcUrl" value="${jdbc.url}" />
<!-- 数据库的用户名 -->
<property name="username" value="${jdbc.username}" />
<!-- 数据库的密码 -->
<property name="password" value="${jdbc.password}" />
<!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 -->
<property name="idleConnectionTestPeriod" value="60" />
<!-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 -->
<property name="idleMaxAge" value="30" />
<!-- 每个分区最大的连接数 -->
<!--
判断依据:请求并发数
-->
<property name="maxConnectionsPerPartition" value="100" />
<!-- 每个分区最小的连接数 -->
<property name="minConnectionsPerPartition" value="5" />
</bean>
</beans>
3.11. Spring事务
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!-- 定义事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 定义事务策略 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--所有以query开头的方法都是只读的-->
<tx:method name="query*" read-only="true" />
<!--其他方法使用默认事务策略-->
<tx:method name="*" />
</tx:attributes>
</tx:advice>
<aop:config>
<!--pointcut元素定义一个切入点,execution中的第一个星号 用以匹配方法的返回类型,
这里星号表明匹配所有返回类型。 com.abc.dao.*.*(..)表明匹配cn.itcast.mybatis.service包下的所有类的所有
方法 -->
<aop:pointcut id="myPointcut" expression="execution(*cn.itcast.usermanage.service.*.*(..))" />
<!--将定义好的事务处理策略应用到上述的切入点-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut" />
</aop:config>
</beans>
3.12. SpringMVC配置文件
3.13. Mybatis和Spring的整合
3.13.1. 整合文件
3.13.2. Mybatis的全局配置文件
3.14. 导入jsp页面
3.15. 通用页面跳转
测试:
3.16. EasyUI的datagrid的数据结构
3.17. 封装EasyUIResult
4. 实现用户列表的查询
4.1. Controller实现
4.2. UserService
使用分页助手完成分页功能。
4.3. UserMapper
编写UserMapper.xml文件:
在Spring和Mybatis的整合文件中将引入Mapper.xml文件的注释打开:
4.4. 效果
4.5. Datagrid的formatter方法
后台返回的数据是时间戳:
4.6. 扩展JS的内置对象的方法
在内置对象的原型上扩展方法:
4.7. 实现分页
4.7.1. 如何实现?
方案一:
在SQL语句中添加 LIMIT 将page和rows传递到Mapper接口中,即可完成。
方案二:
使用通用的分页逻辑,分页助手实现。
4.8. 分页助手
4.9. 开源中国
4.10. 大神
4.11. 分页助手使用
4.11.1. 导入依赖
4.11.2. 配置分页助手
Mybatis的全局配置文件中:
4.11.3. 设置分页参数以及获取分页信息
4.12. 使用的注意事项
5. 通用Mapper
5.1. 假设:使用Mybatis只需要定义Mapper接口,无需编写Mapper.xml文件
如果要实现无需编写Mapper.xml文件,我们必须要实现动态拼接SQL。
如何实现动态拼接SQL语句?
思路:编写Mybatis的插件,在执行的过程中动态生成SQL语句。
5.2. 简介
http://www.oschina.net/p/mybatis-mapper
作者:
5.3. 使用通用Mapper
5.3.1. 文档
5.3.2. 如何集成通用Mapper
5.3.3. 配置通用Mapper拦截器
注意:配置插件的顺序,必须是分页助手在前面,通用Mapper插件在后面。
5.3.4. 定义Mapper接口
5.3.5. 实体添加JPA注解
5.4. 使用通用Mapper实现用户数据查询
5.4.1. NewUserMapper
5.4.2. NewUserServie
5.4.3. UserController
5.4.4. 执行的SQL
5.5. 测试
5.5.1. 创建单元测试用例
5.5.2. 初始化NewUserMapper
5.5.3. 通用Mapper动态拼接SQL
5.5.4. 完整测试用例
public class NewUserMapperTest {
private NewUserMappernewUserMapper;
@Before
public void setUp()throws Exception {
ApplicationContext applicationContext =new ClassPathXmlApplicationContext(
"classpath:spring/applicationContext*.xml");
this.newUserMapper =applicationContext.getBean(NewUserMapper.class);
}
@Test
public void testSelectOne() {
User record = new User();
record.setuserName("zhangsan");
User user = this.newUserMapper.selectOne(record);
System.out.println(user);
}
@Test
public void testSelect() {
User record = new User();
//多个条件之间是AND关系
// record.setuserName("zhangsan");
// record.setPassword("123456");
record.setSex(1);
List<User> list = this.newUserMapper.select(record);
for (Useruser : list) {
System.out.println(user);
}
}
@Test
public void testSelectCount() {
System.out.println(this.newUserMapper.selectCount(null));
}
@Test
public void testSelectByPrimaryKey() {
User user = this.newUserMapper.selectByPrimaryKey(1L);
System.out.println(user);
}
@Test
public void testInsert() {
User record = new User();
// record.setAge(20);
record.setBirthday(new Date());
record.setCreated(new Date());
// record.setUpdated(new Date());
record.setName("name_4");
record.setPassword("20");
// record.setSex(1);
record.setuserName("user_name_4");
// SQL:INSERT INTO tb_user (CREATED,BIRTHDAY,ID,SEX,NAME,AGE,UPDATED,USER_NAME,PASSWORD)
// VALUES ( ?,?,?,?,?,?,?,?,? )
//将对象中的所有属性都当做是SQL语句中字段执行
this.newUserMapper.insert(record);
System.out.println(record.getId());
}
@Test
public void testInsertSelective() {
User record = new User();
// record.setAge(20);
record.setBirthday(new Date());
record.setCreated(new Date());
// record.setUpdated(new Date());
record.setName("name_3");
record.setPassword("20");
// record.setSex(1);
record.setuserName("user_name_3");
// INSERT INTO tb_user ( NAME,BIRTHDAY,ID,CREATED,USER_NAME,PASSWORD ) VALUES ( ?,?,?,?,?,?
// )
// Selective:将不为null的属性作为SQL语句中字段
this.newUserMapper.insertSelective(record);
System.out.println(record.getId());
}
@Test
public void testDelete() {
fail("Not yet implemented");
}
@Test
public void testDeleteByPrimaryKey() {
fail("Not yet implemented");
}
@Test
public void testUpdateByPrimaryKey() {
//更新所有的字段,更新条件是:主键
fail("Not yet implemented");
}
@Test
public void testUpdateByPrimaryKeySelective() {
//更新不为null的字段,更新条件是:主键
fail("Not yet implemented");
}
@Test
public void testSelectCountByExample() {
fail("Not yet implemented");
}
@Test
public void testDeleteByExample() {
fail("Not yet implemented");
}
@Test
public void testSelectByExample() {
Example example = new Example(User.class);
List<Object> values = new ArrayList<Object>();
values.add(1L);
values.add(2L);
values.add(3L);
//设置查询条件
example.createCriteria().andIn("id",values);
//设置排序条件
example.setOrderByClause("created DESC");
List<User> list = this.newUserMapper.selectByExample(example);
for (Useruser : list) {
System.out.println(user);
}
}
@Test
public void testUpdateByExampleSelective() {
fail("Not yet implemented");
}
@Test
public void testUpdateByExample() {
fail("Not yet implemented");
}
}
5.6. 集成到项目中
6. RESTful Web Service
6.1. 大纲
6.2. REST是什么?
大神:
论文:Roy Thomas Fielding博士论文REST(中文版).pdf
6.3. REST到底是什么?
6.4. RESTful是什么?
Web service:
JAX-WS
JAX-RS
6.5. REST 架构的主要原则
6.6. URI和URL
6.7. 无状态性
6.8. 资源操作
之前的操作:
http://127.0.0.1/user/query/1 GET 根据用户id查询用户数据
http://127.0.0.1/user/save POST 新增用户
http://127.0.0.1/user/update POST 修改用户信息
http://127.0.0.1/user/delete GET/POST 删除用户信息
RESTful用法:
http://127.0.0.1/user/1 GET 根据用户id查询用户数据
http://127.0.0.1/user POST 新增用户
http://127.0.0.1/user PUT 修改用户信息
http://127.0.0.1/user DELETE 删除用户信息
6.9. REST接口定义
6.10. 最佳实践
6.10.1. REST接口设计
6.10.2. 响应设计
6.10.3. 响应示例
6.10.4. 指定响应的属性字段
7. http响应状态码
8. SpringMVC实现RESTful服务
8.1. 查询资源
8.2. 新增资源
测试:
8.3. 更新资源
测试:
默认情况下,PUT请求是无法提交表单数据的,需要在web.xml中添加过滤器解决:
<!-- 解决PUT请求无法提交表单数据的问题-->
<filter>
<filter-name>HttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
8.4. 删除资源
测试:
需要在web.xml中添加过滤器解决DELETE请求无法提交表单数据的问题:
<!--
将POST请求转化为DELETE或者是PUT
要用_method指定真正的请求参数
-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
9. 小结