传智播客-struts2(1)-配置文件里的常量、视图和通配符应用

来源:互联网 发布:mac键盘灯禁止符号 编辑:程序博客网 时间:2024/05/18 09:05

struts2课程是张孝祥老师讲解的。张老师的技术实力自不必说,讲课水平也是一流。因为客观地,技术本身多少有些枯燥,如果只是纯讲技术点,学员可能听起来会有些吃力,也容易犯困,但是这个问题在张老师面前则迎刃而解。因为张老师不仅对技术了解透彻,而且因为其丰富的经验和阅历,每讲一个技术点,都可以用生活中大家易知易懂的事实举例,信手拈来,既加速理解又便于记忆。当然,张老师讲课不仅长于讲故事打比方,而且相当细致严谨,在讲课的过程中,时不时可能会遇到新的问题,每次新解决一个问题,都会补充记录在自己的ppt上,同时特别注意思路的讲解。

 

其实学到现在,已经明白一个基本的事实:很多框架,搭建其环境的时候,两个要素必不可缺,一是jar包,二是配置文件。struts2(我们学的版本是2.1.8.1)的配置文件不少,每个文件里的配置项也不少,就不一一叙述了,下面挑几个用途广泛而且应用方便的内容讲讲,更多内容就看文档吧:)

 

常量
首先,当我们学习一个框架的时,一般可以参考框架自带的示例项目。例如struts2,刚入门的时候,可以参考其自带的blank项目。当部署完这个项目后,开启tomcat服务,在地址栏里输入请求的action路径时,可以发现,虽然没有给该action定义扩展名,但是地址里输入的action路径没有扩展名或者扩展名为action时都可以通过。为什么呢?这是由struts2的默认配置属性决定的。

 

常量的默认配置在struts2-core-2.1.8.1/org/apache/struts2/default.properties文件里,像定义访问action的默认扩展名、开发模式设置、i18n以及默认字符编码等等,例如struts.action.extension=action,,

 

应当注意的是,一般情况不要修改框架系统的原始文件,如果要更改默认的配置项,可以采用覆盖的方式。struts.xml是struts2的基本配置文件之一。该文件内可以配置多个常量,以覆盖默认的常量配置,例如<constant name="struts.action.extension" value="do,," />表示action的可用扩展名为do或者不用扩展名。

 

常量可以在下面多个文件中进行定义,struts2加载常量的搜索顺序如下,后面的设置可以覆盖前面的设置:
default.properties文件
struts-default.xml
struts-plugin.xml
struts.xml
struts.properties(为了与webwork向后兼容而提供)
web.xml

 

视图
struts2丰富了支持的视图类型,具体内容可以参见文档的“Result Types”部分。这里只记录两点:
1、文档里列出的视图类型中有一种是“plaintext”,但实际在配置文件里配置的时候,应该是“plainText”,可以从struts2-core-2.1.8.1/struts-default.xml文件中<result-types>元素下内容求证。
2、struts2允许用户自定义类型,但无论那种类型的视图,表示该视图的类都需要实现com.opensymphony.xwork2.Result接口。

 

通配符应用
<action name="*_*" class="cn.itcast.struts2demo.web.struts2.actions.HelloWorldAction" method="{1}">
        <result name="success" type="dispatcher">
            <param name="location">/WEB-INF/pages/hello/{2}.jsp</param>
        </result>
</action>
上文是struts.xml里action的配置。如果从地址栏输入以下内容:
http://localhost:8080/项目名/namespace/sayHello2_view1
调用的是方法sayHello2,展示的是视图view1。

如果该方法没有指定,则默认调用execute方法,没有的话抛NoSuchMethodException异常。

 

不过现在一般规范编程都只用一个“*”,然后方法名和视图名相同。当然,也可以用“*”定义目录名,例如<param name="location">/WEB-INF/pages/{2}/view1.jsp</param>

 

此外,应用通配符时,struts2可以忽略下划线:
productCreate(类名)--product* (action name)--product(路径)
product_Create(类名)--product_* (action name)--product(路径)
以上两种方式均可。