Struts2访问Servlet API的三种方式
2016-03-23 00:14
656 查看
1.利用ServletActionContext的静态方法(非IOC方式)
Struts2利用ServletActionContext类来维护Servlet对象,将Servlet对象放置在ServletActionContext中,虽然是通过静态方法获取,但仍然能够保证获取当前用户,当前线程的request,response,因为是利用ThreadLocal来维护当前线程的Servlet对象。
Action类:
struts.xml:
login.jsp
success.jsp
结果:
2.利用ActionContext的静态方法(非IOC方式)
Struts2框架提供ActionContext类来访问Servlet API
Action类:
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类:
struts.xml、login.jsp、success.jsp 与方式一相同
结果:
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 与方式一相同
结果:
相关文章推荐
- 解决Spring Boot OTS parsing error: Failed to convert WOFF 2.0
- 一篇很有用的文章:java就业指导
- Java学习总结
- WebService基本入门(基于jdk自带的jax-ws)
- java中String类型变量的赋值问题介绍
- Spring中@Async用法总结
- java使用嵌套三目表达式进行嵌套HashMap赋值
- CoordinatorLayou eclipse中使用出现的问题
- Java数据类型和MySql数据类型对应表
- 【轉】JAVA中isEmpty和null以及""的区别
- how to declare eclipse project for gradle android
- BigDecimal的使用
- Java就业指导
- 使用Java VisualVM监控远程JVM
- 《小平工作日志》Java 中 Enum 枚举类型使用大全
- maven struts--Could not find action or result的解决方案
- 本公司求购一套进销存系统(java版)
- Spring的IOC和AOP
- Java基础复习-----集合Vector
- Java基础-----集合工具类Collections