之前自学了Struts1,感觉用起来很方便,而对于Struts2的学习更多的是“赶鸭子上架”型学习,被项目逼着仓促的学了些,现在终于等到放假,打算写一系列日志用以总结归纳,同时留作学习笔记。本次自学我使用的参考书籍为《Struts2权威指南》及《struts-2-in-action》,有兴趣的童鞋可以下载下来详细阅读。
Ok,废话不多说,我们开始。
Struts2虽然跟Struts1就差一个数字,但是这之间是没什么联系的哈,如果想不通的可以参照王凯&王八,同样都是两个字,但是相差了一个字,这意思可就相差十万八千里咯~!Struts2更接近WebWork,是从WebWork扩展而来的。虽然这三个构架差别蛮大,但是他们都实现了共同的一个东西——MVC模型,具体的说应该是MVC2模型哈,详细的内容及区别大家可以参照我给出的参考书籍:)
想要配置Struts2非常简单, 这里我使用一个用户登录的例子来做演示。首先呢,我们需要一个让用户输入用户名密码的页面(index.jsp),以及一个登录成功的转入页(welcome.jsp)外加一个登录失败的提示页(error.jsp)。
index.jsp
1: <%@page language="java" contentType="text/html; charset=UTF-8"%>
2: <html>
3: <head>
4: <title>User Login</title>
5: </head>
6: <body>
7: <form action="Login.action" method="post">
8: <table>
9: <tr>
10: <td>用户登录</td>
11: </tr>
12: <tr>
13: <td>用户名:</td>
14: <td><input name="username" type="text"/></td>
15: </tr>
16: <tr>
17: <td>密码:</td>
18: <td><input name="password" type=password /></td>
19: </tr>
20: <tr>
21: <td><input type="submit" value="登录"/></td>
22: </tr>
23: </table>
24: </form>
25: </body>
26: </html>
做好了基础的页面之后,我们需要写一个action用以处理用户的请求,这个action就是一个非常普通的POJO对象,他甚至不需要继承任何父类,也不需要实现任何接口,这为我们的测试以及重用,提供了非常大的便利。
LoginAction.Java
1: package com.kaisir.www.struts2demo;
2:
3: public class LoginAction {
4: private String username;
5: private String password;
6: public String getUsername() {
7: return username;
8: }
9: public void setUsername(String username) {
10: this.username = username;
11: }
12: public String getPassword() {
13: return password;
14: }
15: public void setPassword(String password) {
16: this.password = password;
17: }
18:
19: public String execute() throws Exception{
20: if (username.equals("Kaisir")&&password.equals("123456")) {
21: return "success";
22: }else{
23: return "error";
24: }
25: }
26: }
可以看出,我们的Action中有两个字段,分别对应我们index.jsp中的两个文本框username及password。提交页面之后,系统会自动的获取我们这两个字段的值,并使用set方法填入到对应的变量之中。这样,我们在JavaBean中便获得了用户表单中输入的内容。
完成了Action之后,我们需要编写一个struts.xml文件,让系统知道我们当前都有哪些Action可用,以及根据Action的执行结果可以跳转到哪些View中进行结果的显示。
struts.xml
1: <?xml version="1.0" encoding="UTF-8"?>
2: <!DOCTYPE struts PUBLIC
3: "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
4: "http://struts.apache.org/dtds/struts-2.0.dtd">
5: <struts>
6: <package name="struts2" extends="struts-default">
7: <action name="Login" class="com.kaisir.www.struts2demo.LoginAction">
8: <result name="success">/welcome.jsp</result>
9: <result name="error">/error.jsp</result>
10: </action>
11: </package>
12: </struts>
在这个struts.xml文件中,我定义了一个action名为Login,他产生了两个输出跳转,一个跳转到了welcome.jsp,一个跳转到了error.jsp
最后,我们需要修改web.xml,以过滤器的形式加载Struts2。
1: <?xml version="1.0" encoding="UTF-8"?>
2: <web-app version="3.0"
3: xmlns="http://java.sun.com/xml/ns/javaee"
4: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5: xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
6: http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
7: <display-name></display-name>
8: <welcome-file-list>
9: <welcome-file>index.jsp</welcome-file>
10: </welcome-file-list>
11: <filter>
12: <!-- 定义核心Filter的名字 -->
13: <filter-name>Struts2</filter-name>
14: <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
15: </filter>
16: <filter-mapping>
17: <filter-name>Struts2</filter-name>
18: <url-pattern>/*</url-pattern>
19: </filter-mapping>
20: </web-app>
要注意的是,在2.xx后期的版本中,这个过滤器的类已经变成了“org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter”如果还按照以前的过滤器来,当你部署到tomcat中时会出现莫名其妙的500错误。
当然,拷贝必要的类库也是必要的~我从Struts2自带的例子中提取了一份类库列表,应该是最简的列表了,即要实现最基本的Struts2必须引入下列jar包。
1: lib目录下必须存在的包
2: asm-3.3.jar
3: asm-commons-3.3.jar
4: asm-tree-3.3.jar
5: commons-fileupload-1.2.2.jar
6: commons-io-2.0.1.jar
7: commons-lang-2.5.jar
8: freemarker-2.3.18.jar
9: javassist-3.11.0.GA.jar
10: ognl-3.0.3.jar
11: struts2-core-2.3.1.jar
12: xwork-core-2.3.1.jar
好了,至此,将项目部署到你的tomcat,输入用户名Kaisir,密码123456,看看有没有成功跳转到Welcome页面吧 :)大家有任何问题欢迎与我交流,Webmaster#Kaisir.Com ,借用一句广告语“大家好,才是真的好!”