1,Action访问ActionContext的方式:(request session application)
Struts2中的Action与Servlet API完全分离,但是在实现业务逻辑处理是,经常需要访问Servlet中的一些对象,如request,session,application等,struts2提供ActionContext类,在Action中通过该类获取Servlet中的参数
创建ActionContext实例的方法如下:
ActionContext ac=ActionContext.getContext();
常用的方法如下:
1,Object get(Object key);//在ActionContext中查找key值
2,Map getAppliCation();//返回一个application 对象,相当于jsp的application对象
3,static ActionContext getContext()//获取当前线程的ActionContext对象
4,Map getParameter()//返回一个Map类型所有HttpServletRequest 相当于jsp中的request对象
5,Map getsession()//返回Map类型的HttpSession值,相当于jsp中的session对象
6,void put(Object key,Object value)//向当前的ActionContext存入值
7,void setApplication( Map application)//设置application对象的上下文
8,void setSession(Map session)//设置session的值
package login;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private String userName;
private String password;//属性要与jsp显示组件的那么值相同
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 String execute(){
if(getUserName().equals("QQ")&&getPassword().equals("123")){
//获取ActionContext
ActionContext ac=ActionContext.getContext();
//把登录名放进application中
ac.getApplication().put("useName",getUserName());
//吧登录名放进session中
ac.getSession().put("userName", getUserName());
return SUCCESS;
}
else{
return INPUT;
}
}
}
2,Action直接访问Servlet.(request response session)
在struts2中通过IoC的方式把servlet对象注入到Action中,需要在Action中实现以下接口:
(1),ServletRequestAware:实现该接口的Action可以直接访问request对象,该接口中提供void setServletRequest(HttpServletRequest request);
(2),ServletResponseAware:实现该接口的Action可以直接访问response对象,该接口中提供void setServletResponse(HttpServletResponse response);
(3),SessionAware:实现该接口的Action可以直接访问session对象,该接口中提供void setSession(Map session);
package login;
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 LoginAction extends ActionSupport implements ServletRequestAware{
/**
*
*/
private static final long serialVersionUID = 1L;
private String userName;
private String password;//属性要与jsp显示组件的那么值相同
private HttpServletRequest 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;
}
@Override
public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
request=arg0;//实现该方法赋值
}
public String execute(){
if(getUserName().equals("QQ")&&getPassword().equals("123")){
//通过request对象获取session对象
HttpSession session=request.getSession();
//把用户名放入session中
session.setAttribute("userName", getUserName());
return SUCCESS;
}
else{
return INPUT;
}
}
}
3,非IOC的方式,辅助类ServletActionContext帮助获得servlet.
常用方法:
<span style="font-size:24px;">static getRequest();//获取request对象
static getResponse();//获取response对象</span>
<span style="font-size:24px;">import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private String userName;
private String password;//属性要与jsp显示组件的那么值相同
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 String execute(){
if(getUserName().equals("QQ")&&getPassword().equals("123")){
//调用ServletActionContext的getRequest方法获得request对象
HttpServletRequest request=ServletActionContext.getRequest();
//通过request对象获取session对象
HttpSession session=request.getSession();
//把用户名放入session中
session.setAttribute("userName", getUserName());
return SUCCESS;
}
else{
return INPUT;
}
}
}</span>