zoukankan      html  css  js  c++  java
  • Struts2框架(4)---Action类访问servlet

    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>

      运行结果如下:

    当点击提交的时候

      

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

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

      

  • 相关阅读:
    WIFI:802.11无线LAN
    如何使你的PPT更高调
    windows的注册表有什么用?
    Steeltoe之Config客户端篇
    初探Spring Cloud Config
    .NET Core开发日志——ADO.NET与SQL Server
    .NET Core开发日志——Linux版本的SQL Server
    .NET Core开发日志——视图与页面
    .NET Core开发日志——Filter
    .NET Core开发日志——Model Binding
  • 原文地址:https://www.cnblogs.com/qdhxhz/p/6401011.html
Copyright © 2011-2022 走看看