开始struts2(运行)

struts2和struts1差距太大,差不多应该换一个名字了,struts2更好用,更简单。效率我没测试过,没有发言权。

首先得运行起来,我在网络上看了很多关于struts2运行的错误信息:

其实是最简单的解决问题方式就是用jdk1.5+tomcat5.5以上的版本就可以了。

问题出在tomcat5.0以前的版本jar包比较旧,缺少一些类文件,可以将新的jar库文件拷贝到tomcat5.0的对应目录来解决。

 

从apache.ora上下载struts2的示例struts-2.0.14-apps.zip。解压之后看到一些war文件。

直接把其中一个war文件struts2-blank-2.0.14.war拷贝到webapps目录下,运行tomcat,用ie打开http://127.0.0.1:8088/struts2-blank-2.0.14/,得到输出界面。ok,运行成功。

 

运行jar -xvf struts2-blank-2.0.14.war命令,将其中一个war包解压。

可以看看目录下有些什么东西。

一个文件index.html

三个目录WEB-INF、META-INF、example。

META-INF目录不管,example下面是放的jsp文件。

WEB-INF目录下有一个web.xml和两个目录(lib,class)。

web.xml内容如下:

看看内容,差异和struts1太大了,根据配置应该知道,struts2配置了一个filter来处理所有的http请求。

欢迎页面是根目录下的index.html。

 

lib目录是5个基础的jar文件,这儿不在一一描述。

class目录下有一个struts.xml,struts2用来配置struts2的规则,对struts2来说,struts.xml文件必须存在,内容如下:

根据上面的内容,这个文件包含了example.xml文件,本身没有配置对应的控制规则,这和struts1一样,可以铜鼓哦多个struts-config.xml来配置页面规则。

 

再看看example.xml的内容:

配置了一些如struts1的action,感觉比struts1简单。程序内容我就不在描述了,搞web开发的一看就明白。

 

package标签中的name和和namespace属性定义了包内所有action路径名,如果两个都存在,以namespace为准,如果没有namespace,那么以name为准。按照上面的配置,访问helloworld标签的时候,路径必须是example.helloword.action,在所有的struts2的访问uri都必须加上action作为后缀。

 

在struts.xml中有设置了两个常量值,如:

 这些常量定义在一个properties文件中,我在struts2的文档中说明在struts-default.properties中定义,但我打开struts2-core-2.0.14.jar文件,发现这些长岭一个定义在default.properties文件中,default.properties的内容我也贴出来,如下:

这个文件中对每一个常量值都作了说明。

有人对一些常量的说明做了中文注释,间文章http://hi.baidu.com/rcda/blog/item/fc967e36549ae7d5a3cc2bba.html

我就不抄袭别的的成果了。

 

设置常量可以在struts.xml或者web.xml中进行定义。

struts.xml中的

可以在web.xml中定义成

 

 

根据上面的运行结果和配置情况来说,struts2比struts1简单很多了。

 

代码解读和运行结果

首页:

在ie上输入http://127.0.0.1:8088/struts2-blank-2.0.14/,根据web.xml的配置,会显示欢迎页面index.html。

index.html文件的内容:

在页面上显示"Loading ...",根据里面的meta内容,2秒以后,转跳到页面example/HelloWorld.action。

根据example.xml中的配置,显示页面HelloWorld.jsp,页面上有些使用了strut2标签,显示两个url连接“English”和“Espanol”,文本内容如下:

分别有两个不同的参数es和en,选择不同的连接,标题显示不同的语言的标题,但是根据action的配置,选择不同的url的时候,都是请求同一个action,即HelloWorld,在HelloWorld.execute中,只有一条语句setMessage(getText(MESSAGE)),我们没有处理request_locale参数啊,为什么会有不同的显示结果呢?

原来在Struts 2.0中,通过ActionContext.getContext().setLocale(Locale arg)可以设置用户的默认语言。
Struts 2.0为您提供了一个名i18n的拦截器(Interceptor),并在默认情况下将其注册到拦截器链(Interceptor chain)中。
它的原理为在执行Action方法前,i18n拦截器查找请求中的一个名为"request_locale"的参数。

果其存在,拦截器就将其作为参数实例化Locale对象,并将其设为用户默认的区域(Locale),最后,将此Locale对象保存在session的名为“WW_TRANS_I18N_LOCALE”的属性中。

 

有了这个Locale属性之后,HelloWorld.java中的getText方法会根据不同的值,分别选选择目录下的配置文件package.properties和package_es.properties,取出文件中HelloWorld.message对应的配置字符串。

所以显示就不同了。

 

2.登陆页面

 在示例struts2-blank-2.0.14.war中还有一些页面怎么显示呢,好像通过首页连不过去,只能在ie上直接输入url。

在ie上输入ulr=http://127.0.0.1:8088/myweb/example/Welcome.action,其实Welcome只是个jsp,但是这里必须输入Welcome.action,否则struts 2不认识,和输入Welcome.jsp一样的。

根据Welcome.jsp中的url标签,显示两个连接的内容如下:

根据Login.java中的代码,由于没有username和password参数,最后选择了重定向到页面example/Login.jsp显示登陆操作。

在Login.jsp页面中输入username和password,选择提交,login.java中会返回SUCCESS,直接重定向到Menu.action,其实Menu.action就是Menu.jsp。

如果在界面上不输入就直接提交呢?

登陆页面如果不输入,Struts 2回自动调用/classes/example/Login-validation.xml验证合法性。
采用stuts 2的校验框架时,只需要为Aciton按-validation.xml提供一个校验文件即可,该文件放在Acion class相同路径下。
哦,原来是Struts 2.0为您提供了一个名validation的拦截器(Interceptor),并在默认情况下包含在defaultStack中了,直接用就行了。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值