springmvc本质是对request做的封装
一个url路径只能对应一个处理器,只能对应一个方法
一个方法可以对应多个url
绑定简单数据类型,最好用包装数据类型,请求路径中的参数变量名要和方法中的参数名一致,否则接收不到数据
解决不一致使用(@RequestParam(value="itemId",required=true,defaultValue="1") int id)
请求参数是pojo,页面属性名与pojo属性名不一致,没有解决方法,不一致就接收不到参数
ssm整合:
SqlMapConfig.xml空文件,<configuration></configuration>标签不能少,否则报文件提前结束的错。
form表单提交解决中文乱码问题
post请求:在web.xml中配置编码过滤器
<filter>
<filter-name>encoding</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>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
*/
对于get请求中文参数出现乱码解决方法有两个:
修改tomcat配置文件添加编码与工程编码一致,如下:
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
另外一种方法对参数进行重新编码:
String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8");
ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码
自定义转换器实现Converter<S, T>接口
//S:source,需要转换的源的类型
//T:target,需要转换的目标类型
list集合只能通过包装类属性接收数据
数组接收数据可以在controller方法形参中声明接收数据
获取异常的详情信息:
配置图片上传解析器:必须配置id,id名称必须是上传解析器接口的名字,首字母小写
<!-- 文件上传,id必须设置为multipartResolver -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置文件上传大小 -->
<property name="maxUploadSize" value="5000000" />
</bean>
// 提交修改的商品,上传图片后台逻辑
@RequestMapping("/updateItem")
public String updateItem(Item item, MultipartFile pictureFile) throws Exception {
// 上传文件
// 设置图片名称
UUID uuid = UUID.randomUUID();
// 获取原始图片后缀名
String srcFilename = pictureFile.getOriginalFilename();
String sub = srcFilename.substring(srcFilename.lastIndexOf("."));
// 图片名字拼接
String picName = uuid + sub;
// 上传文件
pictureFile.transferTo(new File("D:/360Downloads/images/"+picName));
item.setPic(picName);
this.itemService.updateItemById(item);
return "forward:/itemEdit.action";
}
@PathVariable和@RequestParam区别
需要返回的是json数据加@ReaponseBody,不走视图解析器,不会返回页面。
拦截器三个方法执行顺序:
preHandle按拦截器定义顺序调用
postHandler按拦截器定义逆序调用
afterCompletion按拦截器定义逆序调用
自定义拦截器实现HandlerInterceptor接口
<!-- springmvc.xml配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 配置商品被拦截器拦截 -->
<mvc:mapping path="/item/**" />
<!-- 配置具体的拦截器 -->
<bean class="com.ssm.interceptor.LoginInterceptor" />
</mvc:interceptor>
</mvc:interceptors>