您的位置:首页 > 编程语言 > Java开发

Struts2 学习笔记之一

2016-02-25 22:07 495 查看
1.strusts2概念

struts2是在webwork2基础上发展过来的。其优点:

① 在软件设计上Struts2没有像struts1那样跟Servlet API和Struts API有有着紧密的耦合,struts2的应用可以不依赖于servlet API和struts API.Struts2 这种设计属于无嵌入式设计,而Struts1这种设计属于嵌入式设计。

② Struts提供了拦截器,利用拦截器可以进行AOP编程,可以进行权限编程

③ Struts2提供了类型转换器,我们可以把特殊的请求参数转换成需要的类型

④ Struts2提供了多种表现层技术 如:jsp、freeMarke

⑤ Struts2的输入校验可以对指定方法进行校验,解决啦struts1的长久之痛

⑥ 提供了全局范围、包范围和action范围的国际化资源文件管理实现

2.搭建Struts2的开发环境

① 找到开发struts2应用需要使用到jar文件
② 编写struts2的配置文件(默认的配置文件struts.xml),该文件应放在WEB-INF/classes,开发中放在src文件夹里
③ 在web.xml中加入Struts2 MVC的框架启动配置(是通过filter启动的)如果struts2版本是2.1.3之前的则filter类是org.apache.struts2.dispatcher.FilterDispatcher,如果是往后的,则filter是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

3.struts2中配置Struts.xml配置的包介绍
<package name="ali" namespace="/test" extends="struts-default">
<action name="helloword" class="" method=”execute”>
<result name="sucess">/WEB-INF</result>
</action>
</package>

讲解:在struts2框架中使用包来管理action,包的作用和java中的类包非常类似,主要用于管理一组业务功能相关的action.
配置包时必须指定name属性,改name属性值可以任意取名,但必须唯一,如果其它包要继承该包,必须通过该属性进行引用。包的namespace属性必须定义该包的命名空间,命名空间作为访问该包下action的路径的一部分,如访问上面的例子的Action,该访问路径为:/test/helloword.action.namespace属性可以不配置,如果不指定该属性,默认的命名空间是“”.
通常每个包都应该继承struts-default包,因为struts很多核心功能都是拦截器来实现。Struts-default包定义了这些拦截器和result类型。可以这么说,当包继承了struts-default才能使用struts2的核心功能。
4.Action名称的搜索顺序
例如:url路径为:http://server/struts2/path1/path2/path3/test.action
会先寻找namespace为/path1/path2/path3的package,如果不存在这个包,则会寻找namepace为/path1/path2下的package,以此类推。如果在/path1/path2/path3里没有找到test.action,则会到默认的namespace的package里面去找。默认的命名空间是“”。

5.Action配置中的各项默认值

如果没有为action指定class,默认是Action Support
如果没有为action指定method,默认执行action中的execute()方法
如果没有指定result的name属性,默认值为success
6.Action中result的各种转发类型

<action name=”helloword” class=”具体Action路径”>

<result name=”success”>/WEB-INF/page/hello.jsp</result>

</action>

在result配置类似于struts1中的forward,但struts2中提供了多种结果的类型,常用的类型有:type=”dispatcher”(内部转向,默认的)或者redirect(重定向)、redirectAction(Action)、 plainText(原代码呈现)。

在result中还可以使用${属性名}表达式访问action中的属性,表达式里的属性名对应action中的属性。如下:<resulttype=”redirect”>/view.jsp?Id=${id}</result>

如果重定向的action在别的命名空间下:

<result type=”redirectAction”>

<paramname=”actionName”>helloword</param>

<paramname =”namespae”>/test</param>

</result>//需要配置另一个包的名字和空间域

一个package中的全局results<global-results></global-results>

为Action的属性注入值,在是在action中配置param如:

<action ....><param name=”xxx”>xxxValue</action>。

需要在action中写上属性xxx,并有getXxx()和setXxx方法();

7.struts2 常用的常量

(1)struts.i18n.encoding=UTF-8

指定默认编码

用法: <constant name="struts.i18n.encoding" value="UTF-8" />

(2)struts.action.extension
指定Struts 2处理的请求后缀,默认值是action,即所有匹配*.action的请求都由Struts2处理,如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开
用法:<constant name="struts.action.extension" value="do" />  或者
<constant name="struts.action.extension" value="do,action" />

(3)struts.configuration.xml.reload
当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开
用法:(4)struts.devMode
开发模式下使用,默认为false,设置成true,这样可以打印出更详细的错误信息,有助于查找到错误,在开发的时候建议开启,项目发布之后改成false
<constant name="struts.devMode" value="true" />
<constant name="struts.configuration.xml.reload" value="true" />
(5)struts.multipart.saveDir
指定上传文件时的临时目录,默认使用 javax.servlet.context.tempdir
用法:<constant name="struts.multipart.saveDir" value="/tmpuploadfiles" />
(6)struts.multipart.maxSize
该属性指定Struts 2文件上传中整个请求内容允许的最大字节数 默认为2M
用法:<constant name="struts.multipart.maxSize" value="2097152" />
(7)struts.ui.theme
默认的视图主题,可以为simple,xhtml或ajax
用法:<constant name="struts.ui.theme" value="simple" />
(8)struts.ui.theme
默认的视图主题,可以为simple,xhtml或ajax
用法:<constant name="struts.ui.theme" value="simple" />
(9)struts.serve.static.browserCache
设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭
用法:<constant name="struts.serve.static.browserCache" value="false" />
(10)struts.serve.static.browserCache
设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭
用法:<constant name="struts.serve.static.browserCache" value="false" />
(11)struts.enable.DynamicMethodInvocation 
设置是否支持动态方法调用,true为支持,false不支持.
用法:<constant name="struts.enable.DynamicMethodInvocation" value="true" />
8.struts2的处理流程



StrutsPrepareAndExecuteFilter是struts2 框架的核心控制器,负责拦截有<url-pattern>/*</url-pattern>指定的所有用户的请求。当用户请求到达时,该filter会过滤用户的请求。默认情况下,如果请求的路径不带后缀或者后缀以.action结尾,则请求将转入Struts 2框架处理,否则Struts2框架将略过请求的处理。与Struts1不同,Struts2对用户的每一次请求都会创建一个action,所以Struts2中的action是线程安全的。其Struts2在web.xml中的配置:

<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>

9.为引用指定多个struts配置文件
我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其它配置文件,下面的struts.xml通过<include>元素指定多个配置文件。
<struts>
<include file=”struts-user.xml”>
</struts>
10.动态方法调用和使用通配符
禁止动态方法调用方法(一般建议不适用动态方法):
<constant name=”struts.enable.DynamicMethodInvocation” value=”false”>
使用通配符获取方法:例如:
<action name=”list_*” class=”类的路径” method={1}>//{1}就等于*代表的字符串
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: