- 第四章 SpringMVC核心技术
- 1.转发和重定向
- 1.1 java代码
- 1.2 jsp页面other.jsp
- 2. 异常处理
- 3.拦截器
- 3.1 第一个拦截器
- 1)preHandle 中可以进行 登录验证 和 权限判断。
- 2)postHandle 对请求做二次的处理
- 4)afterCompletion 最后执行
- 3.2 多个拦截器
- 1)两个拦截器,第一个preHandler=true,第二个拦截器preHandler=true
- 2)两个拦截器,第一个preHandler=true,第二个拦截器preHandler=flase
- 3)两个拦截器,第一个preHandler = false,第二个拦截器preHandler = true | flase
- 为什么要使用多个拦截器?
- 简单实现验证功能
- 3.3 拦截器和过滤器的对比
forward:视图完整路径
redirect:视图完整路径
1.1 java代码@Controller
public class MyController {
* 控制器方法返回的是MOdelAndView实现转发forward
* 语法: mv.setViewName("forward:视图完整路径")
*
* forward特点 : 不和视图解析器一同工作的。就当项目中没有视图解析器。
*
* 这种方法的意义在于当show.jsp不在视图解析器规定的路径下比如在webapp目录下 就可以用forward来找到
* */
@RequestMapping(value = "/doForward.do")
public ModelAndView doForward(){
System.out.println("执行了MyController的doSome方法");
ModelAndView mv = new ModelAndView();
// 添加数据
mv.addObject("msg","处理了some.do请求");
mv.addObject("fun","执行了doSome方法");
// mv.setViewName("forward:/WEB-INF/view/show.jsp");
mv.setViewName("forward:/hello.jsp");
// 返回结果
return mv;
}
* 当控制器发方法返回ModelAndView实现重定向
* 语法:mv.setViewName("redirect:视图完整路径")
* redirect特点:不和视图解析器一同工作,就当项目中没有视图解析器
*
* 框架提供的重定向的功能
* 1.框架可以实现两次请求之间的数据传递,把第一个请求中的Model里面
* 简单类型的数据,转为字符串,附加到目标页面的后面,做get参数传递。
* 可以在目标页面中获取参数值使用。
*
* 2.在目标页面中,可以使用${para.参数名} 获取参数的值
* */
@RequestMapping("/doRedirect.do")
public ModelAndView doRedirect(String name,Integer age){
System.out.println("doRedirect,name=="+name+",age="+age);
ModelAndView mv = new ModelAndView();
// 这种无法取到值 因为这个放在了第一个request作用域
mv.addObject("myname",name);
mv.addObject("myage",age);
// 这里是第二个request作用域。
mv.setViewName("redirect:/other.jsp");
// http://localhost:8080/ch08_forward_redirect/other.jsp?myname=lisi&myage=22
// 重定向不能访问/WEB-INF
// mv.setViewName("redirect:/WEB-INF/view/other.jsp");
return mv;
}
}
1.2 jsp页面other.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
show
other.jsp,显示request作用域中的数据
myname数据: ${myname}
myage数据: ${myage}
myname数据: ${param.myname}
myage数据: ${param.myage}
获取get请求中的参数:<%=request.getParameter("myname")%>


