您的位置:首页 > 编程语言 > Java开发

Struts2访问Servlet API的三种方式

2016-03-23 00:14 656 查看
1.利用ServletActionContext的静态方法(非IOC方式)

Struts2利用ServletActionContext类来维护Servlet对象,将Servlet对象放置在ServletActionContext中,虽然是通过静态方法获取,但仍然能够保证获取当前用户,当前线程的request,response,因为是利用ThreadLocal来维护当前线程的Servlet对象。

Action类:

public class LoginAction extends ActionSupport{
private static final long serialVersionUID = 1L;

private String userName;
private String userPassword;

public String execute(){
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession();
ServletContext context = ServletActionContext.getServletContext();

session.setAttribute("sess", "session");
request.setAttribute("req", "request");
context.setAttribute("app", "application");

return "success";
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
}


struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="main" extends="struts-default" namespace="/">
<global-results>
<result name="login">/login.jsp</result>
</global-results>

<action name="loginAction" class="com.sbw.action.LoginAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>


login.jsp

<body>
<s:form action="loginAction">
<s:textfield name="user.userName" label="用户名"/>
<s:password name="user.userPassword" label="密码"/>
<s:submit value="登录"/>
</s:form>
</body>


success.jsp

<body>
request:<s:property value="#request.req"/><br/>
session:<s:property value="#session.sess"/><br/>
application:<s:property value="#application.app"/><br/>
</body>


结果:



2.利用ActionContext的静态方法(非IOC方式)

Struts2框架提供ActionContext类来访问Servlet API

Action类:

public class LoginAction extends ActionSupport{
private static final long serialVersionUID = 1L;

private String userName;
private String userPassword;

public String execute(){
ActionContext context = ActionContext.getContext();
context.put("req","application");
context.getApplication().put("app","application");
context.getSession().put("sess","session");

return "success";
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
}


struts.xml、login.jsp、success.jsp 与方式一相同

结果:



3.相关Aware接口(IOC方式)

Struts2提供了Aware接口,实现了相关Aware接口的action能够感知相应的资源,Struts在实例化一个action时,如果发现它实现了相应的Aware接口,就会把相应的资源通过Aware接口方法注射进去,Servlet对象application,session,response,request对应的Aware接口分别为ServletContextAware,SessionAware,ServletResponseAware,ServletRequestAware。

Action类:

public class LoginAction extends ActionSupport implements ServletContextAware, ServletRequestAware,
ServletResponseAware,SessionAware{
private static final long serialVersionUID = 1L;

private String userName;
private String userPassword;

private ServletContext application;
private HttpServletRequest request;
private HttpServletResponse response;
private Map<String, Object> session;

public String execute(){
session.put("sess", "session");
request.setAttribute("req", "request");
application.setAttribute("app", "application");

return "success";
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
@Override
public void setServletContext(ServletContext application) {
// TODO Auto-generated method stub
this.application = application;
}
@Override
public void setServletRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request = request;
}
@Override
public void setServletResponse(HttpServletResponse response) {
// TODO Auto-generated method stub
this.response = response;
}
@Override
public void setSession(Map<String, Object> sessionValues) {
// TODO Auto-generated method stub
this.session = sessionValues;
}

}


struts.xml、login.jsp、success.jsp 与方式一相同

结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: