Java EE实用教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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所示的登录界面,进而可以测试项目了。