1 Struts2入门

1.1 Struts2简介

  • Struts2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架。

    1.2 Struts2下载与版本

  • Struts2官网:http://struts2.apache.org
  • 版本号的意义:
  • Alpha:内测版,一般不向外部公布,会有很多bug。
  • Beta:除错 + 增新,也属于内测版,但是相对于Alpha版已有很大的改进,消除了严重错误,但是还是存在缺陷,需要更多测试来消除。这个阶段会加入新的功能。
  • RC:除错,Release Candidate,发行候选版,外测版。与Beta版的最大区别在于Beta阶段会加入新功能,而RC版一般不会加入新的功能,而主要着重于除错。(RC版本是最终发放给用户的最接近正式版的版本,发行后改正bug就是正式版了,是正式版之前的最后一个测试版。)
  • GA:General Availability,普通有效版,稳定版,官方开始推荐广泛使用的版本。
  • Release:发行版,即最终版。在一系列测试版之后的正式发行版本,是最终交付用户使用的一个版本。该版本也称之为标准版。Release会以单词形式出现在软件封面上,有时候会使用符号R。

    1.3 Struts2的优点

    1、Struts2是非侵入式设计:Struts2的Action类为POJO类,不依赖于Servlet API和Struts API。
    2、Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能。
    3、Struts2提供了类型转换器,可以将特殊的请求参数转换成需要的类型。
    4、Struts2的输出验证可以对指定方法进行验证。
    5、提供了全局范围、包范围和Action范围的国际化资源文件管理实现。

    2 Struts2开发环境的搭建

    2.1 Struts2的jar包

  • struts2最基本的jar包,可以从Struts2框架解压目录下的apps中的struts-blank.war中获取。(所使用的是struts-2.3.24-all.zip版本)
  • 将struts2-blank.war扩展名修改为zip后,解压。在其WEB-INF\lib中所有Jar即为Struts2运行的基本Jar包。从使用的两日志Jar包中可以看出,Struts2使用的是Log4j2日志技术。
    SSH框架之struts2专题1:Struts2入门

    2.2 Struts2的配置文件

  • Struts2的默认配置文件为struts.xml,该文件需存放在WEB-INF/classes下。即,在myEclipse中应放在src目录下。
  • Struts2配置文件的头部可以从struts2-core-2.3.24.jar下的struts-2.3.dtd中找到。
    SSH框架之struts2专题1:Struts2入门
    SSH框架之struts2专题1:Struts2入门
    SSH框架之struts2专题1:Struts2入门

  • struts.xml内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
         <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
    
    </struts>

    2.3 配置Struts2的启动项

  • 在Struts2中,Struts框架是通过Filter启动的。Filter在web.xml中的配置如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
        <display-name>01-struts2</display-name>
        <!-- 注册Struts2的启动项 -->
        <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>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
  • 若忘记子配置细节,可以从struts2-blank.war解压目录中WEB-INF下的web.xml中复制。

    2.4 测试搭建的项目

  • 将该项目部署到服务器后,启动服务器,在控制台没有报错,则说明Struts2应用平台搭建成功。
    SSH框架之struts2专题1:Struts2入门

    2.5 解决struts.xml中无自动提示功能的问题

  • 如果在联网的状态下,struts.xml文件关联了相关的dtd文件,在按下“Alt + /”后,就会有自动提示的功能。
  • 如果在没有联网的状态下,需要在MyEclipse环境中进行相关的配置,内容如下:
    1、拷贝struts2-core-2.3.24.jar根目录中的struts-2.3.dtd文件至指定目录。
    SSH框架之struts2专题1:Struts2入门
    2、复制struts.xml文件中的url路径“http://struts.apache.org/dtds/struts-2.3.dtd” ,在Window -> Preferences中进行如下设置。
    SSH框架之struts2专题1:Struts2入门

    3 Struts2工作流程

    3.1 开发流程

    1、编写页面
    2、定义Action类
    3、注册Action
    4、编写结果页面

    3.2 简单示例代码

    1、编写静态页面index.jsp,代码如下所示:

            <form action="test/login.action" method="post">
                    姓名:<input type="text" name="name" /> <br/>
                  年齡:<input type="text" name="age" /> <br/> 
                     <input type="submit" value="登录" />
            </form>

    2、定义action类LoginAction,代码如下所示:

    package com.eason.action;
    
    public class LoginAction {
        private String name;
        private int age;
    
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
    
        public String execute(){
            System.out.println("name = " + name);
            System.out.println("age = " + age);
            return "success";
        }
    }

    3、注册action,在struts.xml文件中配置如下内容:

    <?xml version="1.0" encoding="UTF-8"?>
         <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <package name="xxx" namespace="/test" extends="struts-default">
            <action name="login" class="com.eason.action.LoginAction">
                <result name="success">/welcome.jsp</result>
            </action>
        </package>
    </struts>

    4、编写结果页面welcome.jsp,代码如下所示:

            名字:  ${name } <br/>
            年齡:   ${age }<br/>

    5、使用tomcat启动项目,再打开index.jsp页面,填写“姓名”和年龄,点击“登录”后,页面中可以显示welcome.jsp中的内容:
    SSH框架之struts2专题1:Struts2入门
    SSH框架之struts2专题1:Struts2入门

    3.3 struts2执行流程图

    SSH框架之struts2专题1:Struts2入门

    4 附加说明

    4.1 Tomcat的应用管理配置

  • 使用tomcat图形用户界面管理多个项目对于开发有很多裨益,下面介绍如何进行使用。
    1、需要在myEclipse配置的tomcat中的tomcat-users.xml配置中添加如下内容:
    SSH框架之struts2专题1:Struts2入门
    <role rolename="manager-gui" />
    <user username="eason" password="02000059" roles="manager-gui"/>

    2、重启tomcat后(配置文件被重新加载),使用浏览器访问tomcat首页,点击“Manager App”,输入用户和密码之后登录,即可进入tomcat图形用户界面管理(管理员)。
    SSH框架之struts2专题1:Struts2入门
    SSH框架之struts2专题1:Struts2入门
    SSH框架之struts2专题1:Struts2入门

    4.2 绝对路径和相对路径问题

1、绝对路径

  • 绝对路径指的是无法改变的路径,根据给出的路径可以准确定位的路径。
  • 而对于计算机中的绝对路径,有分为本地绝对路径和网络绝对路径。但是无论哪种绝对路径都是指带有访问协议的路径。
  • 本地绝对路径:带有盘符的路径。例如:d:\images\eason.jsp就是一个绝对路径。不过,对于本地路径,其实质是忽略了file协议的。其带协议的全路径实际为:file:///d:\images\eason.jsp 。
  • 网络绝对路径:http://127.0.0.1:8080/01-struts2/index.jsp 就是一个绝对路径,带有http访问协议。

    2、相对路径

  • 相对路径,是指根据参照路径的不同,给出路径的实际路径可以发生改变的路径。根据给出的路径,在保证参照路径不变的情况下,才能够准确定位。若参照路径发生改变,则无法实现定位。
  • 在Web应用中,相对路径的写法有两种:一种是以斜杠开头的相对路径,一种是不以斜杠开头的相对路径。
  • 以斜杠开头的相对路径,根据路径所在文件的不同,又可分为两种:前台路径和后台路径。

  • 前台相对路径:是指由浏览器解析执行的代码中所包含的路径。例如,html、css、js中的路径,以及jsp中静态部分的路径。像html以及jsp中的静态部分中的<img src=""/>、<a href=""></a>、<form/>等;像css中的background:img("")等;像js中的window.location.href=""等,都属于前台路径。
  • 前台相对路径的参照路径是Web服务器的根路径。即http://127.0.0.1:8080/ 。

  • 后台相对路径:由服务器解析执行的代码以及文件中所包含的路径。例如,java代码中的路径、jsp文件动态部分中的路径、xml文件中的路径(xml文件是要被java代码加载入内存,并由java代码解析的)等。
  • 后台相对路径的参照路径是Web应用的根路径。例如本例中的http://127.0.0.1:8080/01-struts2 。

  • 不以斜杠开头的相对路径:无论是前台路径,还是后台路径,其参照路径是当前资源的访问路径,而不是当前资源的保存路径。(如 http://127.0.0.1:8080/01-struts2/index.jsp 绝对路径,其访问路径为: http://127.0.0.1:8080/01-struts2/ ,其资源路径为:index.jsp)