strut.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><constant name="struts.action.extension" value="action,do,"></constant><package name="default" namespace="/" extends="struts-default"><action name="login-ui"><result>/login.jsp</result></action><action name="user-login" class="user.action.UserAction"><result name="login-success">/login-success.jsp</result></action><action name="logout" class="user.action.UserAction" method="logout"><result name="logout-success">/login.jsp</result></action></package></struts>
Action中的业务实现:
package user.action;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.ApplicationAware; import org.apache.struts2.interceptor.SessionAware;public class UserAction implements SessionAware,ApplicationAware{private String username;public void setUsername(String username) {this.username = username;}public String execute(){//把用户信息存入Session域中//1:获取session 实现SessionAware接口//2:获取登录信息 :通过在Action中添加setter方法//3:把用户信息存入Session域中session.put("username", username);//在线人数+1//1:获取当前在线人数 :从application中获取。Integer count= (Integer) application.get("count");if(count==null){count=0;}//2:当前人数+1count++;application.put("count", count);return "login-success";}public String logout(){//1.在线人数-1Integer count=(Integer) application.get("count");if(count !=null && count>0){count--;application.put("count", count);}//2.session失效 :用ServletActionContext获取到HttpServletRequest。让后用HttpServletRequest//获取到session :request.getSession() 调用:invalidate()HttpServletRequest request = ServletActionContext.getRequest ();request.getSession().invalidate();return "logout-success";}private Map<String,Object> session;public void setSession(Map<String, Object> session) {this.session=session;}private Map<String,Object> application;public void setApplication(Map<String, Object> application) {this.application=application;} }
用到的知识就是:获取WEB资源:
在 Action 中, 可以通过以下方式访问 web 的 HttpSession, HttpServletRequest, HttpServletResponse 等资源
1:与 Servlet API 解耦的访问方式
2:与Servlet API耦合的访问方式
-------------ActionContext---------
1):ActionContext 是 Action 执行的上下文对象, 在 ActionContext 中保存了 Action 执行所需要的所有对象, 包括 parameters, request, session, application 等.
2):获取 HttpSession 对应的 Map 对象:
public Map getSession()
3):获取 ServletContext 对应的 Map 对象:
public Map getApplication()
4):获取请求参数对应的 Map 对象:
public Map getParameters()
5):获取 HttpServletRequest 对应的 Map 对象:
public Object get(Object key):
ActionContext 类中没有提供类似 getRequest() 这样的方法来获取 HttpServletRequest 对应的 Map 对象. 要得到 HttpServletRequest 对应的 Map 对象, 可以通过为 get() 方法传递 “request” 参数实现
------------------解耦和方式的实现接口---------
Action 类通过可以实现某些特定的接口, 让 Struts2 框架在运行时向 Action 实例注入 parameters, request, session 和 application 对应的 Map 对象:
-----------耦合形式的 原生的Servlet API ServletActionContent-------------
常用的方法:
1:直接获取 HttpServletRequest 对象:
ServletActionContext.getRequest()
2:直接获取 HttpSession 对象
ServletActionContext.getRequest().getSession()
3:直接获取 ServletContext 对象
ServletActionContext.getServletContext()