Struts2框架(4)---Action类访问servlet

时间:2021-03-26 13:44:10

Action类访问servlet

Action类有三种方式servlet:

      (1)间接的方式访问Servlet API  ---使用ActionContext对象

      (2)  实现接口,访问Action时完成注入

      (3)直接通过ServletActionContext获得Servlet的API

下面我来讲第一种:

  (1)间接的方式访问Servlet API  ---使用ActionContext对象

   Struts2中提供了一个ActionContext类(当前Action的上下文对象),通过这个类可以访问Servlet API。下面是该类中提供的几个常用方法: 

     1.public static ActionContext getContext() :获得当前Action的ActionContext实例。
     2.public Object get(Object key) :此方法类似于调用HttpServletRequest的getAttribute(String name)方法。
     3.public void put(Object key, Object value) :此方法类似于调用HttpServletRequest 的setAttribute(String name, Object o)。 
     4. public Map getParameters() :获取所有的请求参数。类似于调用HttpServletRequest对象的getParameterMap() 方法。  
     5. public Map getSession() :返回一个Map对象,该Map对象模拟了HttpSession实例。 
     6. public void setSession(Map session) : 直接传入一个Map实例,将该Map实例里的key-value对转换成session的属性名-属性值对。 
     7. public Map getApplication() :返回一个Map对象,该对象模拟了该应用的ServletContext实例。 

     8. public void setApplication(Map application) :直接传入一个Map实例,将该Map实例里  

             的key-value对转换成application的属性名- 属性值对。 

 

 

 

 

 

 

 

 

 

 1 import java.util.Map
 2 import com.opensymphony.xwork2.ActionContext;
 3 import com.opensymphony.xwork2.ActionSupport;
 4 public class LoginAction1  extends ActionSupport{
 5  
 6     public String login() throws Exception{
 7         //获取ActionContext
 8         ActionContext actionContext =ActionContext.getContext();
 9         //1.获取表单的请求参数
10         Map<String, Object> parameters=actionContext.getParameters();
11         //因为用户名username可能有多个,所以返回数组
12         String [] values =(String[]) parameters.get("username");
13         System.out.println("用户名是:"+values[0]);
14         
15         //2.存取request 的Attribute
16         actionContext.put("company", "雨点的名字"); //相当于request.setAttribute("","");
17         System.out.println(actionContext.get("company"));
18         
19         //3.存取session 的Attribute
20         Map<String, Object> sessionMap=actionContext.getSession();
21         sessionMap.put("age", 11);//相当于session.setAttribute("","");
22         System.out.println(sessionMap.get("age"));
23         
24         //4.存取application的Attribute
25          Map<String, Object> applicationMap=actionContext.getApplication();
26          applicationMap.put("info", "下周考试第二阶段");
27          System.out.println(applicationMap.get("info"));       
28         return SUCCESS;      
29     }
30 }

 (2)  实现接口,访问Action时完成注入

   如果是实现结构注入一般需要实现3个接口

(1)ServletContextAware:      实现此接口的Action可直接访问Web应用的ServletContext实例;

(2)ServletRequestAware: 实现此接口的Action可直接访问Web应用的HttpServletRequest实例;

(3)ServletResponseAware:   实现此接口的Action可直接访问Web应用的HttpServletResponset实例

 

 

 

 

 

 1 import java.util.Map;
 2 
 3 import javax.servlet.ServletContext;
 4 import javax.servlet.ServletResponse;
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 import org.apache.struts2.interceptor.RequestAware;
 8 import org.apache.struts2.interceptor.ServletRequestAware;
 9 import org.apache.struts2.interceptor.ServletResponseAware;
10 import org.apache.struts2.util.ServletContextAware;
11 
12 import com.opensymphony.xwork2.ActionContext;
13 import com.opensymphony.xwork2.ActionSupport;
14 
15 public class LoginAction2 extends ActionSupport implements ServletRequestAware,
16      ServletContextAware,ServletResponseAware {
17    
18     private HttpServletRequest request;
19     
20     private ServletContext context;
21     
22     private HttpServletResponse response;
23     
24     public String login() throws Exception{
25         //1.获取表单的请求参数
26         System.out.println(request.getParameter("username"));
27         
28         //2.存取request 的Attribute
29         request.setAttribute("company","hzgg" );
30         
31         //3.存取session 的Attribute
32         request.getSession().setAttribute("age", 50);
33         
34         //4.存取application的Attribute
35         context.setAttribute("info", "今天下午你们可以出去玩");
36         
37         return SUCCESS;
38         
39     }
40      //实现ServletRequestAware接口必须实现的方法
41     public void setServletRequest(HttpServletRequest request) {
42         this.request=request;
43     }
44      //实现ServletContextAware接口必须实现的方法
45     public void setServletContext(ServletContext context) {
46         this.context=context;
47     }
48      //实现ServletResponseAware接口必须实现的方法
49     public void setServletResponse(HttpServletResponse response) {
50         this.response=response;
51     }
52 
53 }

   (3)使用ServletActionContext工具类访问Servlet API

  在ServletActionContext工具类中常用的几个方法(都是静态方法):

(1)PageContext getPageContext():          取得应用的PageContext对象;
(2)HttpServletRequest getRequest():       取得该应用的HttpServletRequest对象;
(3)HttpServletRequest getResponse():    取得该应用的HttpServletResponse对象;
(4)ServletContext getServletContext():   取得该应用的ServletContext对象。

 

 

 

 

 

 1 import org.apache.struts2.ServletActionContext;
 2 import com.opensymphony.xwork2.ActionSupport;
 3 
 4 public class LoginAction3 extends ActionSupport {
 5 
 6     public String login() throws Exception {
 7         // 1.获取表单的请求参数
 8        String username= ServletActionContext.getRequest().getParameter("username");
 9        System.out.println(username);
10        
11        // 2.存取request 的Attribute
12        ServletActionContext.getRequest().setAttribute("company", "haha");
13 
14         // 3.存取session 的Attribute
15        ServletActionContext.getRequest().getSession().setAttribute("age", 40);
16 
17         // 4.存取application的Attribute
18        ServletActionContext.getServletContext().setAttribute("info", "今天下课你们可以约会去了");
19 
20         return SUCCESS;
21     }
22 }

下面我来写一个用第三种方法实现访问servlet,从jsp到struts.xml在到Action类,最后从页面显示结果供大家学习:

jsp界面:

start.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
   <head>
  </head>
  <body>
    <form action="${pageContext.request.contextPath }/hello.action">
            姓名:<input type="text">
            <input type="submit" value="提交">
    </form>
  </body>
</html>

struts.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3       "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4       "http://struts.apache.org/dtds/struts-2.3.dtd">
 5    <struts>
 6       <package name="default"  extends="struts-default">
 7         <action name="hello" class="com.guigu.struts.action2.LoginAction3" method="login">
 8            <result>/result.jsp</result>
 9         </action>            
10       </package>
11  </struts>
result.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
  <head>
  </head>
  <body>
   <p>${company}</p>
   <p>${age}</p>
   <p>${info}</p>
  </body>
</html>

  运行结果如下:

Struts2框架(4)---Action类访问servlet

当点击提交的时候

  Struts2框架(4)---Action类访问servlet

发现数据已经从Action类中转发到了界面

这篇文章就讲到这里,欢迎大家指点和点评!