目录
(2)@RequestMapping可以加在类头部,用于目录分级管理
(1)在tomcat中进行虚拟路径的配置(方便我们从本地拿图片)
1.高级参数的绑定
(1)数组类型的参数绑定
基于批量删除商品的操作完成参数传递
这里是用CheckBox进行选择
(2)List类型的绑定
基于批量修改商品操作完成参数的传递
控制器
pojo
2.@RequestMapping注解的使用
(1)路径映射可以是数组
也就是我们可以通过多个访问路径访问
(2)@RequestMapping可以加在类头部,用于目录分级管理
用于分目录管理的话就需要在访问路径上加上/item
(3)限定请求方法
这里我们可以限制提交的方式,上面写法就是post和get提交方式都可以,也是默认的方式
如果是post请求这里可以用@PostMapping来替代,还有@GetMapping,@PutMapping,@DeleteMapping
3.Controller方法返回值
(1)返回ModelAndView
(2)返回void
1)request
2)response
(3)返回String(也就是返回视图的名字)
redirect和forward
3.SpringMVC的异常处理
思想:做一个全局异常处理器,处理所有没有处理过的运行时异常用于更友好地提示用户。
步骤:
(1)创建全局异常处理器
(2)配置异常处理器
(3)测试访问queryVoid.action
更加智能的解决方案
(1)自定义异常类
(2)修改异常处理器
(3)测试访问queryVoid.action
4、图片上传处理(要用post提交,不能用get)
(1)在tomcat中进行虚拟路径的配置(方便我们从本地拿图片)
eclipse中的配置
myeclipse的配置
(2)引入相关的jar包
(3)在springmvc.xml中配置多媒体解析器
(4)jsp的修改(注意图片上传的src中的虚拟路径)
(5)编写图片上传处理代码(重点)
5.JSON的数据交互
(1)加入jar包
(2)编码
6.SpringMVC实现Restful
编码
restful风格的需求
https://blog.csdn.net/qq_27026603/article/details/82012277
测试
测试直接访问url{http://localhost:8080/项目名/item/1.action}即可。
如果想要测试的时候不写action的话,也就是测试直接访问url{http://localhost:8080/项目名/item/1},那么就要在web.xml中将拦截的url-parrten中的*.action换成/,注意不能换成/*,不然jsp也会被拦截而使用不了。
7.拦截器
拦截器开发流程
(1)创建拦截器
1)一号拦截器
package com.itheima.springmvc.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/**
* 自定义拦截器
* @author Steven
*
*/
public class MyInterceptor implements HandlerInterceptor {
//方法执行后被执行
//处理异常,清资源,记录日志等等
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("MyInterceptor.afterCompletion.......");
}
//方法执行之后,返回ModelAndView之前被执行
//设置页面的共用参数等等
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("MyInterceptor.postHandle.......");
}
//进入方法前被执行
//登录拦截,权限验证等等
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("MyInterceptor.preHandle.......");
//true放行,false拦截
return true;
}
}
2)二号拦截器,复制一号,修改一下系统输出消息
package com.itheima.springmvc.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/**
* 自定义拦截器
* @author Steven
*
*/
public class MyInterceptor2 implements HandlerInterceptor {
//方法执行后被执行
//处理异常,清资源,记录日志等等
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("MyInterceptor2.afterCompletion.......");
}
//方法执行之后,返回ModelAndView之前被执行
//设置页面的共用参数等等
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("MyInterceptor2.postHandle.......");
}
//进入方法前被执行
//登录拦截,权限验证等等
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("MyInterceptor2.preHandle.......");
//true放行,false拦截
return true;
}
}
(2)配置拦截器
拦截器案例
思路
1.有一个登录页面,需要写一个controller访问页面
2.登录页面有一提交表单的动作。需要在controller中处理。
1)判断用户名密码是否正确
2)如果正确 想session中写入用户信息
3)返回登录成功,或者跳转到商品列表
3.拦截器
1)拦截用户请求,判断用户是否登录
2)如果用户已经登录。放行
3)如果用户未登录,跳转到登录页面。
(1) login.jsp
(2) UserController
(3) LoginInterceptor拦截器编码
(4) 拦截器配置
8.乱码的解决
乱码问题{
提交问题{
post乱码:过滤器解决;
get乱码:tomcat配置 URIEncoding="utf-8"
}
响应乱码{
response乱码:获取getWriter之前,response.setCharacterEncoding("utf-8");
}
}