struts2中struts2拦截器配置actioninvocation.invoke方法详解

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
不以物喜 不以己悲
LOFTER精选
阅读(2240)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'struts2 拦截器拦截action中指定方法',
blogAbstract:'1.继承类MethodFilterInterceptor(此类是类AbstractInterceptor的子类)import java.util.Mimport com.opensymphony.xwork2.Aimport com.opensymphony.xwork2.ActionCimport com.opensymphony.xwork2.ActionIimport com.opensymphony.xwork2.interceptor.MethodFilterI/* *拦截指定方法
*/public class MyFilterInterceptor& extends MethodFilterInterceptor{',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:8,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:true,
hostIntro:'不以物喜 不以己悲',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}struts2登陆拦截器 -
- ITeye技术网站
博客分类:
1、拦截器代码如下:
package ssh.
import java.util.M
import model.login.LoginVo;
import org.apache.log4j.L
import ssh.web.action.LoginP
import ssh.web.action.login.LoginA
import ssh.web.action.logout.LogoutA
import com.opensymphony.xwork2.ActionC
import com.opensymphony.xwork2.ActionI
import com.opensymphony.xwork2.interceptor.I
@SuppressWarnings("serial")
public class LoginInterceptor implements Interceptor {
&&& public static final String LOGIN_PAGE = "login";
&&& //public static S
&&& public static LoginVo loginVo;
&&&
* 初始化日志引擎
private final Logger logger = Logger.getLogger("s2shLogger");
public void destroy() {
public void init() {
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation actionInvocation) throws Exception {
&&&&&&& Object action = actionInvocation.getAction();
&&&&&&&
&&&&&&& (LoginInterceptor.class + "拦截到的action为:"+action);
&&&&&&& // 对LoginAction不做该项拦截 LoginPerson
&&&&&&& if (action instanceof LoginPerson || action instanceof LoginAction) {
&&&&&&&&&&& System.out.println("exit check login, because this is login action.");
&&&&&&&&&&& return actionInvocation.invoke();
&&&&&&& }
&&&&&&& if(action instanceof LogoutAction){
&&&&&&&
System.out.println("exit check logout, because this is logout action.");
&&&&&&&
return actionInvocation.invoke();
&&&&&&& }
&&&&&&&
&&&&&&& // 确认Session中是否存在Student
&&&&&&& Map session = actionInvocation.getInvocationContext().getSession();
&&&&&&& if(session !=null){
&&&&&&&
loginVo = (LoginVo) session.get("seStudent");
&&&&&&&&&&& if (loginVo != null ) {
&&&&&&&&&&&&&&& // 存在的情况下进行后续操作。
&&&&&&&&&&&&&&& System.out.println("already login!"+action.toString());
&&&&&&&&&&&&&&& return actionInvocation.invoke();
&&&&&&&&&&& } else {
&&&&&&&&&&&&&&& // 否则终止后续操作,返回LOGIN
&&&&&&&&&&&&&&& System.out.println("no login, forward login page!");
&&&&&&&&&&&&&&& ActionContext.getContext().put("info", "请先登录系统后再进行操作");
&&&&&&&&&&&&&&& return LOGIN_PAGE;
&&&&&&&&&&& }
&&&&&&& }else {
&&&&&&&&&&& // 否则终止后续操作,返回LOGIN
&&&&&&&&&&& System.out.println("no login, forward login page!");
&&&&&&&&&&& ActionContext.getContext().put("info", "请先登录系统后再进行操作");
&&&&&&&&&&& logger.warn("非法账号登录");
&&&&&&&&&&& return LOGIN_PAGE;
&&&&&&& }
&&&&&&&
2.struts配置文件中,有关拦截器的配置内容如下:
&?xml version="1.0" encoding="UTF-8"?&
&!DOCTYPE struts PUBLIC
&&& "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
&&& "http://struts.apache.org/dtds/struts-2.0.dtd"&
&constant name="struts.devMode" value="true" /&
&constant name="struts.objectFactory" value="spring"&&/constant&
&constant name="struts.i18n.encoding" value="utf-8"/&
&&& &include file="/actions/struts_student.xml"&&/include&
&&& &include file="/actions/struts_login.xml"&&/include&
&&& &include file="/actions/struts_page.xml"&&/include&
&&& &include file="/actions/struts_ajax.xml"&&/include&
&&&
&&& &package name="struts-comm" extends="struts-default"&
&&&
&!-- 拦截器配置 --&
&&&
&interceptors&
&interceptor name="loginInterceptor" class="ssh.security.LoginInterceptor"&&/interceptor&
&interceptor-stack name="teamwareStack"&
&&&&&&&&&&& &interceptor-ref name="loginInterceptor"/&
&&&&&&&&&&& &interceptor-ref name="defaultStack"/&
&&&&&&& &/interceptor-stack&
&/interceptors&
&default-interceptor-ref name="teamwareStack"/&
&global-results&
&&
&result name="login"&/main/webapp/pub/index.jsp&/result&
&&
&/global-results&
&&&
&&& &/package&
&/struts&
3.接受登录请求的Action设置session信息的代码片段:
package ssh.web.action.
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpS
import model.login.LoginVo;
import org.apache.log4j.L
import org.apache.struts2.ServletActionC
m.util.T
import ssh.service.login.LoginF
import ssh.web.action.LoginP
import com.opensymphony.xwork2.ActionS
@SuppressWarnings("serial")
public class LoginAction extends ActionSupport {&
private String verifyC
private LoginFacade loginF
private LoginVo loginVo;
private final Logger logger = Logger.getLogger(LoginPerson.class);
@SuppressWarnings("deprecation")
public String execute() throws Exception {
(LoginAction.class + "[method:login() 登录账号验证] in ...");
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
* 验证码校验
String icp = (String) session.getAttribute("piccode");
if (icp==null && !Tools.isEmpty(verifyCode)){
icp = verifyC
if(Tools.isEmpty(verifyCode)|| !icp.equalsIgnoreCase(verifyCode)){
request.setAttribute("errMessage","验证码错误,请重新输入");
return LOGIN;
if (!Tools.isEmpty(icp) && !Tools.isEmpty(verifyCode)) {
if (!verifyCode.equalsIgnoreCase(icp)) {
request.setAttribute("errMessage","验证码错误,请重新输入");
return LOGIN;
* 获取当前登录对象
* 用于判断系统是否已登录
loginVo = this.loginFacade.login(account, password);
if(loginVo != null ){
session.setAttribute("seStudent", loginVo);
return SUCCESS;
request.setAttribute("err", "用户名或密码错误,请重新输入后登陆");
return LOGIN;
public String getAccount() {
public void setAccount(String account) {
this.account =
public String getPassword() {
public void setPassword(String password) {
this.password =
public String getVerifyCode() {
return verifyC
public void setVerifyCode(String verifyCode) {
this.verifyCode = verifyC
public LoginFacade getLoginFacade() {
return loginF
public void setLoginFacade(LoginFacade loginFacade) {
this.loginFacade = loginF
public LoginVo getLoginVo() {
return loginVo;
public void setLoginVo(LoginVo loginVo) {
this.loginVo = loginVo;
浏览: 19788 次
来自: 上海
生日获取月份时为什么不+1?
正在找这个!
眼看楼主没人理会,我大发善心,特此回贴,以代表顶过楼主。
虽然不难,但是归纳也需要时间的,赞一个!最后一个age++struts2的拦截器invocation.invoke()旁边有红叉 提示错误为invocatio
[问题点数:20分,结帖人I_am_little_red]
struts2的拦截器invocation.invoke()旁边有红叉 提示错误为invocatio
[问题点数:20分,结帖人I_am_little_red]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。请教struts2中拦截器栈和tokenSession在使用中出现的错误
[问题点数:50分,结帖人citybug_nj]
请教struts2中拦截器栈和tokenSession在使用中出现的错误
[问题点数:50分,结帖人citybug_nj]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。2000人阅读
如何使用struts2拦截器,或者自定义拦截器。特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的checkbox拦截器):
&interceptor-ref name=&checkbox&&
& &param name=&uncheckedValue&&0&/param&
&/interceptor-ref&
&interceptor-ref name=&defaultStack&/&(必须加,否则出错)
也可以改为对全局Action设置自己需要的拦截器,如下:
在struts.xml里面定义全局的配置设置
& &package name=&struts-shop& extends=&struts-default&&
&&& &interceptors&
&&&&& &interceptor-stack name=&myStack&&
&&&&&&& &interceptor-ref name=&checkbox&&
&&&&&&&&& &param name=&uncheckedValue&&0&/param&
&&&&&& &/interceptor-ref&
&&&&&& &interceptor-ref name=&defaultStack&/&
&&&&& &/interceptor-stack&
&&& &/interceptors&
&&& &default-interceptor-ref name=&myStack&/&(这句是设置所有Action自动调用的拦截器堆栈)
& &/package&
struts-action.xml里面配置Action如下:
& &package name=&LogonAdmin& extends=&struts-shop&&(这里扩展struts.xml里面定义的配置就可以了)
&&&action name=&logon& class=&logonAction&&
&&&& &result&/jsp/smeishop/admin/index.jsp&/result&
&&&& &result name=&error&&/jsp/smeishop/admin/logon.jsp&/result&
&&&& &result name=&input&&/jsp/smeishop/admin/logon.jsp&/result&
&& &/action&
&& &action name=&logout& class=&logoutAction&&
&&&& &result&/jsp/smeishop/admin/logon.jsp&/result&
&& &/action&
&&/package&
你的拦截器可以正常工作了!!HOHO
以下是参考资料
Struts2 拦截器 [Interceptor]
拦截器的工作原理如上图,每一个Action请求都包装在一系列的拦截器的内部。拦截器可以在Action执行直线做相似的操作也可以在Action执行直后做回收操作。
每一个Action既可以将操作转交给下面的拦截器,Action也可以直接退出操作返回客户既定的画面。
如何自定义一个拦截器?
自定义一个拦截器需要三步:
1 自定义一个实现Interceptor接口(或者继承自AbstractInterceptor)的类。
2 在strutx.xml中注册上一步中定义的拦截器。
3 在需要使用的Action中引用上述定义的拦截器,为了方便也可将拦截器定义为默认的拦截器,这样在不加特殊声明的情况下所有的Action都被这个拦截器拦截。
Interceptor接口声明了三个方法:
public interface Interceptor extends Serializable {
&&& void destroy();
&&& void init();
&&& String intercept(ActionInvocation invocation) throws E
Init方法在拦截器类被创建之后,在对Action镜像拦截之前调用,相当于一个post-constructor方法,使用这个方法可以给拦截器类做必要的初始话操作。
Destroy方法在拦截器被垃圾回收之前调用,用来回收init方法初始化的资源。
Intercept是拦截器的主要拦截方法,如果需要调用后续的Action或者拦截器,只需要在该方法中调用invocation.invoke()方法即可,在该方法调用的前后可以插入Action调用前后拦截器需要做的方法。如果不需要调用后续的方法,则返回一个String类型的对象即可,例如Action.SUCCESS。
另外AbstractInterceptor提供了一个简单的Interceptor的实现,这个实现为:
public abstract class AbstractInterceptor implements Interceptor {
&&&& public void init() {
&&& public void destroy() {
&&& public abstract String intercept(ActionInvocation invocation) throws E
在不需要编写init和destroy方法的时候,只需要从AbstractInterceptor继承而来,实现intercept方法即可。
我们尝试编写一个Session过滤用的拦截器,该拦截器查看用户Session中是否存在特定的属性(LOGIN属性)如果不存在,中止后续操作定位到LOGIN,否则执行原定操作,代码为:
public class CheckLoginInterceptor extends AbstractInterceptor {
&&& public static final String LOGIN_KEY = &LOGIN&;
&&& public static final String LOGIN_PAGE = &global.login&;
&& &public String intercept(ActionInvocation actionInvocation) throws Exception {
&&&&&&& System.out.println(&begin check login interceptor!&);
&&&&&&& // 对LoginAction不做该项拦截
&&&&&&& Object action = actionInvocation.getAction();
&&&&&&& if (action instanceof LoginAction) {
&&&&&&&&&&& System.out.println(&exit check login, because this is login action.&);
&&&&&&&&&&& return actionInvocation.invoke();
&&&&&&& // 确认Session中是否存在LOGIN
&&&&&&& Map session = actionInvocation.getInvocationContext().getSession();
&&&&&&& String login = (String) session.get(LOGIN_KEY);
&&&&&&& if (login != null && login.length() & 0) {
&&&&&&&&&&& // 存在的情况下进行后续操作。
&&&&&&&&&&& System.out.println(&already login!&);
&&&&&&&&&&& return actionInvocation.invoke();
&&&&&&& } else {
&&&&&&&&&&& // 否则终止后续操作,返回LOGIN
&&&&&&&&&&& System.out.println(&no login, forward login page!&);
&&&&&&&&&&& return LOGIN_PAGE;
注册拦截器
&interceptors&
&&&&&&&&&&& &interceptor
name=&login&&
class=&com.jpleasure.teamware.util.CheckLoginInterceptor&/&
&&&&&&&&&&& &interceptor-stack name=&teamwareStack&&
&&&&&&&&&&&&&&& &interceptor-ref name=&login&/&
&&&&&&&&&&&&&&& &interceptor-ref name=&defaultStack&/&
&&&&&&&&&&& &/interceptor-stack&
&/interceptors&
将上述拦截器设定为默认拦截器:
&default-interceptor-ref name=&teamwareStack&/&
这样在后续同一个package内部的所有Action执行之前都会被login拦截。
Struts2(XWork)提供的拦截器的功能说明:
Alias Interceptor
在不同请求之间将请求参数在不同名字件转换,请求内容不变
Chaining Interceptor
让前一个Action的属性可以被后一个Action访问,现在和chain类型的result(&result type=”chain”&)结合使用。
Checkbox Interceptor
添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的checkbox。
Cookies Interceptor
使用配置的name,value来是指cookies
Conversion Error Interceptor
conversionError
将错误从ActionContext中添加到Action的属性字段中。
Create Session Interceptor
createSession
自动的创建HttpSession,用来为需要使用到HttpSession的拦截器服务。
Debugging Interceptor
提供不同的调试用的页面来展现内部的数据状况。
Execute and Wait Interceptor
execAndWait
在后台执行Action,同时将用户带到一个中间的等待页面。
Exception Interceptor
将异常定位到一个画面
File Upload Interceptor
fileUpload
提供文件上传功能
I18n Interceptor
记录用户选择的locale
Logger Interceptor
输出Action的名字
Message Store Interceptor
存储或者访问实现ValidationAware接口的Action类出现的消息,错误,字段错误等。
Model Driven Interceptor
model-driven
如果一个类实现了ModelDriven,将getModel得到的结果放在Value Stack中。
Scoped Model Driven
scoped-model-driven
如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入Action内部。
Parameters Interceptor
将请求中的参数设置到Action中去。
Prepare Interceptor
如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。
Scope Interceptor
将Action状态存入session和application的简单方法。
Servlet Config Interceptor
servletConfig
提供访问HttpServletRequest和HttpServletResponse的方法,以Map的方式访问。
Static Parameters Interceptor
staticParams
从struts.xml文件中将&action&中的&param&中的内容设置到对应的Action中。
Roles Interceptor
确定用户是否具有JAAS指定的Role,否则不予执行。
Timer Interceptor
输出Action执行的时间
Token Interceptor
通过Token来避免双击
Token Session Interceptor
tokenSession
和Token Interceptor一样,不过双击的时候把请求的数据存储在Session中
Validation Interceptor
validation
使用action-validation.xml文件中定义的内容校验提交的数据。
Workflow Interceptor
调用Action的validate方法,一旦有错误返回,重新定位到INPUT画面
Parameter Filter Interceptor
从参数列表中删除不必要的参数
Profiling Interceptor
通过参数激活profile
注册并引用Interceptor
&package name=&default& extends=&struts-default&&
&& &interceptors&
&&&&&& &interceptor name=&timer& class=&..&/&
&&&&&& &interceptor name=&logger& class=&..&/&
&& &/interceptors&
&& &action name=&login& class=&tutorial.Login&&
&&&&&&& &interceptor-ref name=&timer&/&
&&&&&&& &interceptor-ref name=&logger&/&
&&&&&&& &result name=&input&&login.jsp&/result&
&&&&&&& &result name=&success&
&&&&&&&&&&& type=&redirect-action&&/secure/home&/result&
&& &/action&
&/package&
可以将多个拦截器合并在一起作为一个堆栈调用,当一个拦截器堆栈被附加到一个Action的时候,要想Action执行,必须执行拦截器堆栈中的每一个拦截器。
&package name=&default& extends=&struts-default&&
&& &interceptors&
&&&&&&& &interceptor name=&timer& class=&..&/&
&&&&&&& &interceptor name=&logger& class=&..&/&
&&&&&&& &interceptor-stack name=&myStack&&
&&&&&&&&&& &interceptor-ref name=&timer&/&
&&&&&&&&&& &interceptor-ref name=&logger&/&
&&&&&&& &/interceptor-stack&
&&& &/interceptors&
&&& &action name=&login& class=&tutuorial.Login&&
&&&&&&&& &interceptor-ref name=&myStack&/&
&&&&&&&& &result name=&input&&login.jsp&/result&
&&&&&&&& &result name=&success&
&&&&&&&&&&&& type=&redirect-action&&/secure/home&/result&
&&& &/action&
&/package&
上述说明的拦截器在默认的Struts2应用中,根据惯例配置了若干个拦截器堆栈,详细情参看struts-default.xml
其中有一个拦截器堆栈比较特殊,他会应用在默认的每一个Action上。
&interceptor-stack name=&defaultStack&&
&&& &interceptor-ref name=&exception&/&
&&& &interceptor-ref name=&alias&/&
&&& &interceptor-ref name=&servletConfig&/&
&&& &interceptor-ref name=&prepare&/&
&&& &interceptor-ref name=&i18n&/&
&&& &interceptor-ref name=&chain&/&
&&& &interceptor-ref name=&debugging&/&
&&& &interceptor-ref name=&profiling&/&
&&& &interceptor-ref name=&scopedModelDriven&/&
&&& &interceptor-ref name=&modelDriven&/&
&&& &interceptor-ref name=&fileUpload&/&
&&& &interceptor-ref name=&checkbox&/&
&&& &interceptor-ref name=&staticParams&/&
&&& &interceptor-ref name=&params&&
&&&&& &param name=&excludeParams&&dojo/..*&/param&
&&& &/interceptor-ref&
&&& &interceptor-ref name=&conversionError&/&
&&& &interceptor-ref name=&validation&&
&&&&&&& &param name=&excludeMethods&&input,back,cancel,browse&/param&
&&& &/interceptor-ref&
&&& &interceptor-ref name=&workflow&&
&&&&&&& &param name=&excludeMethods&&input,back,cancel,browse&/param&
&&& &/interceptor-ref&
&/interceptor-stack&
每一个拦截器都可以配置参数,有两种方式配置参数,一是针对每一个拦截器定义参数,二是针对一个拦截器堆栈统一定义所有的参数,例如:
&interceptor-ref name=&validation&&
& &param name=&excludeMethods&&myValidationExcudeMethod&/param&
&/interceptor-ref&
&interceptor-ref name=&workflow&&
& &param name=&excludeMethods&&myWorkflowExcludeMethod&/param&
&/interceptor-ref&
&interceptor-ref name=&defaultStack&&
&&& &param name=&validation.excludeMethods&&myValidationExcludeMethod&/param&
&&& &param name=&workflow.excludeMethods&&myWorkflowExcludeMethod&/param&
&/interceptor-ref&
每一个拦截器都有两个默认的参数:
excludeMethods - 过滤掉不使用拦截器的方法和
includeMethods – 使用拦截器的方法。
需要说明的几点:
1 拦截器执行的顺序按照定义的顺序执行,例如:
&interceptor-stack name=&xaStack&&
& &interceptor-ref name=&thisWillRunFirstInterceptor&/&
& &interceptor-ref name=&thisWillRunNextInterceptor&/&
& &interceptor-ref name=&followedByThisInterceptor&/&
& &interceptor-ref name=&thisWillRunLastInterceptor&/&
&/interceptor-stack&
的执行顺序为:
thisWillRunFirstInterceptor
& thisWillRunNextInterceptor
&&& followedByThisInterceptor
&&&&& thisWillRunLastInterceptor
&&&&&&& MyAction1
&&&&&&& MyAction2 (chain)
&&&&&&& MyPreResultListener
&&&&&&& MyResult (result)
&&&&& thisWillRunLastInterceptor
&&& followedByThisInterceptor
& thisWillRunNextInterceptor
thisWillRunFirstInterceptor
2 使用默认拦截器配置每个Action都需要的拦截器堆栈,例如:
&action name=&login&& class=&tutorial.Login&&
&&&& &interceptor-ref name=&timer&/&
&&&& &interceptor-ref name=&logger&/&
&&&& &interceptor-ref name=&default-stack&/&
&&&& &result name=&input&&login.jsp&/result&
&&&& &result type=&redirect-action&&/secure/home&/result&
可以按照如下的方式定义:
&interceptors&
&&&& &interceptor-stack name=&myStack&&
&&&&&&& &interceptor-ref name=&timer&/&
&&&&&&& &interceptor-ref name=&logger&/&
&&&&& &&&interceptor-ref name=&default-stack&/&
&&&& &/interceptor-stack&
&/interceptors&
&default-interceptor-ref name=&myStack&/&
&action name=&login&& class=&tutorial.Login&&
&&&&&& &result name=&input&&login.jsp&/result&
&&&&&& &result type=&redirect-action&&/secure/home&/result&
3 如何访问HttpServletRequest,HttpServletResponse或者HttpSession
有两种方法可以达到效果,使用ActionContext:
Map attibutes = ActionContext.getContext().getSession();
或者实现相应的接口:
HttpSession&&&&&&&&&&& SessionAware
HttpServletRequest&&&& ServletRequestAware
HttpServletResponse&&& ServletResponseAware
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:96613次
积分:1037
积分:1037
排名:第18115名
原创:14篇
转载:26篇
评论:21条
(2)(1)(1)(2)(2)(2)(3)(2)(3)(2)(2)(2)(2)(9)(4)(1)

我要回帖

更多关于 struts2的action 的文章

 

随机推荐