Struts2访问Servlet API的三种方式

来源:互联网 发布:淘宝代理利润 编辑:程序博客网 时间:2024/05/21 06:37

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 与方式一相同

结果:

这里写图片描述

0 0
原创粉丝点击