Struts2学习笔记-1
struts2学习笔记(部分)

1、namespaece(最好用模块的名字命名)Namespace 为空时,用于处理其他package不能处理的全部的action2、Package 用于区分重名的情况3、copy项目的方法及注意事项修改它的启动项引入别人的项目的方法4、action4`1修改文件的默认编码4`2每次访问action都重新new出一个新的对象,不存在同步的问题执行过程4`3Action 继承ActionSupport5、路径:获取系统绝对路径<% String context = request.getContextPath(); %><%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>使用绝对路径6、ActionMethod动态调用方法7、ActionWildcard通配符使用通配符,将配置量减到最低约定优于配置8、数值传递ActionAttrParamInputDomainModelDrivenModel过程9、中文问题 2.1.6.的bug不能解决中文问题10、11、value stack值栈< s:property value=“Name”/>取值栈中的数值如:< s:property value=“error”/>< s:property value=“[0]Propertyvalue是一个map,name就是key name is error 就是value 13、访问页面元素访问Stack Context中的元素14、include,模块包含15、认Action (好处:访问不存在时自动跳转带默认页)Default-action-ref默认action引用16、result类型1)默认是dispatcher 常用服务器端跳转2)Rdiect 只能是视图不能是action 客户端跳转,最后显示jsp3)Chain ---forwordaction action前不可以加”/”action之间的跳转,最后显示action4)RedirectAction action跳转,最后显示jsp服务器断的跳转:17、Global_ResultExtends =“要继承的包名“Result name属性:18、取value stack中的值动态绑定的。
Struts2学习笔记

Struts2项目的构建与配置1.配置struts.xml(1)配置struts.xml可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的参考项目的struts.xml文件。
(2)主要的配置如下:<constant name="struts.devMode"value="true"/><package name="hello"namespace="/"extends="struts-default"><action name="hello"><result>/hello.jsp</result></action></package><constant name="struts.devMode"value="true"/> value="true"表示是开发模式,当修改了配置时服务器会自动加载修改后的配置,不需要中期服务器,方便开发。
(3)namespace="/"与浏览器的访问地址有关,namespace的默认值为空。
(4)<action name="hello"><result>/hello.jsp</result></action> action的name值与浏览器的访问地址有关,当地址是“http://…/hello”时,浏览器就会返回result中的hello.jsp 的页面。
2.配置web.xml(1)配置web.xml也可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的参考项目的web.xml文件(2)主要配置如下:<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>3.配置Struts2的jar包(1)复制下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的参考项目的WEB-INF\lib文件夹下的所有的jar包到我们自己项目的WEB-INF\lib文件夹下即可。
struts2课堂笔录_详细版1

常用的MVC框架目前常用的MVC框架,除了Struts 2的两个前身外,还有一些非常流行的MVC框架,这些框架都提供了较好的层次分隔能力。
在实现良好的MVC 分隔的基础上,还提供一些辅助类库,帮助应用的开发。
目前常用的MVC框架还有如下一些。
1.JSF准确地说,JSF是一个标准,而不是一个产品。
目前,JSF已经有两个实现产品可供选择,包含Sun的参考实现和Apache的MyFaces。
大部分的时候,我们所说的JSF都是指Sun的参考实现。
目前,JSF是作为JEE 5.0的一个组成部分,与JEE 5.0一起发布。
JSF的行为方法在POJO中实现,JSF的Managed Bean无需继承任何特别的类。
因此,无需在表单和模型对象之间实现多余的控制器层。
JSF中没有控制器对象,控制器行为通过模型对象实现。
当然,JSF也允许生成独立的控制器对象。
在Struts 1中,Form Bean包含数据,Action Bean包含业务逻辑,二者无法融合在一起。
在JSF中,既可以将二者分开,也可以合并在一个对象中,提供更多灵活的选择。
JSF的事件框架可以细化到表单中每个字段。
JSF依然是基于JSP/Servlet的,仍然是JSP/Servlet 架构,因而学习曲线相对简单。
在实际使用过程中,JSF也会存在一些不足:—作为新兴的MVC框架,用户相对较少,相关资源也不是非常丰富。
—JSF并不是一个完全组件化的框架,它依然是基于JSP/Servlet架构的。
—JSF的成熟度还有待进一步提高。
2.TapestryTapestry并不是一种单纯的MVC框架,它更像MVC框架和模板技术的结合,它不仅包含了前端的MVC框架,还包含了一种视图层的模板技术,使用Tapestry完全可以与Servlet/JSP API分离,是一种非常优秀的设计。
通过使用Tapestry,开发者完全不需要使用JSP技术,用户只需要使用Tapestry提供的模板技术即可,Tapestry实现了视图逻辑和业务逻辑的彻底分离。
struts2学习笔记

1.包头的设置name是struts的包,与Java的包名效果类似,但不是按项目中SRC中包名设置的。
namescape是该包的命名空间。
将作为访问该报Action的路径的一部分。
默认命名空间为namescape=””;假设form 表单提交给helloworld的action ,其action=”/test/helloworld”exctends是表示该包继承的其他包struts_default是任何包都必须继承的包。
否则无法使用struts的核心功能,比如参数上传到action,文件上传,数据校验等。
abstract=”true”定义为抽象包,不得包含Action。
2.action的查找顺序(1)寻找namespace为path1/path2/path3/的包,有这个包:寻找test的Action有这个action:执行没有这个action:寻找namespace为””的命名空间(默认命名空间)是否有这action,没有的话提示找不到action没有这个包:寻找namespace为path1/path2/的包重复(1)步骤。
3.action的默认属性4.Action中各种result的转发类型dispatcher(默认类型)redirect(重定向)redirectAction (重定向到新的Action)plainText (显示原始文件内容)result转发还可包含参数,该参数取自Action中的属性。
例:<action name=”login” class=”xxxx.xxx.xxx.sdsds”><result name=”sucess”> /aaa.jsp?username=${ssss}</result></action>其中ssss是login这个Action中所必须具有的属性redirect书写格式1.<result name=”sucess” type=”redirectAction”>login</result>该写法只能访问位于同一包中的Action;2. <result name=”sucess” type=”redirectAction”><parma name=”actionname”>login</parama><parma name=”namespace”>/xxxxx</parama></result>该写法可访问位于其他包的ActionplainText书写格式1.<result type=”plainText”>/login.jsp</result>2. <result type=” plainText”><parma name=”location”>/login.jsp</parama><parma name=”charSet”>UTF-8</parama></result>全局转发只能在包内定义全局转发。
struts2笔记1

1)创建struts_12)在webContent下创建index.jsp;在WEB-INF下创建pages文件夹,在pages文件夹下创建input.jsp,details.jsp3)Index.jsp下代码<a href="product-input.action">product-input</a>Input.jsp下代码:<form action="product-save.action"method="post">ProductName:<input type="text"name="productName"/><br><br>ProductDesc:<input type="text"name="productDesc"/><br><br>ProductPrice:<input type="text"name="productPrice"/><br><br><input type="submit"name="submit"/><br><br></form>details.jsp下代码:ProductId:${requestScope.product.productId}<br><br>ProductName:${requestScope.product.productName}<br><br>ProductDescc:${requestScope.product.productDesc}<br><br>ProductPrice:${requestScope.product.productPrice}<br><br>3)创建FilterFilter代码publicvoid doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {// 1.获取ServletPath//2.判断ServletPath,若等于"/product-input.action",则转发到///WEB-INF/pages/input.jspHttpServletRequest req=(HttpServletRequest)request;String servletPath=req.getServletPath();String path=null;if("/product-input.action".equals(servletPath)){path="/WEB-INF/pages/input.jsp";}//3.若等于"/product-save.action",则if("/product-save.action".equals(servletPath)){//1.获取请求参数String productName=request.getParameter("productName");String productDesc=request.getParameter("productDesc");String productPrice=request.getParameter("productPrice");//2.把请求信息封装为一个Product对象Product product = newProduct(null,productName,productDesc,Double.parseDouble(productPrice));//3)执行保存操作System.out.println("save product:"+product);product.setProductId(1001);//4)把Product对象保存到request中。
Struts2第一天课堂笔记

一、框架概述1、框架的意义与作用:所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的经历放到业务需求的分析和理解上面。
特点:封装了很多细节,程序员在使用的时候会非常简单。
2、三大框架:Struts2,Hibernate,Spring3、学好框架:由于框架中细节很多,知识点比较零散,课后总结和做好笔记就变得尤为重要。
二、关于三层架构三、控制器:MVC中的控制器1、MVC回顾M:Model 模型,封装数据。
javabeanV:view 视图,展示界面。
jspC:Controller 控制器,控制程序流程。
Servlet2、Servlet和FilterServlet:Filter:总结:Servlet能做的事情,过滤器也可以做到。
并且过滤器比Servlet还多了一个放行的功能,因此过滤器比Servlet功能更为强大。
结论就是:过滤器同样也适合做控制器。
四、案例中的问题规律:1、获取请求正文,用户要做什么事情2、根据不同的请求,做出不同的判断3、执行具体的方法代码(动作)4、转向页面,展示给用户缺陷:1、重复性劳动太多,具体的执行代码也有冗余代码。
2、到底要做什么全是硬编码,像用户要做什么事情,对应执行什么代码,可以写在配置文件中。
3、具体的代码方法放到了控制器中,过于臃肿。
五、Struts2简介1、Struts2概述Struts2是Apache发行的MVC开源框架。
注意:它只是表现层(MVC)框架。
2、Struts2的来历Struts1:也是apache开发的一套mvc的开源框架。
在2005年之前非常流行。
弊端:Struts1的核心控制器就是一个Servlet。
随着使用者的增多,弊端开始出现。
Struts2:在long long ago,有一个设计超前的框架XWork,后来推出了XWork1和WebWork2。
Struts2就是apache和OpenSymphony 组织合并开发出来。
Struts2 学习笔记
Struts2 学习笔记---wjt276 [二○一○年一月五日完]目录01 Struts2-Action (5)一、Struts作用: (5)二、搭建Struts2的运行环境: (5)三、Namespace (6)四、<package>标签 (6)五、Action (6)六、路径问题的说明 (8)七、Action的动态调用方法 (8)八、Action通配符(wildcard)的配置 (9)九、Action的属性接收参数 (10)1、在Action添加成员属性接受参数 (10)2、域模型(Domain Model) (10)3、ModelDriven接收参数 (11)十、Action属性接收参数中文问题 (12)十一、简单数据验证 (12)十二、访问Web元素 (15)一、方法一:ActionContext方式 (15)二、方式二:Ioc(控制反转)—推荐使用 (16)三、方式三:获取原类型 (16)四、方式四:获取原类型-控制反转 (17)十三、Struts2配置文件模块化包含(include) (17)十四、默认的Action (18)十五、Action总结 (18)02 Struts2-Result (20)一、Result类型 (type) (20)二、全局结果集(Globle Result) (21)三、动态的结果集(dynamic result) (22)四、带参数的结果集 (22)五、Result总结 (23)六、项目经理: (23)03 OGNL表达式语言 (24)04 Struts2-Tags (29)Struts2标签目录 (29)一、property标签 (29)二、set标签 (30)三、bean标签 (30)四、<include>标签-少使用 (31)五、If elseif else (31)六、Iterator标签 (32)七、Theme (33)05设计约定(编码规定) (33)06 项目开发顺序 (33)07 声明式异常处理 (35)08 国际化 (37)Struts学习笔记第3页共41页一、国际化资源文件 (37)二、Java国际化 (37)三、Struts2国际化 (37)1、Action级别 (37)2、Package级别 (38)3、Application级别 (38)四、资源文件中的参数处理 (39)五、国际化-动态语言切换 (39)09 自定义拦截器 (40)10 类型转换 (40)Struts2总结 (41)目录Action⏹简单数据校验Result常用配置文件OGNL & ValueStackTags---------------------Project⏹类型转换、上传与下载、interceptor、防止重复提交 MVC思想深入剖析源码解读其他话题01 Struts2-Action一、Struts作用:将请求与结果分开二、搭建Struts2的运行环境:1、建立Web项目;2、建立Struts2的配置文件(struts.xml);将Struts2的空项目中的配置文件(struts.xml)复制到项目的src目录下。
Struts2课堂笔记1
一:框架是一组用于解决特定问题的类和接口的集合,通俗的讲,就是某种应用的半成品,供开发者完成自己的系统,在日常的开发过程中使用成熟的框架,就相当于让别人完成一些基础性的工作,框架一般是成熟的,稳定的,扩展性良好随着Web开发技术的日益成熟,在Web领略出现了一些成熟的优秀的框架,开发者可以直接使用它们,例如:Struts2就是一个开源的,基于MVC的优秀Web应用框架二:struts2简介:Struts 2是Struts的下一代产品,是在struts 和WebWork的技术基础上进行了合并的全新的Struts 2框架。
其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2只有很小的变化。
三:struts2执行流程一个请求在Struts2框架中的处理大概分为以下几个步骤1) 客户端初始化一个指向Servlet容器(例如Tomcat)的请求2) 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)3) 接着StrutsPrepareAndExecuteFilter被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action。
4) 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。
5) ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类。
struts2学习笔记
7. Struts1 的配置文件只需 struts-config.xml;Struts2 的配置文件有 struts.xml 和 struts.properties。struts.properties 中有两个 struts.devMode = fase 和 struts.configuration.xml.reload = true 很可爱,分别设置当前是开发还是生产模式,以及 struts.xml 改变后是否自动重新加载,免去了改配置手工重启应用的必须步骤。
Struts2 学习笔记(四)
1. 按这个顺序加载 Struts2 的常量,struts-default.xml、struts-plugin.xml、struts.xml、web.xml;后加载的会覆盖前面的同名常量。强烈不推荐在 web.xml 中配置 Struts2 常量。
2. Struts1 中有一种 Action 类型是 ForwardAction,而在 Struts2 中相应的配置方式是 <action name="Showcase"><result>/showcase.jsp</result></action>,Showcase.action 直接映射到 /showcase.jsp。
3. Struts1 的 Action 须继承抽象 Action 类,侵入了 Servlet API;而 Struts2 的 Action 可以实现 ActionSupport,或者只要一个纯净的 POJO 来充当,完全与 Servlet 绝缘。也因此带来测试性 Struts2 要比 Struts1 强,可把 Struts TestCase 扔到一旁去了。
Struts2学习笔记
</action>
</package>
要访问other()方法,可以通过这样的URL访问:/test/helloworld_other.action
9.OGNL
Struts2将应用范围里的数据以及Action处理的数据都存储在一个区域里。在Struts2中叫做值栈,valueStack。
OGNL就是从值栈中取出自己数据,并在某些条件下进行数据过滤和计算的表达式语言。先入后出。
OGNL中如果搜索的数据不是值栈里存储的数据,而是其他对象,特别是Struts2的ActionContext中的对象,则在访问
这些对象的时候,前面要加上“#”。
价格小于50元的建材
<s:iterator value="materials.{?#this.mainbid<50}">
<s:property value="materialName" />建材的价格是<s:property value="materialValue" />元!
</result>
当多个action中都使用到了相同视图,这时我们应该把result定义为全局视图。struts1中提供了全局forward,struts2中也提供了相似功能:
<package ....>
<global-results>
<result name="message">/message.jsp</result>
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Struts学习1.1一、Struts的流程,简单入门例子a)创建工程b)导入jar包c)编写JSP页面d)创建Actione)配置Struts.xmlf)配置过滤器g)运行二、导入jar包a)struts2-core-2.3.1.1.jar-----Struts的核心包b)xwork-core-2.3.1.1.jar-----Command模式框架c)ognl-3.0.3.jar-----对象图导航语言(Object Graph NavigationLanguage), struts2框架通过其读写对象的属性d)freemarker-2.3.18.jar-----Struts 2的UI标签的模板使用FreeMarker编写e)commons-logging-1.1.1.jar-----ASF出品的日志包,Struts 2框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录f)commons-io-2.0.1.jar-----文件上传包g)commons-fileupload-1.2.2.jar-----文件上传包h)commons-lang-2.5.jar对ng包的增强i)asm-3.3.jar:提供了字节码的读写的功能,包含了核心的功能,而其他的jar,都是基于这个核心的扩展j)asm-commons-3.3.jar: 提供了基于事件的表现形式k)asm-tree-3.3.jar: 提供了基于对象的表现形式l)javassist-3.11.0.GA.jar:代码生成工具, struts2用它在运行时扩展Java类三、创建JSP页面a)<a href="${pageContext.request.contextPath}/primer/helloWorldAction">超级链接</a>b)其中${pageContext.request.contextPath}EL表达式,获取到当前工程的根目录c)/primer:包名,与Struts.xml配置包时的namespace的值相同d)helloWorldAction:Action名称,与Struts.xml配置Action时的name值相同四、创建Actiona)必须实现Action接口,但是Struts提供了一个写好的类ActionSupport,该类已经实现Action接口,所以我们可以在该类上扩展一些更复杂的功能和逻辑五、编写Struts的配置文件a)如图b)其中:<!DOCTYPE引入外部的DTD文件对该XML文件进行约束c)<struts></struts>是该XML文件的根d)<package></package>代表一个包,name属性:是该包的唯一标识,主要用于包的继承,namespace属性:是该包的命名空间,唯一的,extends属性:用于包的继承。
所有的包都要继承struts-defaulte)<default-action-ref></default-action-ref>默认的访问Action,如果没有找到对应的Action,则执行该该标签的name属性中的Action名称。
f)<action></action>配置请求的路径和action之间的对应关系,name属性:请求的action的名称,在同一个包中要唯一,class属性:action所在的完整类路径g)<result></result>返回的结果name属性:对应action中的execute方法的返回值,文本内容:返回的路径。
六、配置过滤器a)在WEB-INF下的WEB.XML中如配置往常的过滤器一样,只是Struts的核心就是过滤器,该过滤器的位置是:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter七、Struts中的拦截器a)struts-default.xml该文件位于Struts的核心包下,其中在<package>的标签下有个<interceptors>,像<interceptors name="名称" class="该拦截器完整的类路径">这种格式的全部都是拦截器b)拦截器定义了一些常用的处理,如文件上传,国际化和本地化,表单重复提交等。
c)在<interceptors>这种标签中只是定义了,但是并没有调用。
d)调用拦截器:<interceptor-stack>该标签定义了调用拦截器。
声明拦截器栈:在拦截器栈中可以配置多个拦截器,可以把拦截器栈看成一个List集合,拦截器的执行顺序按照在拦截器栈中的配置的先后顺序执行e)Name属性:该拦截器栈起的唯一名称,<interceptor-ref>name属性的值:引用的上面声明的拦截器的八、struts2的基本配置a)Struts基本配置都在default.properties的资源文件里,该文件位于核心包下的org.apache.struts2下b)指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法和freemarker 、velocity的输出<constant name="struts.i18n.encoding" value="UTF-8"/>c)该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开<constant name="struts.action.extension" value="do"/>d)设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭<constant name="struts.serve.static.browserCache" value="false"/>e)当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开<constant name="struts.configuration.xml.reload"value="true"/>f)开发模式下使用,这样可以打印出更详细的错误信<constant name="struts.devMode"value="true" />g)默认的视图主题<constant name="struts.ui.theme" value="simple" />h)与spring集成时,指定由spring负责action对象的创建<constantname="struts.objectFactory" value="spring" />i)该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。
如果需要关闭动态方法调用,则可设置该属性为false<constantname="struts.enable.DynamicMethodInvocation" value="false"/>j)上传文件的大小限制<constant name="struts.multipart.maxSize" value=“10701096"/>九、指定多个配置文件,在Src下的Struts.xml中调用a)调用方式:<include file="struts-user.xml"/>引入外部xml文件十、结果类型a)每个action 方法都将返回一个String 类型的值, Struts 将根据这个值来决定响应什么结果b)默认的响应方式为dispatcher(也就是请求转发)c)如图d)结果类型: dispatcheri.dispatcher 结果类型是最常用的结果类型, 也是struts 框架默认的结果类型ii.该结果类型有一个location 参数, 它是一个默认参数,如图iii.dispatcher 结果类型将把控制权转发给应用程序里的某个资源,dispatcher 结果类型不能把控制权转发给一个外部资源. 若需要把控制权重定向到一个外部资源, 应该使用redirect 结果类型e)结果类型: redirecti.redirect 结果类型将把响应重定向到另一个资源, 而不是转发给该资源ii.redirect 结果类型可以把响应重定向到一个外部资源iii.location: 用来给出重定向的目的地,param: 用来表明是否把location 参数的值视为一个OGNL 表达式来解释. 默认值为truef)结果类型: redirectActioni.redirectAction 结果类型把响应重定向到另一个Actionii.redirectAction 结果类型接受下面这些参数:1.actionName: 指定“目的地”动作的名字. 它是默认属性space: 用来指定“目的地”动作的命名空间. 如果没有配置该参数,Struts 会把当前Action 所在的命名空间作为“目的地”的命名空间十一、通配符映射a)一个Web 应用可能有成百上千个action 声明. 可以利用struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系b)通配符映射规则i.若找到多个匹配, 没有通配符的那个将胜出ii.若指定的动作不存在, Struts 将会尝试把这个URI 与任何一个包含着通配符* 的动作名及进行匹配iii.若Struts 找到的带有通配符的匹配不止一个, 最后一个匹配将胜出iv.被通配符匹配到的URI 字符串的子串可以用{1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串…v.{0} 匹配整个URIvi.* 可以匹配零个或多个字符, 但不包括/ 字符. 如果想把/ 字符包括在内, 需要使用**. 如果需要对某个字符进行转义, 需要使用\.十二、动态方法调用a)动态方法调用: 通过url 动态调用Action 中的方法如果Action中存在多个方法时,我们可以使用!+方法名调用指定方法b)默认情况下, Struts 的动态方法调用处于激活状态, 若想禁用该功能, 则可以在struts.xml 文件中添加如下constant 元素:<constant name="struts.enable.DynamicMethodInvocation" value="false"/>十三、全局结果a)当多个action中都使用到了相同result,这时我们应该把result定义为全局结果b)如图c)注:局部的会覆盖全局d)Struts2中应用范围内action的实例,每个请求都会创建一个action实例十四、与Servlet API解耦a)为了避免与Servlet API 耦合在一起, 方便Action 做单元测试, Struts2 对HttpServletRequest, HttpSession 和ServletContext 进行了封装, 构造了3 个Map对象来替代这 3 个对象, 在Action 中可以直接使用HttpServletRequest,HttpSession, ServletContext 对应的Map 对象来保存和读取数据b)访问request/session/application对象i.方法一:通过ServletActionContext类直接获取ii.具体获取方法,如图iii.如果你只是想访问session的属性(Attribute),你也可以通过ActionContext.getContext().getSession()获取iv.方法二:实现指定接口,由struts框架运行时注入c)注意:implements ServletRequestAware,ServletResponseAware,ServletContextAware,SessionAwared)private HttpServletRequest request;private ServletContext servletContext;private HttpServletResponse response;private Map<String, Object> session;e)赋值方法:。