栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Springmvc中的转发重定向和拦截器的示例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Springmvc中的转发重定向和拦截器的示例

本文介绍了Springmvc中的转发重定向和拦截器的示例,分享给大家,具体如下:

可变参数在设计方法时,使用 数据类型... 来声明参数类型,例如: public static void function(int... numbers)

在实现方法体时,可变参数是作为数组来处理

public class Test{
 
 public static void main(String[] args){
 System.out.println(Test.sum(1,2,3));
 System.out.println(Test.sum(1,2,3,4,54));
 }

 public static int sum(int... numbers){
 int sum=0;
 
 for(int i=0;i

注意:每个方法中,最多只允许存在1个可变参数,并且,如果存在 可变参数 ,那么必须是最后一个参数

转发和重定向

在控制器内部处理请求的方法中,默认返回字符串时的处理方式是 转发 ,转发的值是 view 组件的名称,比如 return "login" ,实质上会根据视图解析器( ViewResolver )得到最终负责显示的页面,而通过 return redirect:路径 这样的语法表示重定向,在 redirect: 右侧的内容是路径,这个路径通常使用相对的路径,是以当前客户端的地址栏中的路径为标准进行参考,例如当前的地址为: http://localhost:8080/Project/user/reg.do ,然后 return "redirect:login.do" ,则会重定向到 http://localhost:8080/Project/user/login.do ,如果 return "redirect:/main/index.do" 或者 return "redirect:../main/index.do" ,则会重定向到 http://localhost:8080/Project/main/index.do

forward:

默认的方式,但是也是可以使用 return "forward:login"
返回的一定是一个 view ,经过视图解析器之后会转发到指定的视图

redirect:

重定向 : return "redirect:login.do"
返回的是一个Controller方法的路径,而不是一个view,这个不会经过视图解析器,而是直接跳转

实例

@RequestMapping(value="/handle_reg.do", method=RequestMethod.POST)
 public String handleReg(User user,ModelMap map){
 try {
  userService.reg(user);
  System.out.println("注册成功!");
  return "redirect:login.do"; //重定向到login.do这个控制方法,login.do对应的就是转发到login.jsp
 } catch (UsernameConflictException e) {
  System.out.println(e.getMessage());
  map.put("errorMessage", e.getMessage());
  return "error";
 }
 }
 
 @RequestMapping(value="login.do")
 public String handleLogin(){
 return "login";
 }

拦截器

基本概念

  1. 拦截器( interceptor )是springmvc中的一个 组件 ,是运行在 DispatcherServlet 之后,运行在 Controller 之前的
  2. 拦截器可以决定对某些符合条件的进行 拦截 或者 放行 ,所以,通常用于对一些具有相同运行条件的功能进行约束

使用拦截器

自定义拦截器类

创建一个拦截类( DemoInterceptor ),实现 HandlerInterceptor 接口

public class DemoInterceptorimplements HandlerInterceptor{

 
 public boolean preHandle(HttpServletRequest request,
  HttpServletResponse response, Object handler) throws Exception {
 
 System.out.println("DemoInterceptor的PreHandler执行");
 return true;
 }

 
 public void postHandle(HttpServletRequest request,
  HttpServletResponse response, Object handler,
  ModelAndView modelAndView) throws Exception {
 
 System.out.println("handler:"+handler);
 System.out.println("DemoInterceptor的PostHandler执行");
 //设置视图的名称,那么执行完成之后就会条跳转到index.jsp页面
 //modelAndView.setViewName("index");
 }
 
 
 public void afterCompletion(HttpServletRequest request,
  HttpServletResponse response, Object handler, Exception ex)
  throws Exception {
 System.out.println("DemoInterceptor的afterCompletion执行");

 }
}

在springmvc的配置文件中配置

  1. 配置拦截的路径: 可以使用通配符 * 比如: public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session=request.getSession(); //获取session Object uid=session.getAttribute("uid"); //读取session中的对象 //如果uid存在,那么即可登录完成 if (uid!=null) { return true; //返回true,登录成功就需要执行后续的流程 } response.sendRedirect(request.getContextPath()+"/user/login.do"); //重定向到登录界面 return false; //返回false,后面的流程也不用执行了,直接中断 } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }

springmvc中配置拦截器

由于这里只是跳转到用户中心需要验证登录,那么只是匹配了 user_center.do

  
 
 
  
  
 
 

多个拦截器的执行顺序

根据在 springmvc 配置文件中配置的顺序执行,即是在 下配置的拦截器的顺序,如果对同一个路径进行了拦截器,那么先配置的先拦截

拦截器和过滤器的区别(主要的区别)

  1. 拦截器是springmvc中,仅仅当使用 springmvc 才可以使用拦截器,过滤器是 Java EE 体系中的,无论使用哪种框架都可以使用过滤器
  2. 拦截器在 DispatcherServlet 之后,在处理器之前执行,过滤器在 DispatcherServlet 之前执行
  3. 过滤器会在所有的 servlet 之前执行(所有的请求都会执行),而拦截器会在springmvc中 DispatcherServlet 之后执行,所以过滤器在项目中可以过滤任何请求(只要是配置了对应的路径),而拦截器只会在 DispatcherServlet 处理的请求的基础之上进行拦截

总结

当多种请求都需要做相同或者极为相似的任务时,可以使用拦截器

开发好拦截器,那么需要在 springmvc 的配置文件中配置

可以有如果若干个 ,即是配置若干个拦截器,配置的多个拦截器将会形成 拦截器链 ,如果配置多个拦截器对同一个路径都会拦截,那么会按照配置的节点顺序执行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/140975.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号