Struts2 网站上来多少人
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:当前人数+1 count++; application.put("count", count); return "login-success"; } public String logout(){ //1.在线人数-1 Integer 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()