当前位置:首页 » 净水方式 » struts定义过滤器

struts定义过滤器

发布时间: 2021-01-30 21:23:13

『壹』 struts2过滤器干什么用的

拦截器的工作原理:
当接收到一个httprequest
,
a)当外部的httpservletrequest到来时
b)初始到了servlet容器
传递给一个标准内的过滤器链
c)FilterDispatecher会去查找容相应的ActionMapper,如果找到了相应的ActionMapper它将会将控制权限交给Actio

『贰』 struts 拦截器和过滤器的区别和原理

拦截器和过滤器的区别:
1、拦截器是基于java的反射机制的,而过滤器是基于函数回调专
2、过滤器依赖与属servlet容器,而拦截器不依赖与servlet容器
3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能
5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
拦截器
:是在面向切面编程的就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。

『叁』 struts过滤器和拦截器的区别

其实Struts2拦截器 和 Servlet的过滤器的思想和作用方式都很像,但有如下区别:回

1、拦截器是答基于java反射机制的,而过滤器是基于函数回调的。
2、过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。
3、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
4、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
5、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。

『肆』 ssh使用tiles框架,怎么使用struts2自定义的过滤器,例如过滤未登陆的用户希望有个具体的例子!!

struts2可以通过配置interceptor来实现过滤未登录用户,在struts.xml文件中进行配置即可。
<package name="efe-default" extends="struts-default">
<interceptors>
<!-- 校验用户是否登录用拦截器 -->
<interceptor name="checkLoginInterceptort" class="com.cn.inteceptor.CheckLoginInterceptor"/>
<!-- 定义拦截器栈 -->
<interceptor-stack name="MyDefaultStack">
<interceptor-ref name="checkLoginInterceptort">
<param name="actionNames">testLogin</param>
<param name="loginPath">outSys</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="MyDefaultStack"></default-interceptor-ref>
</package>

public class CheckLoginInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1652269041938963442L;
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation ai) throws Exception {
Object action = ai.getAction();
//获取当前操作系统文件路径分隔符
String separator = System.getProperty("file.separator");

HttpServletRequest request = ServletActionContext.getRequest();
String requestUrl = request.getRequestURI();
int tempInt = CommonTools.getSitesInString(requestUrl, "/").get(1);
requestUrl = requestUrl.substring(tempInt);

Map session = ai.getInvocationContext().getSession();
String login = (String) session.get("USERID");

if(!CommonTools.isNullString(login) || !CommonTools.isNullString(examLogin) || singup != null
|| student != null || agency != null){

return ai.invoke();
}else{
//获得服务器绝对路径
String rootUrl = ServletActionContext.getServletContext().getRealPath("/");
//读取src\myXML文件夹下的Permissions.xml文件
DataDictionaryXmlParseUtil myPermissions = DataDictionaryXmlParseUtil.getInstance(rootUrl+"WEB-INF"+separator+"classes"+separator+"myXML"+separator+CommonConstants.PERMISSION_XML);
//得到允许不通过拦截器的url地址列表
List<String> permissionList = myPermissions.getDataMap().get(CommonConstants.REQUEST_RUL_KEY);

//比较是否有列表中的数据
for (String permissUrl:permissionList){
if (requestUrl!=null && requestUrl.equalsIgnoreCase(permissUrl)){
return ai.invoke();
}
}
return "no.access";
}
}

『伍』 如何配置struts2的过滤器

你说的是拦截器吧
第一步:创建一个类实现Intercepter接口并实现其中方法
第二步:注册拦截器(在struts.xml)如:
<package name="cust"
="/cust"
extends="struts-default">
<interceptors>
<!-- 注册拦截器 -->
<interceptor name="first"
class="com.interceptor.FirstInterceptor"/>
<interceptor name="second"
class="com.interceptor.SecondInterceptor"/>
<!-- 注册拦截器栈,将所有拦截器打包在一起 -->
<interceptor-stack name="mystack">
<interceptor-ref name="first"/>
<interceptor-ref name="second"/>
<!-- 引用自定义的拦截器时,会使struts2自带的拦截器失效
因此,要将默认的拦截器加入到自定义的拦截器栈中 -->
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<!--第三步: 引用拦截器 ,

<action name="toUpdateCustomer"
class="com.action.ToUpdateCustomerAction"
method="execute">
<!-- 引用拦截器 ,
<interceptor-ref name="first"/>
<interceptor-ref name="first"/>-->
<!-- 引用拦截器栈,会一次将所有的拦截器引用 -->
<interceptor-ref name="mystack"/>
<result name="success">
/WEB-INF/cust/update_customer.jsp
</result>
</action>
</package>
供参考

『陆』 struts2 过滤器的意思

你得报错信息是什么啊。你导入struts2的包了么

『柒』 struts2配置自定义过滤器,检查用户是否登录,没登录就不许进入某些页面

struts2写拦截器吧?过滤器貌似servlet里边用.
public class LoginInterceptor extends AbstractInterceptor{

private static final long serialVersionUID = 1L;

@Override
public String intercept(ActionInvocation invocation) throws Exception {
Map<String, Object> session=ActionContext.getContext().getSession();
User user=(User) session.get("user");
//如果确认订单时没有登录专返回登录页否则继续执行属
if (user==null) {
return "relogin";
}else{
invocation.invoke();
return "";
}
}

}

『捌』 struts拦截器和过滤器的区别

其实Struts2拦截器 和复 Servlet的过滤器的思想和作用制方式都很像,但有如下区别: 1、拦截器是基于java反射机制的,而过滤器是基于函数回调的。 2、过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。 3、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。 4、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。 5、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。

『玖』 Struts2入口过滤器配置

本人试验了一下配置成*.action index.jsp是可行的,不过一般情况下是配置成/*的 然后结合版struts.properties文件里面的struts.action.extension(定义扩展名,例如权.do,.action等等,多个扩展名中间用逗号隔开)值使用,楼主你最好检查下你的服务器启动日志 看看项目是否正常启动。

『拾』 struts2拦截器和过滤器的区别

拦截器和过滤器的区别:

1、拦截器是基于java的反射机制的,而过滤器是基于函数回调

2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器

3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用

4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能

5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

拦截器 :是在面向切面编程的就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。

下面通过实例来看一下过滤器和拦截器的区别:

使用拦截器进行/admin 目录下jsp页面的过滤

[html]view plain

  • <packagename="newsDemo"extends="struts-default"

  • namespace="/admin">

  • <interceptors>

  • <interceptorname="auth"class="com.test.news.util.AccessInterceptor"/>

  • <interceptor-stackname="authStack">

  • <interceptor-refname="auth"/>

  • </interceptor-stack>

  • </interceptors>

  • <!--action-->

  • <actionname="newsAdminView!*"class="newsAction"

  • method="{1}">

  • <interceptor-refname="defaultStack"/>

  • <interceptor-refname="authStack">

  • </interceptor-ref>

  • 下面是我实现的Interceptor class:

    [java]view plain

  • packagecom.test.news.util;

  • importjava.util.Map;

  • importcom.opensymphony.xwork2.ActionContext;

  • importcom.opensymphony.xwork2.ActionInvocation;

  • importcom.opensymphony.xwork2.interceptor.AbstractInterceptor;

  • importcom.test.news.action.AdminLoginAction;

  • /**

  • *@authorchaoyin

  • */

  • {

  • =-4291195782860785705L;

  • @Override

  • publicStringintercept()throwsException{

  • ActionContextactionContext=actionInvocation.getInvocationContext();

  • Mapsession=actionContext.getSession();

  • //exceptloginaction

  • Objectaction=actionInvocation.getAction();

  • if(){

  • returnactionInvocation.invoke();

  • }

  • //checksession

  • if(session.get("user")==null){

  • return"logout";

  • }

  • returnactionInvocation.invoke();//goon

  • }

  • }

  • 过滤器:是在javaweb中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符.

    使用过滤器进行/admin 目录下jsp页面的过滤,首先在web.xml进行过滤器配置:

    [html]view plain

  • <filter>

  • <filter-name>accessfilter</filter-name>

  • <filter-class>

  • com.test.news.util.AccessFilter

  • </filter-class>

  • </filter>

  • <filter-mapping>

  • <filter-name>accessfilter</filter-name>

  • <url-pattern>/admin/*</url-pattern>

  • </filter-mapping>

  • 下面是过滤的实现类:

    [java]view plain

  • packagecom.test.news.util;

  • importjava.io.IOException;

  • importjavax.servlet.Filter;

  • importjavax.servlet.FilterChain;

  • importjavax.servlet.FilterConfig;

  • importjavax.servlet.ServletException;

  • importjavax.servlet.ServletRequest;

  • importjavax.servlet.ServletResponse;

  • importjavax.servlet.http.HttpServletRequest;

  • importjavax.servlet.http.HttpServletResponse;

  • importjavax.servlet.http.HttpSession;

  • {

  • /**

  • *@authorchaoyin

  • */

  • publicvoiddestroy(){

  • }

  • publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,

  • FilterChainfilterChain)throwsIOException,ServletException{

  • HttpServletRequestrequest=(HttpServletRequest)arg0;

  • HttpServletResponseresponse=(HttpServletResponse)arg1;

  • HttpSessionsession=request.getSession();

  • if(session.getAttribute("user")==null&&request.getRequestURI().indexOf("login.jsp")==-1){

  • response.sendRedirect("login.jsp");

  • return;

  • }

  • filterChain.doFilter(arg0,arg1);

  • }

  • publicvoidinit(FilterConfigarg0)throwsServletException{

  • }

  • }

热点内容
丁度巴拉斯情人电影推荐 发布:2024-08-19 09:13:07 浏览:886
类似深水的露点电影 发布:2024-08-19 09:10:12 浏览:80
《消失的眼角膜》2电影 发布:2024-08-19 08:34:43 浏览:878
私人影院什么电影好看 发布:2024-08-19 08:33:32 浏览:593
干 B 发布:2024-08-19 08:30:21 浏览:910
夜晚看片网站 发布:2024-08-19 08:20:59 浏览:440
台湾男同电影《越界》 发布:2024-08-19 08:04:35 浏览:290
看电影选座位追女孩 发布:2024-08-19 07:54:42 浏览:975
日本a级爱情 发布:2024-08-19 07:30:38 浏览:832
生活中的玛丽类似电影 发布:2024-08-19 07:26:46 浏览:239