访问WEB元素:
第一种方式:(访问struts2的容器)
在Action中为后台的reques.session,application添加属性:
package com.oristand.actions;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction1 extends ActionSupport {
private Map request;
private Map session;
private Map application;
public LoginAction1(){
request = (Map)ActionContext.getContext().get("request");
session = ActionContext.getContext().getSession();
application = ActionContext.getContext().getApplication();
}
@Override
public String execute() throws Exception {
request.put("r1", "r1");
session.put("s1", "s1");
application.put("a1", "a1");
return SUCCESS;
}
}
前台访问:
<s:property value="#request.r1"/> | <%=request.getAttribute("r1") %><br/>
<s:property value="#session.s1"/> | <%=request.getAttribute("s1") %><br/>
<s:property value="#application.a1"/> | <%=request.getAttribute("a1") %><br/>
<s:debug></s:debug>
总结:页面中访问的request是一个HttpRequest,页面中访问的session是一个HttpSession,页面中访问的一个application是一个ServletContext。
由此可见:struts2会将后台的request,session,application里面的属性值都赋给前台的HttpRequest.HttpSession,ServletContext.
写程序就像穿鞋,要穿一手的,不要穿两手,三手,......手的。
Context就是环境,各种各样的环境,上课的环境,骑自行车的环境。
第二种方式:(IOC依赖注入,由struts2将相应的request,session,application,注入给相应的实现了相应的RequestAware,SessionAware,ApplicationAware接口的类。)这个最常用!
package com.oristand.actions;
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.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{
private Map request;
private Map session;
private Map application;
@Override
public String execute() throws Exception {
request.put("r1", "r21");
session.put("s1", "s21");
application.put("a1", "a21");
return SUCCESS;
}
public void setRequest(Map<String, Object> request) {
this.request = request;
}
public void setSession(Map<String, Object> session) {
// TODO Auto-generated method stub
this.session = session;
}
public void setApplication(Map<String, Object> application) {
// TODO Auto-generated method stub
this.application = application;
}
}
第三种方式:(由struts2的容器得到HttpRequest,HttpSession,ServletContext)
package com.oristand.actions;
import java.util.Map;
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 HttpServletRequest request;
private HttpSession session;
private ServletContext application;
public LoginAction3(){
request = ServletActionContext.getRequest();//得到HttpServletRequest的方法
session = request.getSession();
application = session.getServletContext();
}
@Override
public String execute() throws Exception {
request.setAttribute("r1", "r31");
session.setAttribute("s1", "s31");
application.setAttribute("a1", "a31");
return SUCCESS;
}
}
第四种方式:(由struts2的容器得到HttpRequest,HttpSession,ServletContext)
package com.oristand.actions;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction4 extends ActionSupport implements ServletRequestAware{
private HttpServletRequest request;
private HttpSession session;
private ServletContext application;
public LoginAction4(){
}
public String execute() throws Exception {
request.setAttribute("r1", "r41");
session.setAttribute("s1", "s41");
application.setAttribute("a1", "a41");
return SUCCESS;
}
public void setServletRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request = request;
session = request.getSession();
application = session.getServletContext();
}
}