Spring filter和拦截器的区别和执行顺序
发布网友
发布时间:2022-04-24 23:59
我来回答
共2个回答
热心网友
时间:2023-10-15 20:27
1.Filter过滤器只过滤jsp文件不过滤action请求解决方案
解决办法:在web.xml中将filter的配置放在struts2配置的前面。
2.*与Filter的区别
spring的*与Servlet的Filter有相似之处,比如二者都是AOP编程思想的体现,都能实现权限检查、日志记录等。不同的是:
使用范围不同:Filter是Servlet规范规定的,只能用于Web程序中。而*既可以用于Web程序,也可以用于Application、Swing程序中。
规范不同:Filter是在Servlet规范中定义的,是Servlet容器支持的。而*是在Spring容器内的,是Spring框架支持的。
使用的资源不同:同其他的代码块一样,*也是一个Spring的组件,归Spring管理,配置在Spring文件中,因此能使用Spring里的任何资源、对象,例如Service对象、数据源、事务管理等,通过IoC注入到*即可;而Filter则不能。
深度不同:Filter在只在Servlet前后起作用。而*能够深入到方法前后、异常抛出前后等,因此*的使用具有更大的弹性。所以在Spring构架的程序中,要优先使用*。
实际上Filter和Servlet极其相似,区别只是Filter不能直接对用户生成响应。实际上Filter里doFilter()方法里的代码就是从多个Servlet的service()方法里抽取的通用代码,通过使用Filter可以实现更好的复用。
filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。
JSR中说明的是,按照多个匹配的Filter,是按照其在web.xml中配置的顺序来执行的。
所以这也就是,把自己的Filter或者其他的Filter(比如UrlRewrite的Filter)放在Struts的DispatcherFilter的前面的原因。因为,它们需要在请求被Struts2框架处理之前,做一些前置的工作。
当Filter被调用,并且进入了Struts2的DispatcherFilter中后,Struts2会按照在Action中配置的InterceptorStack中的Interceptor的顺序,来调用Interceptor。
3.servlet、filter、interceptor的执行顺序
@Override
public void doFilter(ServletRequest servletrequest,
ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException {
System.out.println("in filter 1.");
filterchain.doFilter(servletrequest, servletresponse);
System.out.println("outing filter 1");
}
interceptor代码:
public String intercept(ActionInvocation actioninvocation) throws Exception {
System.out.println("in logininterceptor");
String result=actioninvocation.invoke();
System.out.println("outing logininterceptor");
return result;
}
action代码:
@Override
public String execute() throws Exception {
System.out.println("in loginaciton");
ActionContext context=ActionContext.getContext();
Map<String, Object> session=context.getSession();
session.put("userName", userName);
/* HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
session.putValue("userName", userName);*/
System.out.println("outing loginaciton");
return SUCCESS;
}
jsp代码:
<script type="text/javascript">
function submitForm(){
document.getElementById("form1").submit();
}
</script>
</head>
<body>
This is Login page. <br>
<form action="<%=path %>/login2.action" method="post" id="form1" name="form1">
UserName:<input type="text" id="userName" name="userName"/><input type="button" value="submit" onclick="submitForm()" id="submit1" />
</form>
</body>
struts.xml
<struts>
<package name="default" extends="struts-default" namespace="/">
<interceptors>
<interceptor name="MyInterceptor" class="Login.LoginInterceptor"></interceptor>
<interceptor-stack name="myInterceptorStack">
<interceptor-ref name="MyInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<action name="login2" class="Login.LoginAction">
<result name="success">
/Login/success.jsp
</result>
<interceptor-ref name="myInterceptorStack"></interceptor-ref>
</action>
</package>
</struts>
console:
in filter 1.
in logininterceptor
in loginaciton
outing loginaciton
outing logininterceptor
outing filter 1
3.servlet、filter的执行顺序
servlet代码:
public void init() throws ServletException {
System.out.println("servlet初始化");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("in servlet");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println("<br>");
String x = request.getParameter("x");
String y = request.getParameter("y");
out.println("x="+x);
out.println("<br>");
out.println("y="+y);
out.println("<br>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
System.out.println("outing servlet");
}
public void destroy(){
System.out.println("servlet销毁");
super.destroy();
}
console:
servlet初始化
in filter 1.
in servlet
before HttpServletRequest
after HttpServletRequest
outing servlet
outing filter 1
当tomcat容器停止的时候,输出:servlet销毁
热心网友
时间:2023-10-15 20:27
在web.xml中将filter的配置放在struts2配置的前面。
Spring filter和拦截器的区别和执行顺序
使用范围不同:Filter是Servlet规范规定的,只能用于Web程序中。而拦截器既可以用于Web程序,也可以用于Application、Swing程序中。规范不同:Filter是在Servlet规范中定义的,是Servlet容器支持的。而拦截器是在Spring容器内的,是Spring框架支持的。使用的资源不同:同其他的代码块一样,拦截器也是一个Spring的...
静态ip - StormProxies
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,IP纯净高匿;2、覆盖全球200+的国家与地区,超7000万住宅IP。3、高可靠性,24小时稳定运行,平均99.99%的可用率;4、性价比更高,便宜好用,单个IP也能享受最优价格,没有额外费用;5、易于使用,支持HTTP/HTTPS/SOCKS5协议,提供多种API参数,网络集成更快捷;6、客服全天在线为您排忧解难,并可根据您的业务需求制定更合适的代理…StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,IP纯净高匿;2、覆盖全球20...
Spring filter和拦截器的区别和执行顺序
3.规范不同:Filter是在Servlet规范中定义的,是Servlet容器支持的。而拦截器是在Spring容器内的,是Spring框架支持的。4.深度不同:Filter在只在Servlet前后起作用。而拦截器能够深入到方法前后、异常抛出前后等,因此拦截器的使用具有更大的弹性。所以在Spring构架的程序中,要优先使用拦截器。顺序就是Spring...
Spring filter和拦截器的区别和执行顺序
总结:两者的本质区别:拦截器是基于Java的反射机制的,而过滤器是基于函数回调。从灵活性上说拦截器功能更强大些,Filter能做的事情,都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话...
Spring filter和拦截器的区别和执行顺序
使用范围不同:Filter是Servlet规范规定的,只能用于Web程序中。而拦截器既可以用于Web程序,也可以用于Application、Swing程序中。规范不同:Filter是在Servlet规范中定义的,是Servlet容器支持的。而拦截器是在Spring容器内的,是Spring框架支持的。使用的资源不同:同其他的代码块一样,拦截器也是一个Spring的...
Spring filter和拦截器的区别和执行顺序
两者的本质区别:拦截器是基于Java的反射机制的,而过滤器是基于函数回调。从灵活性上说拦截器功能更强大些,Filter能做的事情,他都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话,...
Spring filter和拦截器的区别和执行顺序
Spring filter和拦截器的区别和执行顺序 看配置文件,如果在web.xml中有filter,查看filter相关的类有没有有关登陆的,有的话就是filter,没有的话就是拦截器。
谈谈Spring 的过滤器和拦截器
过滤器与拦截器的区别主要在于作用范围和执行顺序。过滤器更侧重于通用处理,而拦截器则更灵活,通常与业务逻辑紧密相关。在Spring框架中,过滤器和拦截器都可以配置多个,执行顺序由配置决定。总结而言,过滤器和拦截器在Web应用开发中各有优势,选择使用取决于具体需求。过滤器用于处理HTTP请求和响应的通用情况...
拦截器(Interceptor)和过滤器(Filter)的执行顺序和区别
一、引言 探讨拦截器(Interceptor)与过滤器(Filter)的执行顺序及区别,以解决用户登陆与权限管理、菜单管理问题。本文将先关注过滤器的使用,而后深入拦截器的特性,并简述各自应用场景。二、区别 过滤器(Filter)过滤器通常用于web.xml配置中,主要目的为解决字符编码问题,防止乱码。它在所有请求前执行...
Spring filter和拦截器的区别和执行顺序
Filter的执行顺序跟你配置的执行顺序是一样的,执行的话要触发到才会执行啊当然要是过滤/*就跟配置顺序一样了
Spring filter和拦截器的区别和执行顺序
通过使用Filter可以实现更好的复用。filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。JSR中说明的是,按照多个匹配的Filter,是按照其在web.xml中配置的顺序来执行的。