struts2作为一个控制层的框架,难免要与servlet接触,下面是常用的三种访问serveltAPI的方式:
- 通过ActionContext对象间接访问servletAPI
- 通过在业务控制类action实现相应的接口
- 通过ServletActionContext直接在业务控制类action里面访问
1.通过ActionContext对象间接访问servletAPI
package com.lyu.struts.sysmanage.action;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
public class LoginAction {
private String userName;
private String password;
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() {
System.out.println(userName);
System.out.println(password);
// 将用户名放入session,为将来的访问控制做准备
ActionContext.getContext().getSession().put("userName1", userName + "actionContext");
// 放入request域里面
ActionContext.getContext().put("userName2", userName + "actionContext");
// 放入application域里面
ActionContext.getContext().getApplication().put("userName3", userName + "actionContext");
// 将用户名放入cookie中
HttpServletResponse response =
(HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);
Cookie cookie = new Cookie("userName4", userName + "actionContext");
cookie.setMaxAge(24*60*60);
response.addCookie(cookie);
if (userName.equals("admin")) {
return "success";
} else {
return "fail";
}
}
}
注:之所以称之为间接访问,是因为ActionContext并不是直接调用对应的域的setAttribute( key, value )方法放入属性和值,而是通过put方法间接的调用setAttribute方法,其底层实际上还是调用的setAttribute设置属性和值。
2.通过在业务控制类action实现相应的接口
实现ServletRequestAware可以获得request域 实现ServletResponseAware可以获得response域 实现ServletContextAware可以获得Application域package com.lyu.struts.sysmanage.action;
import javax.servlet.ServletContext;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;
public class LoginSecondAction implements ServletRequestAware,
ServletResponseAware, ServletContextAware {
private String userName;
private String password;
private HttpServletRequest serveltRequest;
private HttpServletResponse serveltResponse;
private ServletContext servletContext;
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() {
System.out.println(userName);
System.out.println(password);
// 将用户名放入session,为将来的访问控制做准备
this.serveltRequest.getSession().setAttribute("userName1", userName + "aware");
// 放入request域里面
this.serveltRequest.setAttribute("userName2", userName + "aware");
// 放入application域里面
this.servletContext.setAttribute("userName3", userName + "aware");
// 将用户名放入cookie中
HttpServletResponse response = this.serveltResponse;
Cookie cookie = new Cookie("userName4", userName + "aware");
cookie.setMaxAge(24*60*60);
response.addCookie(cookie);
if (userName.equals("admin")) {
return "success";
} else {
return "fail";
}
}
@Override
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
@Override
public void setServletResponse(HttpServletResponse serveltResponse) {
this.serveltResponse = serveltResponse;
}
@Override
public void setServletRequest(HttpServletRequest serveltRequest) {
this.serveltRequest = serveltRequest;
}
}
3.通过ServletActionContext直接在业务控制类action里面访问
直接调用setAttribute方法设置属性和值。
package com.lyu.struts.sysmanage.action;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
public class LoginThirdAction {
private String userName;
private String password;
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() {
System.out.println(userName);
System.out.println(password);
// 将用户名放入session,为将来的访问控制做准备
ServletActionContext.getRequest().getSession().setAttribute("userName1", userName + "ServletActionContext");
// 放入request域里面
ServletActionContext.getRequest().setAttribute("userName2", userName + "ServletActionContext");
// 放入application域里面
ServletActionContext.getServletContext().setAttribute("userName3", userName + "ServletActionContext");
// 将用户名放入cookie中
HttpServletResponse response = ServletActionContext.getResponse();
Cookie cookie = new Cookie("userName4", userName + "ServletActionContext");
cookie.setMaxAge(24*60*60);
response.addCookie(cookie);
if (userName.equals("admin")) {
return "success";
} else {
return "fail";
}
}
}