在Action 中访问web资源

1、什么是web资源:

  HttpServletRequest,HttpSession,ServletContext等原生的Servlet API.

2、为什么要访问web资源?

  B/S应用的Controller 中必然需要访问web资源:如域对象中读写属性,读取Cookie,获取realPath...

3、如何访问?

  1、和Servlet API 解耦的方式:只能访问有限的Servlet API 对象,且只能访问有限的方法(读取请求的参数,读写域对象的属性,使Session对象失效等等)

    -->使用ActionContext:为了避免与Servlet API 耦合在一起,方便Action 做单元测试,Struts2对HttpServletRequest,HttpSession和ServletContext进行了封装,构造了三个Map对象来替代者三个对象,在Action中可以直接使用HttpServletRequest,HttpServletSession,ServletContext对应的Map对象来保存和读取数据。

      ActionContext是Action执行的上下文对象,在ActionConetxt中保存了Action执行所需要的所有对象,包括        parameters,request,session,application等等

      获取HttpSession对应的Map对象:--public Map getSession()

      获取ServletContext对应的Map对象:--public Map getApplication()

      获取请求参数对应的Map对象:--public Map getParameters()

     获取HttpServletRequest对应的Map对象:--publiic Object get(Object  Key):ActionContext类中没有提供类似getRequest()这样的方法来获取HttpServletRequest对应的Map对象。要得到HttpServletRequest对应的Map对象,可以通过get()方法 传递参数request的方法来实现。键:请求参数的名称,值:请求参数的值对应的字符串数组

     值得注意的是   1、getParameters 的返回值为在Map<String,Object>,而不是Map<String,String[]>

            2、parameters 这个Map只能读,而不能写入。如果写入,不会出错,但是也不起任何作用

    -->实现XxxAware接口:通过依赖注入的方式,实现对应的API的访问。实现AppcationAware接口,然后实现接口的方法后,就可以在Action中使用Appcation对应的Map对象了。其他的Aware接口还有ParametersAware、RequestAware、SessionAware等等接口

    --> 选用建议:如果在Action类中有多个Action方法使用了域对象的Map或Parameter,则推荐使用通过实现XxxAware接口的方式

    --> Session对应的Map 实际上是SessionMap类型的。强转后若调用其invalidate(),可以使其失效

  2、和Servlet API 耦合的方式:可以访问更多的Servlet API 对象,且可以调用其原生的方法。直接访问Serlvet API 将使Action和Servlet环境耦合在一起,测试时需要有Serlvet容器。不便于对于Action的单元测试

    -->使用ServletActionContext:

        1、直接获取HttpServletRequest对象:--ServletActionContext.getRquest()

        2、直接获取ServletSession对象: -- servletActionContext.getRequest().getSeesion()

        3、直接获取ServletContext对象:--servletActionContext.getServletContext()  

    -->实现ServletXxxAware接口:通过实现ServletRequestAware,ServletContextAware等接口的方式

  3、既然可以有非耦合的方式可以访问 Servlet API 了,为什么还需要耦合的方式来访问Serlvet API 呢?--因为,非耦合的方式只能访问Map,有时候需要访问原生的API,比如getRealPath(),这个方法只能通过访问原生的Servlet API 才能使用这个方法。

4、关于Struts2请求的扩展名问题

  1、org.apache.struts2包下得default.properties中配置了Struts2应用中的一些常量;

  2、sturts.action.extension 定义了当前struts2应用可以接受请求的扩展名。

  3、可以在strust.xml 文件中以常量配置的方式修改 default.properties 所配置的常量。如:

  <constant name="struts.action.extension" value="action,do,"></constant>  这样的配置,可以将当前strust2应用的扩展名修改为可以接受以 .action,.do和没有后缀的所有请求。

5、在手工完成字段的验证,显示错误信息,国际化等情况下,推荐继承 ActionSupport

  

时间: 2024-10-11 16:43:46

在Action 中访问web资源的相关文章

Struts2:在 Action 中访问 WEB 资源

1.什么是 WEB 资源? HttpServletRequest.HttpSession.ServletContext 等原生的 Servlet API. 2.为什么访问 WEB 资源? B/S 的应用的 Controller 中必然需要访问 WEB 资源(向域对象中读写属性.读写Cookie.获取 realPath 等) 3.如何访问? 1).和Servlet API 解耦的方式:只能访问有限的 Servlet API 对象,且只能访问有限的方法.(使用 ActionContext .实现 X

Struts2(四):在Action中如何访问Web资源

1.什么WEB资源? HttpServletRequest,HttpServletRespone,HttpApplication,ServletContext,HttpSession等原生ServletAPI. 2.在Struts2中为什么要访问WEB资源? B/S应用中的Controller必然会有场景需要访问WEB资源:向域对象中读写属性,读取Cookie,获取realPath等. 3.在Struts2中如何访问WEB资源? a)和ServletAPI解耦的方式:只能有限的ServletAP

Struts2学习第三课 访问Web资源

1.什么是WEB资源? HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么访问WEB资源? B/S的应用的Controller中必然需要访问WEB资源,例如,向域对象中读写属性,读写Cookie,获取realPath等等. 3.如何访问? 在Action中,可以通过一下方式访问web的HttpSession,HttpServletRequest,HttpServletResponse等资源 与Servlet AP

JSP中的内置对象和Struts中的Web资源的详解

JSP中的内置对象有如下几种: request :继承于HttpServletRequest, HttpServletRequest继承ServletRequest, 获得的Request对象的方法:只能在Servlet中获取的doGet()和doPost()方法中获取 作用:封装用户请求信息 response   : 继承于HttpServletResponse,   HttpServletResponse继承ServletResponse 获得response对象的方法:只能在Servlet

6、访问web资源

1.什么是web资源? HttpServletRequest.HttpSession.ServletContext等原生servlet API 2.为什么访问web资源? B\S 的应用中Controller中必然要访问web资源:向域对象中读写属性,读写cookie.读写realPath..... 3.如何访问? ①和Servlet API解耦的方式:只能访问有限的servlet API 对象,且只能访问其有限的对象方法(读取请求参数.读取域对象的属性.使session失效) >使用Actio

尚硅谷公开课--struts2--3--struts2中获取web资源的几种方式

在struts2中,可以在JavaBean类中写公用的返回值为String类型的方法来响应页面上的请求,也可以在此方法中获取web资源,如:request,application,session,parameters等. 一.通过ActionContext获取 步骤: 1.获取ActionContext对象 通过ActionContext.getContext()获取一个ActionContext的实例 2.获取web资源对应胡Map 此Map类型为Map<String,Object>.获取方

Struts2中访问web元素的四种方式

Struts2中访问web元素的四种方式如下: 通过ActionContext来访问Map类型的request.session.application对象. 通过实现RequestAware.SessionAware.ApplicationAware接口来访问Map类型的request.session.application对象(IoC方式). 通过ServletActionContext来访问Servlet API类型的HttpServletRequest. HttpSession. Serv

Struts2中访问web元素

有很多时候我们都需要访问web元素,比如说用户管理系统,用户登录成功了需要往session中放置一个值,然后要在前台拿到这个值,常用的web元素包括request.session和application等. Struts2中有四种方式可以访问到web元素: 1.通过ActionContext来访问Map类型的request.session.application对象. 2.通过实现RequestAware.SessionAware.ApplicationAware接口来访问Map类型的reque

Struts2的Action中访问servletAPI方式

struts2的数据存放中心为ActionContext,其是每次请求来时都会创建一个ActionContext,访问结束销毁,其绑定在ThreadLocal上,由于每次访问web容器都会为每次请求创建一个独立的线程ThreadLocal,而ActionContext绑定在ThreadLocal上,所以各个ActionContext是相互独立和安全的,在ActionContext中还持有其他的域对象引用,如application,session等,ActionContext销毁时只销毁自己内部创