2.3 Struts 2项目开发
本节先用Struts 2的基本知识开发一个简单的登录系统,运行项目会出现如图2.4所示的界面,输入姓名和密码后,进入如图2.5所示的欢迎界面。
图2.4 用户登录界面
图2.5 欢迎界面
下面将开始进行开发,读者如果对有些问题不是很明白,没关系,后面会对所有的内容进行详细讲解,这里主要让读者能够明白其基本应用及流程。
1.Struts 2下载
MyEclipse 6没有对Struts 2的支持,所以需要自己下载Struts 2开发包。登录“http://struts.apache.org/”,下载Struts 2完整版,笔者编写本书时Struts 2的最高版本是Struts 2.0.14,故本书使用的Struts 2版本为Struts 2.0.14。将下载的Zip文件解压缩,它是一个典型的Web结构。打开其文件夹,里面大致包含了以下几个文件。
● apps:存放基于Struts 2的示例应用,是学习Struts 2非常有用的资料。
● docs:存放Struts 2的相关文档,如Struts 2的快速入门、Struts 2的文档、API文档等内容。
● lib:存放Struts 2框架的核心类库,以及Struts 2的第三方插件类库。
● src:存放Struts 2框架的全部源代码。
2.创建项目,添加Struts 2开发能力
打开MyEclipse,依次选择“File”→“New”→“Project…”,弹出新建命令对话框,选择“MyEclipse”→“Java Enterprise Projects”→“Web Project”,单击“Next”按钮进入下一步Web应用详细信息设置,在“Project Name”文本框中输入Web应用名称,这里取名为“Struts 2”,在“J2EE Specification Level”一栏中选择“Java EE 5.0”,其他保留默认值,如图2.6所示,单击“Finish”按钮完成。
图2.6 建立Web项目
项目建好以后,就可以加载Struts 2的类库了,在一般的Struts 2的开发中,只需要加载必需的5个类库,它们分别是:struts2-core-2.0.14.jar、xwork-2.0.7.jar、common-logging-1.0.4.jar、freemarker-2.3.8.jar及ognl-2.6.11.jar。类库中后面的编号是版本,如果用了不同的版本,版本号也会有所不同。
右击项目名,依次选择“Build Path”→“configure Build Path…”,出现“Properties for Struts 2”对话框,选择“Libraries”栏后,单击右边的“Add External JARs…”,就会出现让用户选择类库的对话框,找到下载的Struts 2文件夹下的lib文件夹,选中上面说的5个类库后,这5个类库就会出现在“Properties for Struts 2”对话框中,如图2.7所示。
图2.7 “Properties for Struts 2”对话框
单击“OK”后,Struts 2需要的类库就加载到了项目中,但这种方法是加载了所需类库在计算机中的位置,即相对路径。如果把项目换到另一台计算机,而在另一台计算机中在该路径下没有Struts 2的类库,项目就会找不到类库了。所以还有一种方法就是直接把需要的类库放到项目的lib下,项目的lib文件夹位于项目的WebRoot/WEB-INF下,只需把需要的类库复制到该文件夹下即可。
下面简要介绍这5个类库的作用。
(1)struts2-core-2.0.14.jar:Struts 2的核心类库。
(2)xwork-2.0.7.jar:xwork项目,Struts 2就是在此基础上构建的。
(3)common-logging-1.0.4.jar:用于插入其他的日志系统。
(4)freemarker-2.3.8.jar:所有的Struts 2的UI标签模板(标签会在后面详细讲解)。
(5)ognl-2.6.11.jar:OGNL表达式语言(会在后面章节中详细讲解)。
3.配置web.xml
web.xml在建立项目时就存在了,位于项目的WebRoot/WEB-INF/下,打开该文件,代码修改为:
<?xml version="1.0"encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
其中,“<welcome-file-list>…</welcome-file-list>”中设置项目运行时的欢迎界面,<web-app>标签配置了一些xml文件的属性及引用。标签里面配置了过滤器。该内容会在后面讲解,这里先了解即可。
4.创建struts.xml
大家在学习JSP的时候已经接触过Web项目,在Web项目的WebRoot/WEB-INF/下不但有lib文件夹,还有classes文件夹,该文件夹下存放项目编译后的类文件。一些配置文件也会放在其中,Struts 2要求struts.xml放在classes文件夹下,所以需要在该文件夹下建立struts.xml文件。由于使用MyEclipse工具,只需在项目的src下建立struts.xml文件,该文件就会被自动编译到项目的classes文件夹下,方便了编程。
右击src,依次选择“New”→“file”,在出现的对话框的“File name”的输入框中输入“struts.xml”,单击“finish”完成,打开该文件,输入下面的代码:
<?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="default"extends="struts-default"> ... </package> </struts>
该文件在项目运行时会自动加载,其中省略号部分后面要加入“<action>”配置。该文件的解释也会在后面的章节中详细讲解。
5.编写LoginAction.java
该Action类是用户自定义类,它完成用户想要完成的功能,比如判断用户名和密码的正确性等,这里其代码编写为:
package org.action; public class LoginAction{ private String username; private String password; public String getUsername(){ return username; } public void setUsername(String username){ this.username=username; } public String getPassword(){ return password; } public void setPassword(String password){ this.password=password; } public String execute(){ return"success"; //不做任何判断直接返回“success” } }
可以发现,该类放在“org.action”包中,在程序中把类放到包中是一个好的习惯,这样可以把同一类型的类放在同一包中,不容易混淆,便于找到程序员要找到的类。该类是一个普通的POJO类,没有继承或实现任何的类或接口。该类中有两个属性,并生成它们的get和set方法,还有一个普通的方法,直接返回“success”。
既然是用户自定义实现功能的类,那么怎么和请求映射关联起来呢?通俗地说,就是系统怎么找到这个类,并且在什么时候应用这个类,这就需要“struts.xml”文件来起作用了。在“struts.xml”中加入黑体部分代码:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="default" extends="struts-default"> <action name="login"class="org.action.LoginAction"> <result name="success">/welcome.jsp</result> </action> </package> </struts>
这表示凡是请求“name”为“login”的都要用“class”对应的类来处理。而“result”中则表示如果类中返回“success”就跳转到“welcome.jsp”页面。
6.创建视图login.jsp
从图2.4 中可以看出,登录界面非常简单,右击WebRoot文件夹,依次选择“New”→“JSP”,在出现的对话框的“File name”输入框中输入“login.jsp”,单击“finish”完成。其代码实现为:
<%@page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>登录页面</title> </head> <body> <form action="login.action" method="post"> <table align="center"border=1 width="300"bgcolor=#F5FFE1> <tr><td colspan="2"align="center" width="250"bgcolor="#CCCCFF">用户登录界面</td></tr> <tr><td width="50">姓名:</td><td><input type="text" name="username"/></td></tr> <tr><td width="50">密码:</td><td><input type="password"name="password"size=22/></td></tr> <tr><td align="center"colspan=2><input type="submit"value="登录"/> <input type="reset"value="重置"/></td></tr> </table> </form> </body> </html>
登录界面的表单中“action”的值为“login.action”,这就会与“struts.xml”中“action”配置对应上,表示该请求将由自定义的“LoginAction.java”这个类来处理。
7.创建成功视图welcome.jsp
成功界面很简单,里面用了一个EL表达式来取用户登录的姓名。其中原理会在OGNL章节中讲述。该JSP文件的建立与“login.jsp”类似,名称改变而已。代码为:
<%@page language="java"pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>欢迎界面</title> </head> <body bgcolor=#F5FFE1> 欢迎您!${username} </body> </html>
8.部署运行
要运行一个项目,必须把项目部署到服务器中(本书应用Tomcat为服务器),部署项目的步骤为:单击MyEclipse菜单栏的图标,出现如图2.8所示的对话框。
图2.8 部署项目的对话框
在“Project”栏的下拉列表中选择要部署的项目,然后单击右边的“Add”按钮,出现如图2.9所示的对话框,让用户选择服务器。该对话框的“Web Project”的值是要部署的项目,“Server”栏即是让用户选择服务器。选择“Tomcat 6.x”服务器,单击“Finish”完成。
这时图2.8所示的界面就会出现部署的项目,并且前面有个蓝色的“”图标,表示部署成功了,如图2.10所示,单击“OK”完成。大家可以打开Tomcat安装目录下的webapps,就会找到刚刚部署的项目。
图2.9 选择服务器
图2.10 项目部署成功
项目部署完成后,就可以启动服务器了。单击MyEclipse菜单栏的图标的下拉箭头,依次选择“Tomcat 6.x”→“Start”,就会启动Tomcat服务器,服务器启动完成后就可以运行项目了。在浏览器的地址栏输入“http://localhost:8080/Struts2/login.jsp”,会出现如图2.4所示的登录界面,进而可以测试项目了。