本文介绍了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

sum+=numbers[i];

}

return sum;

}

}

注意:每个方法中,最多只允许存在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";

}

拦截器

基本概念

拦截器( interceptor )是springmvc中的一个 组件 ,是运行在 DispatcherServlet 之后,运行在 Controller 之前的

拦截器可以决定对某些符合条件的进行 拦截 或者 放行 ,所以,通常用于对一些具有相同运行条件的功能进行约束

使用拦截器

自定义拦截器类

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

public class DemoInterceptorimplements HandlerInterceptor{

/**

* 处理器执行之前调用

* @param request HttpServletRequest对象,可以获取请求参数等等

* @param response HttpServletResponse对象

* @param Handler 拦截器的Controller对象

* @return 如果返回false,就会中断处理流程,不会处理后续的拦截器和Controller。如果返回true,则会执行后续的拦截器和处理器

*/

public boolean preHandle(HttpServletRequest request,

HttpServletResponse response, Object handler) throws Exception {

System.out.println("DemoInterceptor的PreHandler执行");

return true;

}

/**

* 处理器执行之后调用,跳转到指定视图之前调用

* @param request HttpServletRequest对象

* @param response HttpServletResponse对象

* @param Handler 拦截器的Controller对象

* @param modelAndView ModelAndView对象,其中存放的是处理结果和视图的信息

*/

public void postHandle(HttpServletRequest request,

HttpServletResponse response, Object handler,

ModelAndView modelAndView) throws Exception {

/**

* 1. 可以自己设计逻辑,例如某些情况下返回false,返回true

* 2. 返回true表示执行后续的处理器和拦截器,返回false会中断处理流程

*/

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的配置文件中配置

配置拦截的路径: 可以使用通配符 * 比如: /** 匹配所有的路径, /user/* 只能匹配 /user 的子路径

配置不拦截的路径 : 可以配置 多个

配置拦截器类( bean ) :

配置

必须按照上面的顺序配置,否则将会报错

其中实现的方法

public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler)

该方法在 controller 处理请求之前执行

如果返回的 false ,则会中断处理流程,不会执行后续的拦截器和处理器,返回 true 会执行后续的拦截器和处理器

可以自行设计逻辑返回 false 或者 true

public void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView)

处理器执行之后,视图处理之前调用,此时可以通过对 ModelAndView 对数据和视图进行处理

当然需要 prehandler 方法返回 true 才会执行

public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)

所有的请求处理完毕之后调用,比如性能监控中,我们可以在此记录结束时间和消耗时间,还可以进行一些资源处理

当然需要 prehandler 方法返回 true 才会执行

演示登录检查

登录检查: 当涉及到用户信息的修改,查看什么的,必须要验证是否登录,因此需要设计拦截器验证登录

先设定登录数据,即: 在 login.jsp 中添加登录按钮,登录完成之后,需要自己定义一个标记存储在 session 中,比如 用户的id 或者 用户的对象

我们使用用户的 id 作为标记验证是否已经的登录,如果用户登录成功,会在 session 中添加一个 uid 的属性

用户退出登录使用 session.invalidate(); 清除 session ,并且重定向到 登录界面

自定义拦截器(LoginInterceptor)

具体流程在 prehandler 方法中写的很清楚

public class LoginInterceptorimplements HandlerInterceptor{

/*

* 在处理器执行之前调用(non-Javadoc)

* 1. 获取session

* 2. 读取session中的uid的值

* 如果为null,表示没有登录,那么直接重定向到登录界面,同时返回false,不需要执行后面的流程了

* 如果不为null,表示已经登录了,那么直接返回true,继续执行后面的拦截器或者处理器

*/

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 配置文件中配置的顺序执行,即是在 下配置的拦截器的顺序,如果对同一个路径进行了拦截器,那么先配置的先拦截

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

拦截器是springmvc中,仅仅当使用 springmvc 才可以使用拦截器,过滤器是 Java EE 体系中的,无论使用哪种框架都可以使用过滤器

拦截器在 DispatcherServlet 之后,在处理器之前执行,过滤器在 DispatcherServlet 之前执行

过滤器会在所有的 servlet 之前执行(所有的请求都会执行),而拦截器会在springmvc中 DispatcherServlet 之后执行,所以过滤器在项目中可以过滤任何请求(只要是配置了对应的路径),而拦截器只会在 DispatcherServlet 处理的请求的基础之上进行拦截

总结

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

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

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

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

springmvc java中转发_Springmvc中的转发重定向和拦截器的示例相关推荐

  1. springmvc学习笔记二:重定向,拦截器,参数绑定

    springmvc学习笔记二:重定向,拦截器,参数绑定 Controller方法返回值 返回ModelAndView controller方法中定义ModelAndView对象并返回,对象中可添加mo ...

  2. SpringMVC学习总结(三):转发重定向、拦截器、文件上传等

    转发和重定向 当Controller中方法的返回值为字符串时,默认为视图名称.当返回值字符串以"forward:"或者"redirect:"开头,则会被认为是转 ...

  3. SpringBoot中AOP实现落地——Filter(过滤器)、Intercepter(拦截器)、Aspect(Spring AOP)

    文章目录 一.一切要从Servlet说起 1.1什么是Servlet 1.2为什么需要Servlet 1.3Servlet如何响应用户请求 1.4Servlet与Tomcat处理请求的流程 1.5Se ...

  4. axios请求拦截器错误_React中使用高阶组件和axios的拦截器,统一处理请求失败提示...

    在前端开发中,判断边界条件和重要,通常我们要花费开发中的很大一部分时间做边界条件处理.发送ajax请求时,假设有这样一个需求: 每个页面发送ajax请求,如果请求失败,在页面上统一弹出样式一样的错误提 ...

  5. 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s

     1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2  spring-mv ...

  6. java参数action_Struts2之Action接收请求参数和拦截器详解

    技术分析之在Struts2框架中使用Servlet的API 1. 在Action类中也可以获取到Servlet一些常用的API 需求:提供JSP的表单页面的数据,在Action中使用Servlet的A ...

  7. java spring 配置词典_java之spring mvc之拦截器

    java之spring mvc之拦截器 1. springmvc 中的拦截器是由实现 HandlerInterceptor 或者继承 HandlerInterceptorAdapter 来实现的. 2 ...

  8. 【Java代码】使用 org.apache.ibatis.plugin.Interceptor 拦截器实现全局 mapper.xml 参数注入(可用于切换数据库实例schema+Demo举例源码)

    1. why   项目没有使用MyBatis,进行数据操作时使用的是jdbc中默认的schema,现在项目要加入多租户,同一个数据库下不同租户使用不同的实例schema,这就要在mapper文件内所有 ...

  9. java 登录过滤_Java 过滤器实现(登录) + 拦截器(两种方法)

    以下是实现未登录不能进入页面的实现 使用了thyemeleaf+SpringBoot+过滤器实现的,过滤器的核心代码如下: @Component @WebFilter(filterName= &quo ...

最新文章

  1. EL之AdaBoost:集成学习之AdaBoost算法的简介、应用、经典案例之详细攻略
  2. CodeForces - 628D Magic Numbers(数位dp)
  3. 前端第一天 HTML基础
  4. 数据结构【插入操作具体代码的实现】
  5. matpltlib.pyplot绘制饼图
  6. 实参可以是任意类型吗_传递任意数量的实参
  7. Android中怎么方便的调试关机充电
  8. 即席查询-Kylin
  9. win10主机远程登录树莓派
  10. 最新版黑苹果MacOS 10.14 Mojave安装教程
  11. 实验四——反汇编工具的使用
  12. linux 关闭虚拟内存,Linux关于虚拟内存
  13. 学习javaweb第四天
  14. PhotoshopCC 2018(19.1.3)绿色精简/增强无需注册安装直接用
  15. 全球顶级手游开发商向数据极客们发出赛事邀请,用数据分析玩家行为,赢取十万大奖!...
  16. 怎么做才可以把电脑上的照片给做成视频?-markdown编辑器
  17. 3D打印显神威:世界首颗3D打印卫星将入轨
  18. Rancher 中应用、服务、容器的概念
  19. 王迪手机软件测试,王迪的作品集 - 新片场
  20. 银联Pos终端签到、签退、批结算、批上送

热门文章

  1. numpy使用[]语法索引二维numpy数组中指定数据行的数值内容(accessing the specific row in numpy array)
  2. pandas为所有的列名添加后缀(add_suffix)
  3. 通过mrtrix3进行概率纤维追踪+核磁共振影像数据处理
  4. R主成分分析PCA示例
  5. 广义线性模型?链接函数?sigmoid和softmax?Logistic处理多分类问题?logistic回归处理超大数据?使用logistic和randomsearch进行组合获取最优参数组合、优缺点
  6. ssm过滤器可以只过滤html吗,SSM登陆验证之过滤器实现
  7. PacBio But Not Illumina Technology Can Achieve Fast, Accurate and Complete Closure of the High GC, C
  8. 基于社交媒体的政治情感分析的相关论文
  9. html 物理引擎,在物理引擎中画圆弧
  10. 安卓 java内存碎片_理解Android Java垃圾回收机制