首先, 我总结复习之前的内容, 详细地介绍一下SpringMVC各组件的作用和用法.
1.配置前端控制器
2.配置映射器
3.配置适配器
4.配置视图解析器
5.配置Handler
DispatcherServlet.properties
springmvc中:当我们没有手动去配置,映射器,适配器,视图解析器这么几个组件的时候,那么会自动去加载DispatcherServlet.properties配置文件的默认配置
另外一个映射器和适配器(非注解), 这两种不常用!
适配器: HttpRequestHandlerAdapter
该适配器要求Handler实现HttpRequestHandler接口
映射器:
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
在视图解析器中配置jsp路径的前缀和后缀,那么在返会ModelAndView的时候,JSP路径会默认加上下面配置的前缀和后缀
Springmvc的注解形式的适配器和映射器
AnnotationMethodHandlerAdapter
DefaultAnnotationHandlerMapping
上面的映射器和适配器从3.2版本开始就已经过时了
3.2版本以后采用的注解映射器和注解适配器
映射器:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
适配器:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
Springmvc.xml文件中的配置
相关注解:
@Controller
:申明下面的类是一个Handler, 并且会由springIOC容器来创建实例
@RequestMapping
: 指定Handler中某个方法的访问路径
那么采用注解形式开发,可以在一个Handler中编写多个业务方法
参数的绑定
在springmvc中有几个参数是默认已经绑定好了的
HttpServletReuqest
HttpServletResponse
Model
HttpSession
如果要是用上面几个参数,只需要在形式参数中绑定即可
1.简单类型的绑定
默认情况下,请求中的参数名必须要和Controller方法中的形参的参数名一致才能绑定成功
上面的注解表示请求中的参数名要和value的值保持一样 才能绑定成功
required: 表示该参数是否是必须的。
defaultValue: 给这个参数一个默认值。
2.pojo类型的绑定
a) 简单类型pojo
要求请求中的参数名和pojo中的属性名保持一致才能绑定
b) 包装类型的pojo
如果绑定的类型是包装的pojo类型, 那么请求参数名必须是包装的pojo中的属性名.属性名
直到最后的类型是简单类型即可,如下图,绑定的参数是
包装类型QueryVo
queryVo中的属性items,而items中的属性是name,price … 所以请求参数名为items.name
实体类:
public class QueryVo {
private Items items;
// 封装List集合, 集合中元素为Items
List<Items> itemsList;
// ...
}
public class Items {
private Integer id;
private String name;
private Double price;
private String detail;
private String pic;
private Date createtime;
// ...
}
解决中文乱码的过滤器
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. 自定义参数绑定
需要我们自定义一个参数类型转换器 ,去实现springmvc提供的一个接口Converter<String, Date>
。
/**
* 将字符串转换成Date类型
* Author menglanyingfei
* Created on 2018.01.24 14:44
*/
public class StringToDate implements Converter<String, Date> {
@Override
public Date convert(String s) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
return format.parse(s);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
然后还需要在处理器适配器中配置一个自定义参数绑定器:
在springMVC.xml中配置:
<!-- 配置注解形式的适配器和映射器
conversion-service: 配置自定义参数绑定器
validator: 引入一个校验器
-->
<mvc:annotation-driven conversion-service="conversionService"
/>
<!-- 注册一个参数绑定器 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!-- 转换器 -->
<property name="converters">
<list>
<bean class="com.wtu.ssm.utils.StringToDate"/>
</list>
</property>
</bean>
Jsp页面:
4. 数组类型的参数绑定
批量删除商品: 根据商品的id删除,多个商品的id,将多个id绑定到一个数组中:
只需要请求参数名和controller方法中的形参的数组名一致即可。
5. 集合类型的参数绑定
批量修改商品信息:
1. 批量查询商品, 然后将所有的商品显示在一个批量修改的页面。批量修改商品的页面可以直接采用ItemsList.jsp
2. 提交批量修改商品
页面上的参数名该怎么定义?
此时在QueryVo中封装了itemsList集合:
完整代码地址
https://github.com/menglanyingfei/SSMLearning/tree/master/SSM