針對(duì)請(qǐng)求用戶顯示不同的信息
登錄后段保存用戶信息 ----session
保存當(dāng)前在線人數(shù)等功能---application
1.2、傳統(tǒng)的Servlet API類型HttpServletRequest
HttpSession
ServletContext
1.3、Struts2中將傳統(tǒng)的Servlet API類型被處理成Map類型訪問(wèn)更方便
不依賴傳統(tǒng)Servlet API 類型--解耦合
二、ActionContext所在包c(diǎn)om.opensymphony.xwork2
ActionContext被稱為Action上下文或者Action環(huán)境
ActionContext,提供每個(gè)Action運(yùn)行時(shí)與之相關(guān)的所有信息
訪問(wèn)Servlet API
ActionContext類提供getContext()方法獲得實(shí)例
通過(guò)ActionContext類的實(shí)例可獲得Map類型的請(qǐng)求,會(huì)話等
通過(guò)Put()和Get()方法在Map類型的對(duì)象中存取數(shù)據(jù)
web.xml中添加
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPRepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
login.jsp頁(yè)面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><base href="<%=basePath %>>"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>登錄頁(yè)面</title></head><body><form action="user01.action" method="post"><table><tr><td>用戶名:<input name="username"/></td></tr><tr><td>用戶名:<input type="passWord" name="password"/></td></tr><tr><td><input type="submit" value="提交"/><input type="reset" value="重置"/></td></tr></table></form></body></html>
loginSuccess.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>登錄成功頁(yè)面</title></head><body><h1>jsp方式取值:</h1><%=request.getAttribute("linkaddress") %><br/><%=session.getAttribute("uname") %><br/><%=application.getAttribute("online") %><br/><h1>EL表達(dá)式取值:</h1>${request.linkaddress }<br/>${session.uname }<br/>${application.online }<br/><h1>struts取值:</h1><!-- 推薦使用這種 --><s:property value="#request.linkaddress"/><br/><!-- 使用attr取值不推薦--><s:property value="#attr.linkaddress"/><br/><s:property value="#session.uname"/><br/><s:property value="#attr.uname"/><br/><s:property value="#application.online"/><br/><s:property value="#attr.online"/><br/><s:debug/></body></html>
UserAction3.java
package com.pb.web.action;import java.util.Map;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;public class UserAction3 extends ActionSupport { private String username; private String password; private Map<String , Object> request; private Map<String , Object> session; private Map<String , Object> application; public String login(){ ActionContext ac=ActionContext.getContext(); request=(Map<String, Object>) ac.get("request"); session=ac.getSession(); application=ac.getApplication(); if(this.getUsername().equals("accp")&&this.getPassword().equals("accp")){ request.put("linkaddress", "這次的登錄地點(diǎn):SZ"); session.put("uname", username); application.put("online", "當(dāng)前在線人數(shù):xxxx"); System.out.println(request.get("linkaddress")); System.out.println(session.get("uname")); System.out.println(application.get("online")); return SUCCESS; } return INPUT; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Map<String, Object> getRequest() { return request; } public void setRequest(Map<String, Object> request) { this.request = request; } public Map<String, Object> getSession() { return session; } public void setSession(Map<String, Object> session) { this.session = session; } public Map<String, Object> getApplication() { return application; } public void setApplication(Map<String, Object> application) { this.application = application; } }
struts.xml
<struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <action name="user01" class="com.pb.web.action.UserAction3" method="login"> <result name="success">/loginSuccess.jsp</result> <result name="input">/login.jsp</result> </action> </package></struts>
更改以上的代碼
login.jsp頁(yè)面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %><% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><base href="<%=basePath %>>"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>登錄頁(yè)面</title></head><body><!-- <form action="user01.action" method="post"> --><form action="user02.action" method="post"><table><tr><td>用戶名:<input name="username"/></td></tr><tr><td>用戶名:<input type="password" name="password"/></td></tr><tr><td><input type="submit" value="提交"/><input type="reset" value="重置"/></td></tr></table></form><s:property value="#session.msg"/></body></html>
loginSuccess.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>登錄成功頁(yè)面</title></head><body><h1>jsp方式取值:</h1><%=request.getAttribute("linkaddress") %><br/><%=session.getAttribute("uname") %><br/><%=application.getAttribute("online") %><br/><h1>EL表達(dá)式取值:</h1>${request.linkaddress }<br/>${session.uname }<br/>${application.online }<br/><h1>struts取值:</h1><!-- 推薦使用這種 --><s:property value="#request.linkaddress"/><br/><!-- 使用attr取值不推薦--><s:property value="#attr.linkaddress"/><br/><s:property value="#session.uname"/><br/><s:property value="#attr.uname"/><br/><s:property value="#application.online"/><br/><s:property value="#attr.online"/><br/><s:debug/></body></html>
UserAction2.java
package com.pb.web.action;import java.util.Map;import org.apache.struts2.interceptor.ApplicationAware;import org.apache.struts2.interceptor.RequestAware;import org.apache.struts2.interceptor.SessionAware;import com.opensymphony.xwork2.ActionSupport;public class UserAction2 extends ActionSupport implements RequestAware, SessionAware, ApplicationAware { private static final long serialVersionUID = 1L; //屬性要有g(shù)etter、setter方法 private String username; private String password; //request,session,application不需要getter、setter方法 private Map<String , Object> request; private Map<String , Object> session; private Map<String , Object> application; public String login(){ if(this.getUsername().equals("accp")&&this.getPassword().equals("accp")){ request.put("linkaddress", "這次的登錄地點(diǎn):SZ"); session.put("uname", username); application.put("online", "當(dāng)前在線人數(shù):xxxx"); System.out.println(request.get("linkaddress")); System.out.println(session.get("uname")); System.out.println(application.get("online")); return SUCCESS; } session.put("msg", "用戶名或者密碼不正確!"); return INPUT; } //使用struts2提供接口來(lái)生成application,session,request對(duì)象, @Override public void setApplication(Map<String, Object> application) { this.application=application; } @Override public void setSession(Map<String, Object> session) { this.session=session; } @Override public void setRequest(Map<String, Object> request) { this.request=request; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
struts.xml
<action name="user02" class="com.pb.web.action.UserAction2" method="login"> <result name="success" type="dispatcher">/loginSuccess.jsp</result> <result name="input" type="redirect">/login.jsp</result> </action>
使用傳統(tǒng)的方式獲取Servlet API
實(shí)現(xiàn)ServletRequestAware接口
package com.pb.web.action;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.util.ServletContextAware;import com.opensymphony.xwork2.ActionSupport;public class UserAction04 extends ActionSupport implements ServletRequestAware, ServletContextAware { private String username; private String password; private HttpServletRequest request; private HttpSession session; private ServletContext application; public String login() { // 獲取對(duì)象 session = request.getSession(); // 保存數(shù)據(jù) request.setAttribute("loginAddress", "您本次登錄地點(diǎn)是:北京"); session.setAttribute("username", username); application.setAttribute("online", "當(dāng)前在線人數(shù):XXX"); // 獲取數(shù)據(jù) System.out.println(request.getAttribute("loginAddress")); System.out.println(session.getAttribute("username")); System.out.println(application.getAttribute("online")); return SUCCESS; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } @Override public void setServletContext(ServletContext application) { this.application = application; }}
或者使用時(shí)直接獲取對(duì)象
package com.pb.web.action;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class UserAction03 extends ActionSupport { private String username; private String password; private HttpServletRequest request; private HttpSession session; private ServletContext application; public String login() { // 獲取對(duì)象 request = ServletActionContext.getRequest(); session = request.getSession(); application = ServletActionContext.getServletContext(); // 保存數(shù)據(jù) request.setAttribute("loginAddress", "您本次登錄地點(diǎn)是:北京"); session.setAttribute("username",username); application.setAttribute("online","當(dāng)前在線人數(shù):XXX"); // 獲取數(shù)據(jù) System.out.println(request.getAttribute("loginAddress")); System.out.println(session.getAttribute("username")); System.out.println(application.getAttribute("online")); return SUCCESS; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注