5.struts2中Action类中获取ServletAPI的三种方法

时间:2021-11-16 04:57:41

**Servlet的API的访谒(开发中偶尔会使用到)** 1.在Action类中也可以获取到Servlet一些常用的API,有如下三种方法获取 * 完全解耦合的方法 * 使用接口注入的方法 * 使用ServletActionContext中静态要领直接访谒Servlet的API * 需求:供给JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后生存到三个域东西中,最后再显示到JSP的页面上。 * 供给JSP注册的页面,演示下面这三种方法: <h3>注书页面</h3> <form action="${ pageContext.request.contextPath }/xxx.action" method="post"> 姓名:<input type="text" /><br/> 暗码:<input type="password" /><br/> <input type="submit" value="注册" /> </form> 2.完全解耦合的方法 * 如果使用该种方法,Struts2框架*给了一个类,,ActionContext类,该类*给一些要领,通过要领获取Servlet的API * 一些常用的要领如下: * static ActionContext getContext() -- 获取ActionContext东西实例 * java.util.Map<java.lang.String,java.lang.Object> getParameters() -- 获取请求参数,相当于request.getParameterMap(); * java.util.Map<java.lang.String,java.lang.Object> getSession() -- 获取的代表session域的Map调集,就相当于操纵session域。 * java.util.Map<java.lang.String,java.lang.Object> getApplication() -- 获代替表application域的Map调集 * void put(java.lang.String key, java.lang.Object value) -- 注意:向request域中存入值。 * 完成代码的测试 3.使用接口注入的方法 * Struts2框架*给了一些接口,编写的Action类可以是去实现这些接口,然后实现这些接口中的要领,这些要领都是把一些Servlet的常用东西通过参数的方法通报进来。 * 常用的接口如下: * ServletRequestAware -- 注入request * ServletContextAware -- 注入ServletContext * ServletResponseAware -- 注入response. 4.使用ServletActionContext中静态要领直接访谒Servlet的API * Struts2框架供给了一个类,ServletActionContext,该类*给了一些静态的要领 * 具体的要领如下 * getPageContext(); * getRequest() * getResponse(); * getServletContext();

demo4.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h3>注书页面(完全解耦合的方法)</h3> <form action="${ pageContext.request.contextPath }/regist.action" method="post"> 姓名:<input type="text" /><br/> 暗码:<input type="password" /><br/> <input type="submit" value="注册" /> </form> <h3>注书页面(接口注入的方法)</h3> <form action="${ pageContext.request.contextPath }/regist2.action" method="post"> 姓名:<input type="text" /><br/> 暗码:<input type="password" /><br/> <input type="submit" value="注册" /> </form> <h3>通过ServletActionContext东西的方法</h3> <form action="${ pageContext.request.contextPath }/regist3.action" method="post"> 姓名:<input type="text" /><br/> 暗码:<input type="password" /><br/> <input type="submit" value="注册" /> </form> </body> </html>

struts_demo4.xml:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package extends="struts-default" namespace="http://www.mamicode.com/"> <!-- 完全解耦合的方法 --> <action method="regist"> <result>/demo4/success.jsp</result> </action> <!-- 接口注入的方法 --> <action method="regist"> <result>/demo4/success.jsp</result> </action> <!-- 使用ServletActionContext东西的方法 --> <action method="regist"> <result>/demo4/success.jsp</result> </action> </package> </struts>

Action:

package demo4; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; /** * 完全解耦合的方法 * @author mjl * */ public class UserAction extends ActionSupport{ public String regist(){ //接收表单的数据 //先获取到ActionContext东西 ActionContext context=ActionContext.getContext(); //获取请求的参数 Map<String, Object> map = context.getParameters(); //通过Key获取值 String[] username=(String[]) map.get("username"); String[] password=(String[]) map.get("password"); System.out.println("用户名:"+username[0]+",暗码:"+password[0]); //获取session Map<String, Object> sessionMap = context.getSession(); //像该map存入具体的值 sessionMap.put("sessName", "美美"); return SUCCESS; } } package demo4; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.interceptor.ServletRequestAware; import com.opensymphony.xwork2.ActionSupport; public class UserAction2 extends ActionSupport implements ServletRequestAware{ private HttpServletRequest request; public void setServletRequest(HttpServletRequest request) { this.request=request; } public String regist(){ String username=request.getParameter("username"); request.getSession().setAttribute("sessName", username); return SUCCESS; } } package demo4; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; /** * 给与servletActionContext东西的要领 * @author mjl * */ public class UserAction3 extends ActionSupport{ public String regist(){ HttpServletRequest request = ServletActionContext.getRequest(); String username=request.getParameter("username"); request.getSession().setAttribute("sessName", username); return SUCCESS; } }