使用ActionContext获得session会带来单元测试不好作,所以使用SessionAware可以用通过的Map对象来注入session,这样在单元测试的时候只需要创建一个Map就可以了。这是一种比较推荐的做法
LogionAction.java文件如下:
package com.xujun.webwork.action;
import com.opensymphony.xwork.Action;
import com.opensymphony.webwork.interceptor.SessionAware;
import java.util.Map;
public class LoginAction implements Action,SessionAware{
private Map mySession;
public String execute() throws Exception
{
mySession.put("username", "xujunSessionAware");
return this.SUCCESS;
}
public void setSession(Map session) {
this.mySession = session;
}
}
xwork.xml配置如下,注意interceptor-ref 名称的大小写:
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
<include file="webwork-default.xml" />
<package name="default" extends="webwork-default">
<action name="login" class="com.xujun.webwork.action.LoginAction">
<result name="success" type="dispatcher">
<param name="location">/main.jsp</param>
</result>
<interceptor-ref name="completeStack"></interceptor-ref>
</action>
</package>
</xwork>
main.jsp文件如下:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="ww" uri="webwork"%>
<html>
<body>
<p align="center">Login Success!</p>
<p align="center">Welcome!
<ww:property value="#session['username']"/>
</p>
</body>
</html>
在一个项目中可能会有很多action都需要用到session,如果每个action都来实现org.apache.struts2.interceptor.SessionAware这个接口,可能会显得比较麻烦,所以建议作一个抽象的BaseAction类来实现org.apache.struts2.interceptor.SessionAware接口,以后所有的action只要继承这个BaseAction就可以了。
如果user里存在isAdmin的方法,在jsp中可以通过<s:if test="#session.user.admin">来判断用户有没有管理权限,通过<s:property value="#session.user.userName">或者来取得用户名.
分享到:
相关推荐
在 Struts2 中,Session 的使用主要通过实现 SessionAware 接口来实现,本文将详细介绍 Struts2 中的 Session 用法。 一、Session 概念 在 Web 应用程序中,Session 是指服务器端用于存储用户数据的存储空间。...
1. **使用SessionAware接口:** - 通过实现`SessionAware`接口,可以自动注入session对象。 ```java import org.apache.struts2.interceptor.SessionAware; import java.util.Map; public class MyAction ...
// 实现SessionAware接口,以便获取和设置session数据 @Override public void setSession(Map, Object> session) { this.session = session; } } ``` 在上述示例中,`getJsonData`方法返回一个包含用户数据...
// 不需要实现此方法,但为了满足SessionAware接口,必须包含 } } ``` 这个Action只有一个`execute`方法,返回`SUCCESS`,并设置一个属性`message`。 ### 创建JSP页面 在`src/main/webapp/WEB-INF/views`或`src/...
接口或继承`org.struts2.interceptor.ModelDriven`、`org.struts2.interceptor.SessionAware`等抽象类来创建自定义Action。 2. **Result**:Result是Action执行后的输出结果,它可以将处理结果导向不同的页面或者...
Struts2内建了一些拦截器,如Validation拦截器用于表单验证,SessionAware拦截器处理session相关操作等。 4. **Result**:Action执行完成后,会返回一个结果,Struts2支持多种结果类型,如dispatcher(重定向或转发...
3. **Struts2的SessionAware接口**:如果Action类实现了SessionAware接口,Struts2会在调用Action的execute方法之前,自动将HttpSession注入到Action实例中。这样,开发者就可以直接在Action中操作会话,实现会话...
// 实现SessionAware接口,处理session @Override public void setSession(Map, Object> session) { this.session = session; } } ``` 在这个例子中,我们没有创建任何XML配置文件,而是通过注解定义了Action...
- 你可以自定义拦截器,也可以使用Struts2内置的拦截器,如Validation、SessionAware等。 6. **结果类型** - 结果类型定义了Action执行后如何跳转到下一个页面,如dispatcher(转发)或stream(下载文件)。 - ...
ModelDriven接口允许将Action对象作为Model使用,SessionAware接口提供了一种方式将HTTP会话对象传递给Action,而ApplicationAware接口则允许Action访问到整个Web应用的属性。LoginAction中的user对象属于Model驱动...
// 实现SessionAware接口,以便在Action中使用session @Override public void setSession(Map, Object> session) { session.put("data", data); } // getter and setter for 'data' public String getData()...
设计上,Struts2鼓励使用框架的接口而非直接操作HTTP相关的Servlet接口。开发者不再需要直接处理HttpServletRequest、HttpServletResponse或HttpSession,而是可以实现如RequestAware、SessionAware等接口来获取所需...
此外,Struts2提供了一些安全相关的拦截器,例如,Validations拦截器用于字段验证,而SessionAware接口可以帮助开发者管理会话中的信息。 总结起来,"基于Struts2的购物网站"项目涵盖了Web开发中的多个核心知识点,...
同时,我们还需要配置拦截器栈,可能包括SessionAware接口,以便于框架能够自动管理Session数据。 接下来,我们创建JSP页面作为视图层,展示购物车内容。可以使用Struts2的OGNL表达式语言来访问Action中的属性,...
此外,Struts2强调与HTTP操作解耦,避免直接处理HttpServletRequest、HttpServletResponse和HttpSession等Servlet接口,而是引入了自己的RequestAware、SessionAware等接口,使得代码更加简洁和模块化。 在表现层,...
2. **创建Action类**: 创建一个新的Java类,继承自`org.struts2.interceptor.SessionAware`接口,以便可以使用session来存储验证码。这个类将包含生成验证码的方法,以及处理用户提交验证的逻辑。 3. **生成中文...
为了能够访问这些作用域,Struts2提供了几个接口,开发者可以根据需求选择合适的接口实现: - `ServletRequestAware`: 用于获取`HttpServletRequest`对象。 - `SessionAware`: 用于获取`SessionMap`对象。 - `...
- **实现SessionAware接口**:如果希望在Action类中访问`session`对象,可以通过实现`SessionAware`接口来实现。在实现了这个接口后,STRUTS2同样会在执行Action之前自动调用`setSession`方法,将包含`session`数据...
除了`ServletResponseAware`接口,Struts2还提供了许多其他的`Aware`接口,用于将不同的上下文信息注入到Action中。例如: 1. `ServletRequestAware`:提供`HttpServletRequest`对象的访问。 2. `SessionAware`:...