Struts2学习笔记(四)之Struts2访问Servlet API

原创 2012年03月31日 20:36:18

         Struts2框架底层是基本Servlet的,所以我们肯定要去访问Servlet API,而且开发Web应用不去访问Servlet API也是不可能的,所以我们Struts2框架提供了我们去访问Servlet API的方法;

    

        提供的访问方法如下:

        ①:使用ServletActionContext访问Servlet API;

        ②:使用ActionContext访问ServletAPI;

        ③:使用一些接口 如 ServletRequestAware,ServletResponseAware等等去直接访问Servlet API

下面开始分别的学习.


(一):使用ServletActionContext访问Servlet API

       Struts2提供了一个ServletActionContext工具类,查看API可以知道这个类是继承与ActionContext,稍后同样会讲到ActionContext去范文Servlet API



    其中主要提供了几个重要的静态方法,如下(列举常用的方法):

  • PageContext getPageContext() ,返回Web的PageContext对象
  • HttpServletRequest getRequest() ,返回HttpServletRequest对象
  • HttpServletResponse getResponse() ,返回HttpServletResponse对象
  • ServletContext getServletContext() ,返回ServletContext对象
    使用上面这些工具类,我们就可以非常简单方便去访问Servlet API,例子如下:

     ①:登陆页面和显示信息的页面关键代码:
登陆页面:
  <body>
   <form action="login"> 
                         用户名:<input type="text" name="username"><br/>
                          密码:<input type="password" name="password"><br/>
                          年龄 :<input type="text" name="age"><br/>
                        出生日期 :<input type="text" name="date"><br/>
        <input type="submit" value="登录">
  </form>
  </body>

显示信息页面:
  <body>
       <h1>用戶信息显示......</h1>
            用户名:${requestScope.username}<br/> 
            密码:${requestScope.password}<br/> 
             年龄:${requestScope.age}<br/> 
             出生日期:${requestScope.date}<br/> 
             
    ServletContext:<%=application.getAttribute("context") %><br/>
    Session:<%=session.getAttribute("session") %><br/>
  </body>
     ②:处理的Action类中的关键代码:
	@Override
	public String execute() throws Exception {
        //得到ServletContext,并且设置属性,然后在页面上面显示属性值
		ServletContext context = ServletActionContext.getServletContext();
		context.setAttribute("context", "HelloWorld,ServletContext");
		
		//得到HttpServletRequest,并且通过这个,去得到HttpSession的值,并且设置属性,同样在页面上面显示
		HttpServletRequest request=   ServletActionContext.getRequest();
		HttpSession session=  request.getSession();
		session.setAttribute("session", "HelloWorld,Session");
		//其他的就不一一举例了,用法都是差不多的,首先得到该对象,然后接下来的用法和在Servlet中的用户的用法一样
		return SUCCESS;
	}
           在上面的execute()方法中,主要是演示了,两个方法,其他的用户也差不多,留给大家吧。都是首先得到该是要使用的对象,然后用法都和Servlet中的方法都差不多的。


       (二)使用ActionContext访问ServletAPI
       如(一)所说ActionContext是ServletActionContext的父类,不过这个类是直接继承了Object类,它也同样提供了相    应的方法去访问Servlet的API,看下类的截图:

   
       查看文档,会发现这是一个线程安全的类,我们可以使用如下的代码获取ActionContext:
       ActionContext context = ActionContext.getContext();然后通过该对象去调用其中的方法。
       其中主要提供了几个重要的方法,如下(列举常用的方法,查看API发现很多方法返回Map对象):
  •  Object get(String key) :这个方法和HttpServletRequest的getAttribute(String name)相似;
  •  Map<String,Object> getParametersp() :这个方法和HttpServletRequest的getParametersMap()相似;
  •  Map<String,Object> getSession() :这返回一个Map对象,虽然不是返回的Session,但是内容是Session,可以进行使用Map对象去模拟Session
       还有一些常用的方法,大家可以去查询API,就能知道了,接下来看下最基本的用法;
    直接看Action中的关键代码:
     
	@Override
	public String execute() throws Exception {
		// 首先去获得ActionContext对象
		ActionContext context = ActionContext.getContext();
		// 去获取Session的Map模拟对象,然后设置Key-Value值,接着在页面进行显示
		Map<String, Object> map = context.getSession();
		map.put("session", "HelloWorld,ActionContext Session....");
		// 去获取Application的Map模拟对象,然后设置Key-Value值,接着在页面进行显示
		Map<String, Object> application = context.getApplication();
		application.put("application",
				"HelloWorld,ActionContext Application...");

		return SUCCESS;
	}
          还有些其他对象的用法,也同样不演示了
     显示页面的关键代码:
     Session:<%=session.getAttribute("session") %><br/>
     Application:<%=application.getAttribute("application") %><br/>

     (三)使用一些接口 如 ServletRequestAware,ServletResponseAware等等去直接访问Servlet API
使用这些接口我们可以直接在Action中访问Servlet API,Struts2提供了如下几个比较常用的接口
  • ServletRequestAware:实现这个,可以在Action中直接去访问HttpServletRequest
  • ServletResponseAware:实现这个,可以在Action中直接去访问响应的HttpServletResponse;
  • ServletContextAware:实现这个,可以去访问应用的ServletContext

      去查询API文档发现,我们自己的Action只要去实现ServletXXXAware的接口,都要实现其中的setServletXXX(XXX,xxx)方法
       例如去实现ServletRequestAware接口,就要实现其中的setServletRequest(HttpServletRequest request)方法
       
       下面进行其中的一个接口进行举例:
     Action中的关键代码如下:
   
	@Override
	public String execute() throws Exception {
		// 往HttpServletRequest实例中进行set设置值,然后在页面中进行显示...
		HttpSession session = mRequest.getSession();
		session.setAttribute("ServletRequestAware",
				"HelloWorld,ServletRequestAware.....");

//		ServletContext servletContext = mContext.getContext("servletContext");
//		servletContext
//				.setAttribute("servletContext",
//						"HelloWorld,ServletContextAware");
		return SUCCESS;
	}
	// 为了代码展现方法,把HttpServletRequest的声明放到了这里
	private HttpServletRequest mRequest;
	// 实现HttpServletRequest接口必须实现以下的方法
	public void setServletRequest(HttpServletRequest request) {
		this.mRequest = request;
	}

     
        至此,上面是自己学习Struts2访问Servlet API的小总结,有很多不到位之处,望提出可以大家一起讨论学习, 在Web开发中,作为控制器,我们如果不去访问ServletAPI是不能的,所以要去好好的掌握。当然上面的演示,是最基本的,还需深入学习,可以直接查看Struts2的文档继续学习..
         
        例子代码下载链接:http://download.csdn.net/detail/jiangqq781931404/4190773
     
版权声明:本文为博主原创文章,未经博主允许不得转载。

Struts2访问ServletAPI的三种方式,以及使用推荐对比

Action对ServletAPI的访问有两种方式,分别是间接访问和直接访问。 对于间接访问,一般推荐使用,但是只能获得request对象,而得不到response对象; 直接访问分为Ioc访问方...
  • qq_30179189
  • qq_30179189
  • 2016年07月12日 16:34
  • 1352

Struts2中访问Servlet API的几种方式

Struts2中访问Servlet API的几种方式
  • VipMao
  • VipMao
  • 2016年04月12日 12:48
  • 1760

Struts中访问Servlet对象的方式(与Servlet API解耦的访问方式)

一:与Servlet API解耦的访问方式      为降低 与Servlet API 耦合, Struts2 构造 Map 对象来替代servlet对象(包括 HttpServletRequest,...
  • BiLaHePan
  • BiLaHePan
  • 2016年03月15日 13:36
  • 1389

Struts2(二)使用Struts2访问ServletAPI对象

在前面的示例中Struts2的Action中并没有使用到ServletAPI对象,但是在实际应用中我们往往会用到ServletAPI对象,比如用户登录成功后将用户信息保存在会话中。所以为了解决这个问题...
  • qq_16313365
  • qq_16313365
  • 2015年01月02日 17:20
  • 556

struts2中Action访问servlet的两种方式

一、IoC方式                在struts2框架中,可以通过IoC方式将servlet对象注入到Action中,通常需要Action实现以下接口:        a. ...
  • leimengyuanlian
  • leimengyuanlian
  • 2014年07月26日 21:11
  • 8928

浅谈Struts2和Servlet的不同

浅谈Struts2和Servlet的不同 1.Strurs2       流程图: 在这里struts的控制器是 action, 而在servlet中servlet就是它的控制器,就相当于人的大脑...
  • zhupengqq
  • zhupengqq
  • 2016年06月25日 09:38
  • 2090

struts2和servlet共存的几种方法

项目要求struts2和servlet能够共存,就是struts的请求发给struts处理,servlet的请求发给servlet处理。目前web.xml文件应该是类似于如下的配置:  fi...
  • huilangeliuxin
  • huilangeliuxin
  • 2013年08月29日 10:32
  • 13365

Struts2和Servlet实现共存

在一个项目中,如果我们既用到了Struts2又用到了Servlet,项目运行时有可能无法正常访问Servlet 原因是在配置Struts的过滤器的时候,拦截了所有请求。 filter-mapp...
  • itmyhome
  • itmyhome
  • 2016年11月21日 22:01
  • 1098

使用struts2框架后servlet不能正常访问的解决方案

第一种方式:通过后缀过滤:   在web.xml中配置一个servlet其mapping是Hello/hi 并且在struts.xml中也声明了一个action的话出现的是在struts中的acti...
  • fygkchina
  • fygkchina
  • 2013年04月06日 17:16
  • 1378

Struts2与Servlet区别与联系

一:其中最重要的就是filter功能.它使用户可以改变一个request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到...
  • pangqiandou
  • pangqiandou
  • 2017年06月06日 18:43
  • 1130
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts2学习笔记(四)之Struts2访问Servlet API
举报原因:
原因补充:

(最多只允许输入30个字)