struts2拦截器
- 格式:pdf
- 大小:181.35 KB
- 文档页数:28
1.以下属于struts2的控制器组件是()。
A.ActionB.ActionFormC.ActionServletD.dispatchAction2.以下属于struts2的体系结构的是()。
A.struts2控制器组件B.struts2配置文件C.FilterDispathcerD.Action3.以下属于struts2配置文件中的配置元素是()。
A.<package>B.<action>C.<form-beans>D.<action-mappings>4.关于struts1和struts2对比的说法正确的是()。
A.Struts1要求Action类继承Struts1框架中的Action父类,Struts2中则不一定需要继承,可以是POJO类B.struts1中的Action不是线程安全的,而struts2中的Action是线程安全的C.struts1和struts2中都使用ActionForm对象封装用户的请求数据D.struts1使用OGNL表达式语言来支持页面效果,struts2通过ValueStack技术使标签库访问值5.以下关于ValueStack说法正确的是()。
A.每个Action对象实例拥有一个ValueStack对象B.每个Action对象实例拥有多个ValueStack对象C.Action中封装了需要传入下一个页面的值,这些值封装在ValueStack对象中D.ValueStack会在请求开始时被创建,请求结束时消亡6.关于struts2配置文件说法正确的是()。
A.必须在WEB-INF/classes目录下B.名字必须为struts.xmlC.配置Action时,必须配置包信息D.使用<forward>元素配置转发7.在struts2配置中用()元素来配置常量。
B.<constants>C.<constant>D.<constant-mapping>8.关于struts2包的说法正确的是()。
struts2拦截器--将用户操作日志存入数据库第一篇:struts2拦截器--将用户操作日志存入数据库struts2拦截器--将用户操作日志存入数据库1.建表,如下所示:2.新建OperationLogModel.java,其具有上述属性。
3.自动生成PO4.在struts.xml中配置拦截器:5.如下例子中的用户登录和修改密码,要在相应xml文件中加入,即:indexchangePasswordPre6.在项目中新建文件夹log,在其下新建类LogInterceptor .java,如下:package com.bfw.crms.log; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import ng.StringUtils; import org.apache.log4j.Logger; import org.apache.struts2.ServletActionContext; import com.bfw.crms.action.BulletinAction; import com.bfw.crms.action.SystemAction; import com.bfw.crms.model.EmployeeModel; import com.bfw.crms.model.OperationLogModel; import com.bfw.crms.po.OperationLog; import com.bfw.crms.util.BeanUtil; import com.bfw.crms.util.DateTimeUtil; import com.ninetowns.framework.dao.ObjectDao; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor;@SuppressWarnings("serial")public class LogInterceptor extends AbstractInterceptor{ private String logName;private String logContent;protected Logger log = Logger.getLogger(getClass()); protected HttpSession getSession(){return getRequest().getSession();}protected HttpServletRequest getRequest(){return ServletActionContext.getRequest();}public void init() {}private ObjectDao objectDao = null;public ObjectDao getObjectDao(){return objectDao;}public void setObjectDao(ObjectDao objectDao){this.objectDao = objectDao;}@Overridepublic String intercept(ActionInvocation ai) throws Exception {Object action= ai.getAction();String method= ai.getProxy().getMethod();try{if(StringUtils.isBlank(method)) method = "method";EmployeeModel sysUser (EmployeeModel)this.getSession().getAttribute("employee");String userName = "";if(sysUser!=null) userName = sysUser.getName();=String currentTime = DateTimeUtil.getDateTime();String logContentHead = "用户"+userName+currentTime;ai.invoke();//执行被拦截actionif (action instanceof BulletinAction) {if(method.equals("save")){logName = "保存部门";logContent = logContentHead+"保存部门:"+ai.getStack().findValue("Name");(logContent);addSysLog(logName,logContent);}if(method.equals("delete")){logName = "删除部门";logContent = logContentHead +""+((String[])(ai.getStack().findValue("flag_id"))).length+"条部门信息";(logContent);addSysLog(logName,logContent);}}if (actioninstanceof SystemAction) {if(method.equals("login")){logName = "登录系统";logContent = logContentHead;(logContent);addSysLog(logName,logContent);}if(method.equals("changePassword")){logName = "修改密码";logContent = logContentHead +"删除1条单位信息";(logContent);addSysLog(logName,logContent);}}}catch(Exception e){e.printStackTrace();}return Action.SUCCESS;}/*** 插入系统日志 model2po()* @param logName* @param logContent*/删除private void addSysLog(String logName,String logContent){ OperationLogModel operationModel = new OperationLogModel();OperationLog operationPO = new OperationLog();operationModel.setOperation(logContent);BeanUtil.model2po(operationModel, operationPO);this.getObjectDao().saveObject(operationPO);}} OK第二篇:Struts2中的拦截器与过滤器学习拦截器是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法,比如动态代理就是拦截器的简单实现,过滤器是在java web中,你传入的request,response 提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do 的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者struts的action前统一设置字符集,或者去除掉一些非法字符。
paginationinnerinterceptor使用分页是在网站开发中非常常见的功能之一,可以帮助用户更方便地查看和导航大量的数据。
为了实现分页功能,我们通常会使用一些第三方的库或者插件,来简化开发过程。
而在Java开发中,Struts2框架提供了一个名为paginationinnerinterceptor的拦截器,可以很方便地实现分页功能。
paginationinnerinterceptor是Struts2框架中的一个拦截器,它的作用是拦截Action请求,并对分页参数进行处理。
使用paginationinnerinterceptor可以将分页参数直接映射到Action的属性上,从而实现分页功能。
下面我们来看一下如何使用paginationinnerinterceptor来实现分页功能。
首先,我们需要在Struts2的配置文件struts.xml中配置paginationinnerinterceptor。
我们可以定义一个全局的拦截器栈,在拦截器栈中添加paginationinnerinterceptor拦截器。
具体的配置如下所示:```xml<package name="default" namespace="/" extends="struts-default"><interceptors><interceptor-stack name="paginationStack"><interceptor-ref name="defaultStack" /><interceptor-ref name="paginationinnerinterceptor" /></interceptor-stack></interceptors><default-interceptor-ref name="paginationStack" />...</package>```接下来,我们需要在Action中定义用于接收分页参数的属性。
Java三⼤器之拦截器(Interceptor)的实现原理及代码⽰例1,拦截器的概念java⾥的拦截器是动态拦截Action调⽤的对象,它提供了⼀种机制可以使开发者在⼀个Action执⾏的前后执⾏⼀段代码,也可以在⼀个Action执⾏前阻⽌其执⾏,同时也提供了⼀种可以提取Action中可重⽤部分代码的⽅式。
在AOP中,拦截器⽤于在某个⽅法或者字段被访问之前,进⾏拦截然后再之前或者之后加⼊某些操作。
⽬前,我们需要掌握的主要是Spring的拦截器,Struts2的拦截器不⽤深究,知道即可。
2,拦截器的原理⼤部分时候,拦截器⽅法都是通过代理的⽅式来调⽤的。
Struts2的拦截器实现相对简单。
当请求到达Struts2的ServletDispatcher时,Struts2会查找配置⽂件,并根据配置实例化相对的拦截器对象,然后串成⼀个列表(List),最后⼀个⼀个的调⽤列表中的拦截器。
Struts2的拦截器是可插拔的,拦截器是AOP的⼀个实现。
Struts2拦截器栈就是将拦截器按⼀定的顺序连接成⼀条链。
在访问被拦截的⽅法或者字段时,Struts2拦截器链中的拦截器就会按照之前定义的顺序进⾏调⽤。
3,⾃定义拦截器的步骤第⼀步:⾃定义⼀个实现了Interceptor接⼝的类,或者继承抽象类AbstractInterceptor。
第⼆步:在配置⽂件中注册定义的拦截器。
第三步:在需要使⽤Action中引⽤上述定义的拦截器,为了⽅便也可以将拦截器定义为默认的拦截器,这样在不加特殊说明的情况下,所有的Action都被这个拦截器拦截。
4,过滤器与拦截器的区别过滤器可以简单的理解为“取你所想取”,过滤器关注的是web请求;拦截器可以简单的理解为“拒你所想拒”,拦截器关注的是⽅法调⽤,⽐如拦截敏感词汇。
4.1,拦截器是基于java反射机制来实现的,⽽过滤器是基于函数回调来实现的。
(有⼈说,拦截器是基于动态代理来实现的)4.2,拦截器不依赖servlet容器,过滤器依赖于servlet容器。
struts2框架特征Struts2框架特征Struts2是一种流行的Java Web应用程序开发框架,其特征使其成为许多开发者的首选。
本文将介绍Struts2框架的特征,包括MVC 架构、强大的标签库、拦截器、数据验证、国际化支持以及灵活的配置等。
一、MVC架构Struts2采用了MVC(Model-View-Controller)架构,将应用程序的业务逻辑、数据模型和用户界面分离。
这种架构使开发者能够更好地组织代码、提高代码的可维护性,并能够更容易地进行代码重用和测试。
在Struts2中,Model代表数据模型,可以是POJO(Plain Old Java Object)或者是与数据库交互的实体类;View代表用户界面,通常是JSP页面;Controller则负责处理用户请求、调用业务逻辑,并将处理结果返回给用户。
二、强大的标签库Struts2提供了丰富的标签库,使开发者能够更轻松地构建用户界面。
这些标签库包括表单标签、数据展示标签、控制流标签等,可以大大简化页面开发的工作量。
例如,开发者可以使用Struts2的表单标签库来生成表单,并自动处理表单的数据绑定、验证和错误提示。
这样,开发者无需手动编写大量的HTML和JavaScript代码,能够更快速地完成表单开发。
三、拦截器Struts2的拦截器是其核心特性之一,可用于在请求到达Controller之前和之后执行一些通用的处理逻辑,如日志记录、权限验证、异常处理等。
开发者可以通过配置拦截器栈,将多个拦截器按照特定的顺序组合起来,实现复杂的请求处理流程。
拦截器的使用使得开发者能够将通用的处理逻辑从业务逻辑中分离出来,提高了代码的可维护性和重用性。
同时,Struts2还提供了许多内置的拦截器,如参数封装拦截器、文件上传拦截器等,方便开发者处理不同类型的请求。
四、数据验证在Web应用程序中,数据验证是一项重要的任务。
Struts2提供了强大的数据验证机制,开发者可以通过简单的配置实现对表单数据的验证。
struts2常见面试题Introduction:Struts2是一种用于开发Java Web应用程序的开源Web应用框架。
在软件工程领域,Struts2常常是面试中的热门话题。
本文将介绍一些常见的Struts2面试题,并提供详细解答和示例。
Question 1: 什么是Struts2框架?它的主要特点是什么?Struts2是一个基于MVC设计模式的Web应用框架。
它通过集成多个核心组件(如拦截器、过滤器、表单验证等)提供了一套丰富的功能,用于简化开发和管理Java Web应用程序。
Struts2的主要特点包括:1. 松耦合:Struts2使用基于配置的方式来管理组件之间的依赖关系,降低了模块之间的耦合。
2. 灵活性:开发人员可以根据自己的需求进行扩展和定制,以适应不同的项目需求。
3. 可测试性:Struts2的组件松耦合特点使得单元测试变得容易,并且可以方便地模拟用户请求进行测试。
Question 2: Struts2的核心组件有哪些?Struts2的核心组件包括:1. Action:处理用户请求的核心组件,负责接收请求并执行相应的业务逻辑。
2. Interceptor:用于对请求进行预处理和后处理的拦截器组件。
3. Result:负责生成响应结果,可以是页面视图或其他格式的数据(如JSON、XML等)。
4. FilterDispatcher:负责将请求分发给合适的Action处理。
5. ValueStack:用于存储Action处理的结果数据,支持OGNL表达式以便于数据的访问和操作。
Question 3: 如何定义一个Struts2的Action?在Struts2中,可以通过以下几种方式来定义一个Action:1. 实现Action接口:通过实现Action接口,并提供相应的业务方法来处理请求。
2. 继承ActionSupport类:ActionSupport是一个提供了一些方便方法的抽象类,可以直接继承并实现自己的业务逻辑。
struts2 error处理Struts2错误处理可以通过以下几种方式进行处理:1. 全局异常处理器(Global Exception Handler):可以通过实现`com.opensymphony.xwork2.Action`接口,并定义`execute()`方法来处理所有的异常。
在struts.xml配置文件中添加如下内容:```xml<global-exception-mappings><exception-mapping exception="ng.Exception"result="error" /></global-exception-mappings>```2. Action级别的异常处理器:每个Action类可以通过实现`com.opensymphony.xwork2.Action`接口,并定义`execute()`方法来处理特定的异常。
在struts.xml配置文件中,为每个使用自定义处理器的Action配置异常处理器:```xml<action name="example" class="com.example.ExampleAction"> <exception-mapping exception="ng.Exception"result="error" /><result name="error">/error.jsp</result><result>/example.jsp</result></action>```3. 拦截器异常处理器:Struts2中的拦截器可以捕获并处理Action方法中的异常。
可以通过自定义拦截器来实现异常处理,然后在struts.xml配置文件中使用:```xml<action name="example" class="com.example.ExampleAction"><interceptor-ref name="exceptionInterceptor" /><result>/example.jsp</result></action>```以上是Struts2错误处理的几种典型方法,可以根据具体需求选择适合的方式进行处理。
struts2面试题Struts2是一个基于Java开发的Web应用程序框架,被广泛应用于企业级Java应用开发中。
在面试中,面试官可能会提出一些关于Struts2的问题,以评估应聘者的技术水平。
下面是一些常见的Struts2面试题及其详细答案,希望对你在面试中有所帮助。
1. 什么是Struts2?Struts2是一个轻量级的、基于MVC模式的Web应用程序框架。
它采用Java Servlet API和JavaServer Pages (JSP)技术,并提供了一种简单易用的方式来开发可维护和可扩展的Web应用程序。
2. Struts2的主要特性是什么?Struts2的主要特性包括:- MVC架构:将应用程序分为模型、视图和控制器,使开发更容易管理和扩展。
- 拦截器:通过拦截器可以在请求处理的各个阶段添加自定义的逻辑。
- 标签库:提供了丰富的标签库,简化了页面开发。
- 表单验证:提供了灵活且强大的表单验证机制,可以验证用户输入的数据。
- 国际化支持:支持多语言和本地化。
- 配置简单:通过配置文件来管理应用程序的行为。
3. Struts2的工作原理是什么?Struts2的工作原理如下:1) 客户端发送HTTP请求到服务器。
2) 服务器将请求交给Struts2的过滤器(Filter)。
3) 过滤器通过配置文件找到对应的Action,并调用相应的方法。
4) Action处理请求,并返回一个结果页面的名称或一个结果对象。
5) 结果页面的名称通过配置文件进行映射,服务器将其发送给客户端。
4. 什么是Struts2中的Action类?Action类是Struts2框架中的核心组件,用于处理Web请求。
一个Action类对应一个业务功能,其包含了要执行的方法和数据。
它负责接收请求、处理业务逻辑、将结果返回给前端页面。
5. Struts2中的拦截器是什么?有哪些内置的拦截器?拦截器是Struts2中的组件,用于在请求处理的各个阶段添加自定义的逻辑。