访问Servlet API

1.通过ActionContent类访问Servlet API

ActionContext中访问Servlet API的几个常用的方法:

(1)Map getApplication():

    返回模拟该应用的ServletContext实例,可以把这个Map实例就当做是ServletContext实例,首先它是Map同时他也是ServletContext实例;

(2)Map getParameters():

    获取所有请求参数;

(3)Map getSession():

    返回一个Map对象,该对象相当于HttpSession实例;

(4)setApplication(Map application):

    传入一个Map实例,将该实例的key-value对转换成application属性中的属性名和属性值;

(5)setSession(Map session):

    传入一个Map实例,将该实例的key-value对转换成session的属性名和值。

代码:

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class Test_1Action extends ActionSupport{
    //定义封装请求参数的成员变量
    private String username;
    private String password;
    //setter、getter方法
    public void setUsername(String username){
        this.username = username;
    }
    public String getUsername(){
        return this.username;
    }
    public void setPassword(String password){
        this.password = password;
    }
    public String getPassword(){
        return this.password;
    }
    //定义处理请求的execute方法
    public String execute()throws Exception{
        if(getUsername()!=null){
            //使用ActionContext的静态方法getContext获取ActionContext的实例
            ActionContext context = ActionContext.getContext();
            //通过ActionContext实例设置application范围的属性
            String name = (String)context.getApplication().get("name");
            if(name==null){
                //设置其为application范围的属性
                context.getApplication().put("name", "jiagoushi_1");
            }
            //通过ActionContext设置session范围的属性
            context.getSession().put("username", username);
            //通过ActionContext设置request范围的属性
            context.put("username", username);
            context.put("password", password);
            return SUCCESS;
        }else{
            return ERROR;
        }
    }
}

2.使用ServletActionContext工具类访问Servlet API

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

(1)PageContext getPageContext():

  取得应用的PageContext对象;

(2)HttpServletRequest getRequest():

  取得该应用的HttpServletRequest对象;

(3)HttpServletRequest getResponse():

  取得该应用的HttpServletResponse对象;

(4)ServletContext getServletContext():

  取得该应用的ServletContext对象。

代码:

import javax.servlet.http.Cookie;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class Test_1Action extends ActionSupport{
    //定义封装请求参数的成员变量
    private String username;
    private String password;
    //setter、getter方法
    public void setUsername(String username){
        this.username = username;
    }
    public String getUsername(){
        return this.username;
    }
    public void setPassword(String password){
        this.password = password;
    }
    public String getPassword(){
        return this.password;
    }
    //定义处理请求的execute方法
    public String execute()throws Exception{
        if(getUsername()!=null){
            //通过ServletActionContext获取并设置request
            ServletActionContext.getRequest().setAttribute("username", getUsername());
            //通过ServletActionContext获取response并使用response添加Cookie
            Cookie cookie = new Cookie("user", getUsername());
            cookie.setMaxAge(60*60);
            ServletActionContext.getResponse().addCookie(cookie);
            return SUCCESS;
        }else{
            return ERROR;
        }
    }
}

3.Action直接访问Servlet API

使用接口能够直接访问到Servlet API:

(1)ServletContextAware:

  实现此接口的Action可直接访问Web应用的ServletContext实例;

(2)ServletRequestAware:

  实现此接口的Action可直接访问Web应用的HttpServletRequest实例;

(3)ServletResponseAware:

  实现此接口的Action可直接访问Web应用的HttpServletResponset实例;

代码:

import javax.servlet.ServletContext;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;

import com.opensymphony.xwork2.ActionSupport;

public class Test_1Action extends ActionSupport implements
    ServletContextAware,ServletRequestAware,ServletResponseAware{
    //定义封装请求参数的成员变量
    private String username;
    private String password;
    //用到的Web应用的实例
    private ServletContext application;
    private HttpServletRequest request;
    private HttpServletResponse response;
    //setter、getter方法
    public void setUsername(String username){
        this.username = username;
    }
    public String getUsername(){
        return this.username;
    }
    public void setPassword(String password){
        this.password = password;
    }
    public String getPassword(){
        return this.password;
    }
    //定义处理请求的execute方法
    public String execute()throws Exception{
        if(getUsername()!=null){
            //直接使用Web应用的对象
            //设置application范围的属性
            if(application.getAttribute("user")==null){
                application.setAttribute("user", "jiagoushi");
            }
            //设置request范围的属性
            request.setAttribute("username", getUsername());
            request.setAttribute("password", getPassword());
            //设置response范围的属性,并添加Cookie
            Cookie cookie = new Cookie("myCookie", getUsername());
            cookie.setMaxAge(60*60);
            response.addCookie(cookie);
            return SUCCESS;
        }else{
            return ERROR;
        }
    }
    //实现ServletContextAware接口必须实现的方法
    @Override
    public void setServletContext(ServletContext application) {
        this.application = application;
    }
    //实现ServletRequestAware接口必须实现的方法
    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
    //实现ServletResponseAware接口必须实现的方法
    @Override
    public void setServletResponse(HttpServletResponse response) {
        this.response = response;
    }
}

Action访问Servlet API的更多相关文章

  1. struts2 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用

    Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDis ...

  2. struts2的action访问servlet API的三种方法

    学IT技术,就是要学习... 今天无聊看看struts2,发现struts2的action访问servlet API的三种方法: 1.Struts2提供的ActionContext类 Object g ...

  3. Struts 2读书笔记-----Action访问Servlet API

    Action访问Servlet API Struts2中的Action并没有和任何Servlet API耦合,这样框架更具灵活性,更易测试. 对于Web应用的控制器而言,不访问ServletAPI是几 ...

  4. Action访问Servlet API的三种方法

    一.为什么要访问Servlet API ? Struts2的Action并未与Servlet API进行耦合,这是Struts2 的一个改良,从而方便了单独对Action进行测试.但是对于Web控制器 ...

  5. 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用

    Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDis ...

  6. Struts2笔记--Action访问Servlet API

    Web应用中通常需要访问的Servlet API就是HttpServletRequest.HttpSession和ServletContext,这三个接口分别代表JSP内置对象中的request.se ...

  7. Struts2学习笔记(五)——Action访问Servlet API

    在Strut2中访问Servlet API有三种方式: 1.通过ActionContext访问Servlet API,推荐使用这种,但是这种方案它获取的不是真正的事Servlet API. 步骤: 1 ...

  8. 关于Struts2自动装配和访问Servlet API

    自动装配 1.根据属性的getter和setter获取值  index.jsp <s:form action="hello" method="POST"& ...

  9. Action访问Servlet的API

    Action访问Servlet的API_,主要访问如下: 1.>获取request对象 2.>获取请求参数 3.>获取response对象,可用于传递cookie 3.>获取作 ...

随机推荐

  1. 【ubuntu】首选项和应用程序命令(preference & application)

     gnome-control-center  系统设置  gnome-control-center region  键盘布局  gnome-control-center screen  屏幕  gno ...

  2. 七、Java基础---------JDK安装与配置

    配置环境变量名词说明 path:通过path系统去寻找可执行的java文件. JAVA_HOME:JDK的安装目录 classpath:加载目录 为什么需要配置path,什么时候需要classpath ...

  3. C语言初学者代码中的常见错误与瑕疵(2)

    问题: 另一种阶乘 大家都知道阶乘这个概念,举个简单的例子:5!=1*2*3*4*5. 现在我们引入一种新的阶乘概念,将原来的每个数相乘变为i不大于n的所有奇数相乘 例如:5!!=1*3*5.现在明白 ...

  4. 创建与删除SQL约束或字段约束

    1)禁止所有表约束的SQLselect 'alter table '+name+' nocheck constraint all' from sysobjects where type='U'2)删除 ...

  5. 小结 javascript中的类型检测

    先吐槽一下博客园的编辑器,太不好用了,一旦粘贴个表格进来就会卡死,每次都要用html编辑器写,不爽! 关于javascript的类型检测,早在实习的时候就应该总结,一直拖到现在,当时因为这个问题还出了 ...

  6. 解析XML的四种方式

    四种操作xml的方式: SAX, DOM, JDOM , DOM4J的比较 1. 介绍 1)DOM(JAXP Crimson解析器)         DOM是用与平台和语言无关的方式表示XML文档的官 ...

  7. split function of Perl,Python,Awk

    使用中常用到Perl,Python,AWK,R, 虽然Java,C,C++,Vala也学过但是就是不喜欢,你说怎么办. 看来一辈子脚本的命. Perl @rray = split /PATTERN/, ...

  8. 【Pro ASP.NET MVC 3 Framework】.学习笔记.11.ASP.NET MVC3的细节:概览MVC项目

    书Adam The Definitive Guide to HTML5 Adam Applied ASP.NET 4 in Context and Pro ASP.NET 4 到此为止,我们已经学了为 ...

  9. unicode转码,如:\u6d4b\u8bd5转成中文“测试”

    public static void main(String[] args) { String s = "测试"; String tt = gbEncoding(s); // St ...

  10. .Net额外小工具

    http://blog.csdn.net/zhumi/article/details/49076 用于编写单元测试的 NUnit用于创建代码文档资料的 NDoc用于生成解决方案的 NAnt用于生成代码 ...