(六)Struts2访问web元素

来源:互联网 发布:淘宝销量排行榜 编辑:程序博客网 时间:2024/06/05 11:17

首要的目的是获取到request,session,application. HttpServletRequest,HttpServletSession,ServletContext的引用.

取得Map类型request,session,application,真实类型 HttpServletRequest, HttpSession, ServletContext的引用:

公用代码如下:

UI界面index.jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><html>    <body>    This is my login page. <br>    <br>    取得Map类型request,session,application,真实类型 HttpServletRequest, HttpSession, ServletContext的引用:    <br/>    <form action="" name="loginForm" id="loginFormId" method="post">    用户名:<input type="text" name="name" id="nameId" />    密    码:<input type="password" name="pwd" id="pwdId" /><br/>        <input type="button" value="submit1" onclick="javascript:document.loginForm.action='login/login1';document.loginForm.submit();"  />    <input type="button" value="submit2" onclick="javascript:document.loginForm.action='login/login2';document.loginForm.submit();"  />    <input type="button" value="submit3" onclick="javascript:document.loginForm.action='login/login3';document.loginForm.submit();"  />    <input type="button" value="submit4" onclick="javascript:document.loginForm.action='login/login4';document.loginForm.submit();"  />    </form>  </body></html>

UI界面跳转的页面代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>    <body>    Successful~~~~! <br>    s:property是用标签访问ActionContext中的值,也就是StackContext.<br/>    Stack Context--->These items are available using the #key notation!<br/>        所以可以使用Struts标签,来像下面代码那样直接获取值.<br/>    <s:property value="#request.r1" />||<%=request.getAttribute("r1") %><br>    <s:property value="#session.s1" />||<%=session.getAttribute("s1") %><br>    <s:property value="#application.a1" />||<%=application.getAttribute("a1") %><br>    <s:property value="#attr.r1" /><br>    <s:property value="#attr.s1" /><br>    <s:property value="#attr.a1" /><br>    attr这个属性用的很少,因为不确定性,你该明白你把你的数据放在什么地方了.<br/>         如果request和session都有值的name,获取会获取第一个,由此出现问题.    <s:debug></s:debug>  </body></html>

struts.xml配置文件:

<package name="login" namespace="/login" extends="struts-default"> <action name="login*" class="org.credo.action.LoginAction{1}"> <result>/login/success.jsp</result> </action></package>

(一)最常用的方法:

package org.credo.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;/** * 依赖注入DI/控制反转IOC,本例是最常用的方法!!!!! */public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{private static final long serialVersionUID = 1L;private Map<String,Object> request;private Map<String,Object> session;private Map<String,Object> application;//依赖注入(DI),request依赖于容器(Struts2)调用RequestAwre方法注入数据.//控制反转 (IOC),把自己做的事情交给了别人去做.public String execute(){request.put("r1", "r1");session.put("s1", "s1");application.put("a1", "a1");return SUCCESS;}@Overridepublic void setApplication(Map<String, Object> application) {this.application= application;}@Overridepublic void setSession(Map<String, Object> session) {this.session=session;}@Overridepublic void setRequest(Map<String, Object> request) {this.request=request;}}

(二)方法2:

package org.credo.action;import java.util.Map;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;//这种方法依赖于Struts2,依赖于容器.@SuppressWarnings("rawtypes")public class LoginAction1 extends ActionSupport{/** * 首要的目的是获取到request,session,application. HttpServletRequest,HttpServletSession,ServletContext的引用. * public class ActionContext implements Serializable {     *static ThreadLocal actionContext = new ThreadLocal();     *如山是ActionContext的实现,是一个实现了序列化的本地线程.也就是说Context是整个线程中的运行环境. */private static final long serialVersionUID = 1L;private Map request;private Map session;private Map application;//ActionContext就是<s:debug>显示的StackContext.//ActionContextpublic LoginAction1(){//ActionContext.getContext()不是一个单例.是一个本地线程,ThreadLocal,但是在这个线程里他是单例.request=(Map) ActionContext.getContext().get("request");session=ActionContext.getContext().getSession();application=ActionContext.getContext().getApplication();//request,session,application在页面中访问的是HttpServletRequest,HttpServletSession,ServletContext}// 后台MAP形式的request,session,application,    //而前台的HttpServletRequest,HttpServletSession,ServletContext是Struts2把后台数据都填充到其中.@SuppressWarnings("unchecked")public String execute(){request.put("r1", "r1");session.put("s1", "s1");application.put("a1", "a1");return SUCCESS;}}

(三)方法3:

package org.credo.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 LoginAction3 extends ActionSupport{/** *  */private static final long serialVersionUID = 1L;private HttpServletRequest request;private HttpSession session;private ServletContext application;public LoginAction3(){request=ServletActionContext.getRequest();session=request.getSession();application=session.getServletContext();}public String execute(){request.setAttribute("r1", "r1");session.setAttribute("s1", "s1");application.setAttribute("a1", "a1");return SUCCESS;}}

(四)方法4:

package org.credo.action;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.apache.struts2.interceptor.ServletRequestAware;import com.opensymphony.xwork2.ActionSupport;public class LoginAction4 extends ActionSupport implements ServletRequestAware{/** * 这个也是IOC的,但是实现的是ServletRequestAware接口.也不常用. */private static final long serialVersionUID = 1L;private HttpServletRequest request;private HttpSession session;private ServletContext application;@Overridepublic void setServletRequest(HttpServletRequest request) {this.request= request;this.session=request.getSession();this.application=session.getServletContext();}public String execute(){request.setAttribute("r1", "r1");session.setAttribute("s1", "s1");application.setAttribute("a1", "a1");return SUCCESS;}}


原创粉丝点击