struts-2.3.4.1自带示范程序struts2-blank.war的入门学习(高手绕行)

struts-2.3.4.1自带示例程序struts2-blank.war的入门学习(高手绕行)
一直没用过大名鼎鼎的Struts2,网上找了很多示例程序,总是不尽人意。下载完struts-2.3.4.1,简单浏览了一下目录结构,突然想到,不如用下载包中自带的示例程序进行学习,保证是最新的Struts2,而且示例较权威。以下是我的学习步骤,写出来供初学者参考,struts大牛如果有时间看的话,也希望能够提一些宝贵的意见。
1.   首先到http://struts.apache.org/download.cgi#struts2341页面下载最新版本的Struts2。这里我们下载完整版的Full Distribution:struts-2.3.4.1-all.zip (76mb) (简洁起见,类似这种我就不截图了)
2.   解压,打开,我们看到有apps,docs,lib,src四个文件夹,见名知意,我就不翻译了。这里我只看了apps里面的内容,英文不太好,docs里面的内容我没有仔细研究,都直接google中文资料了,另外apps里面对应的示例文件夹里,也包含了源代码文件,所以这里src也可以不看。
3.    进入apps,看到四个war包,用winrar解压struts2-blank.war,留作以下使用。这里我们先只研究这一个包。当然如果你只是想运行,而不看代码的话,直接把此war包放到容器的的项目路径,启动容器就可使用这个struts2-blank。
4.    现在我们用自己的IDE建一个web project,在这里我将project命名为struts2-blank,并且指定context url为struts2-blank。依次装上一步解压后的war包对就文件复制到web project对应路径下,下面我依次复制。这里我用的是MyEclipse10。
4.1    web.xml.
首先用在解压好文件夹里找到struts-2.3.4.1\apps\struts2-blank\WEB-INF\web.xml替换掉项目struts2-blank中对应WEB-INF\web.xml文件。打开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>
    

通过配置这个Filter,启动Struts框架,StrutsPrepareAndEXecuteFilter()方法中将会读取类路径下的默认文件struts.xml完成初始化操作。Struts将struts.xml文件内容,以javabean的形式存放在内存中,从而不必重复读取struts.xml文件。
4.2    struts.xml
在解压好的文件夹里找到struts-2.3.4.1\apps\struts2-blank\WEB-INF\src\java\struts.xml,复制到项目struts2-blank的src下,Myeclipse会自动将struts.xml布署到WEB-INF\classes下的。
同时将同一目录下example.xml文件复制过去。
    <package name="default" namespace="/" extends="struts-default">
        <default-action-ref name="index" />

        <global-results>
            <result name="error">/error.jsp</result>
        </global-results>

        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="error"/>
        </global-exception-mappings>

        <action name="index">
            <result type="redirectAction">
                <param name="actionName">HelloWorld</param>
                <param name="namespace">/example</param>
            </result>
        </action>
    </package>
    <include file="example.xml"/>

首先配置package,在这里我感觉name属性不太重要,只要不重名就行,namespace属性比较重要,指定了是发布以后的访问的路径,也就是url的一部分。
然后是是指定该package下默认的action,这里默认跳转到index,而在index下又进行了重定向到/example/HelloWorld.第5步详细解释
为了清晰起见,在这里用include文件的方式,在example.xml中指定其它action.这里不一一解释。
4.3   lib包
将struts-2.3.4.1\apps\struts2-blank\WEB-INF\lib文件夹下的包复制到项目struts2-blank中对应WEB-INF\lib下,原因不解释。
4.4   jsp文件
将struts-2.3.4.1\apps\struts2-blank\下的example文件夹复制到项目struts2-blank的WebRoot目录下。
4.5   java文件
将struts-2.3.4.1\apps\struts2-blank\WEB-INF\src\java下example文件夹复制项目struts2-blank下的src下。
5.   运行
布署程序到tomcat下。run servler
在浏览器访问http://localhost:8080/struts2-blank/example/HelloWorld.action,既可成功看到
struts-2.3.4.1自带示范程序struts2-blank.war的入门学习(高手绕行)
由于我们在4.2中配置了所以在url,http://localhost:8080/struts2-blank/下随便输入其它地址,都会跳转到index,然后index再重定向到HelloWorld,返回页面与上面的相同
如我们随便输入访问http://localhost:8080/struts2-blank/aaaaaa  同样会返回以上页面。
6.   关于package.properties
这个示例同样实现了语言的国际化,通过对package.properties的配置,实现了多语句,开始我也很奇怪在配置文件中没有指定读取package中的多语内容。后来上网查了一下,是这样解释的:
引用
在java的包下放置package_language_country.properties资源文件,package为固定写法,处于该包及子包下的action都可以访问该资源。当查找指定key的消息时,系统会先从package资源文件查找,当找不到对应的key时,才会从常量struts.custom.i18n.resources指定的资源文件中寻找。

例如我们如果要增加中文包,只需增加文件package_zh_CN.properties
下面是我在加了中文包后访问helloworld的页面
struts-2.3.4.1自带示范程序struts2-blank.war的入门学习(高手绕行)
由于框架会自动检测当前系统语言,所以不需要任何配置,显示即为中文。当然你也可以在jsp中添加中文链接。
先就写到这里吧,共同学习,欢迎留言讨论。