stucts2访问web元素(jsp和servlet的九大隐式对象)

来源:互联网 发布:java redis 并发控制 编辑:程序博客网 时间:2024/06/05 00:21

struts2访问servlet,jsp九个内置对象一般常用的是requset,application,session这三个个。

访问的方式分为IOC(控制反转),中文给它形象的称呼是耦合(非IOC也是如此称呼)和非IOC(或称Dependency Injection,依赖注入)解耦合的两种方式。

方式有如下两种:

这里只针对 Servlet 中常用的,如 HttpServletRequest、HttpServletResponse 和 HttpSession 来展开。
一般来说,在 Struts2 中访问 Servlet API 的方式有2种:
(1)  直接访问 Servlet API。这将会使得你的 Action 类与 Servlet API 耦合在一起。
(2)  通过 Struts2 API 来访问 Servlet API,这样 Action 类就不会再跟 Servlet API 耦合。

 

耦合的方式:

方式1:(推荐)

通过 ServletActionContext 来访问 Servlet API ( 耦合 )

得到request对象:HttpServletRequest   request  =  SevletActionConext().getRequest();  //关键点

得到session对象:HttpSession  session =  request.getSession;//从request请求中得到session

对于想得到application对象:(这两个方式都可以)

  ServletContext application = request.getServletContext();

  ServletContext application  =  session.getServletContext();

 

 

 

方式2:

通过 ServletRequestAware、ServletResponseAware 接口来访问 Servlet API ( 耦合 )

直接在或者页面里面实现这些接口即可;

      在JSP里面,这些都是内置对象。可以不放置这些。

而在类里面设置,不过最好是用private修饰这几个对象,之后设置set 和 get方式这样就更安全一些。

      HttpSession session = null ;
     HttpServletRequest request = null  ;

     ServletContext application  = null  ;

        HttpServletResonse response = null;

这样在JSP和类里面都得到了这几个对象了。

 

 


  

 

 

 

解耦合方式:(它们都是得到的是封装类型):

通过 ActionContext 来访问 Servlet API ( 解耦 )

方式3:先为了看清楚细节,我们这样设置:

ActionContext ac = ActionContext.getContext();  //得到当前action的上下文

对于request对象,则是如下的方式:

Map request = (Map) ac.get("request"); //这里得加上request

 或这种方式HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST); 

 ActionContext.getContext().get("放入要取的类型"),它得到的是一个Object对像。下面的getSession 和getApplication都 是这样的;

或者是这样的方式:Map<String,Object> request =  (Map<String, Object>) ac.get("request");

对于session对象,则直接用

Map session = ac.getSession();

或者:

Map<String,Object> session = (Map<String, Object>) ac.getSession();

对于application对象:

Map  application = ac.getApplication();

或者是:

Map<String,Object> aplication   =(Map<String, Object>)   ac.getApplication();

一般这些封装的类型,都是定义为封装属性,之后设置set和get方法即可;

 

 

方式4:

 RequestAware、SessionAware 等接口来访问 Servlet API ( 解耦 )

 

先设置对像:

Map<String,Object> request ;

Map<String,Object> session

Map<String,Object> application;

接下来就直接set(在api里面默认就要求必须实现)和get方法(可以不用设置)。

接下来就可以设置和取值了。

 

经过上面的所有说明,解耦合方面struts2是没有为page提供任接接口的,要用的时候直接使用方式1或者方式1即可。

 

几个参考的网站:

http://www.blogjava.net/fancydeepin/archive/2014/03/17/struts-servlet.html

 
http://www.cnblogs.com/codeplus/archive/2011/08/09/2132248.html


http://www.cnblogs.com/li-peng/p/3787603.html


http://www.itzhai.com/visit-the-web-element-using-struts2-ioc-assignment-requestaware-sessionaware-applicationaware.html

 

http://waynerqiu.com/1/103.html

http://blog.csdn.net/farawayhome/article/details/6408958

 

0 0