Struts框架入门教程

作者: 蓝桥云课 | 来源:发表于2017-10-12 15:14 被阅读318次

    说明:文章所有内容均截选自实验楼教程:【Struts框架教程】,想要查看教程完整内容,点击即可。

    前言

    Struts 是Apache软件基金会(ASF)赞助的一个开源项目。通过采用JavaServlet/JSP技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式。

    文章就简单的介绍一下Struts,然后通过经典的hello world例子带你了解Struts的基本原理和运用。

    什么是 Struts

    Struts 是 Apache 软件基金会(ASF)赞助的一个开源项目。它最初是 Jakarta 项目中的一个子项目,并在2004年3月成为 ASF 的顶级项目。它实现了基于 Java EE Web 应用的 Model-View-Controller(MVC)设计模式的应用框架,其采用的主要技术是 Java Servlet、JSP 以及 Custom Tag Library 等技术,是 MVC 经典设计模式中的一个经典产品。

    Struts 直译过来就是 “支柱,枝干” 的意思,它的目的是为了减少程序开发的时间,项目的创建者认为 JSP、Servlet 的存在虽然可以帮助用户解决大部分问题,但是由于它们的编码对项目的开发带来了许多的不方便,可重用性也差,所以 Struts 应运而生,帮助用户在最短的时间内解决这些问题,其作用就像是 “支柱” 一样。

    Struts2 是 Struts 的下一代产品。它在 Struts 和 WebWork 的技术基础上进行了合并,产生了全新的 Struts2 框架。Struts2 修复了大量错误和漏洞,并且体系结构和第一代 Struts 存在巨大差别(因为其实Struts2 主要是由 WebWork 衍生而来),我们接下来的 Struts 开发课程也以 Struts2 为基础。

    Struts2 体系结构

    Struts2 的体系结构大致如下图所示:

    图片描述信息

    上图是 Struts2 的体系结构。一个请求在 Struts2 框架中的处理大概会经过以下几个步骤:

    • 1、客户端发出一个指向 Servlet 容器(例如Tomcat)的请求。

    • 2、这个请求会经过几个过滤器 Filter(ActionContextCleanUp 可选过滤器、其他 Web 过滤器如 SiteMesh 等),最后到达 FilterDispatcher 过滤器。

    • 3、接着 FilterDispatcher 过滤器被调用,FilterDispatcher 询问 ActionMapper 来决定这个请是否需要调用某个 Action。

    • 4、如果 ActionMapper 决定需要调用某个 Action,FilterDispatcher 把请求的处理交给 Action 对象的代理(ActionProxy)。

    • 5、ActionProxy 通过配置管理器(Configuration Manager)读取框架的相关配置文件(struts.xml 以及它包含的 *.xml 配置文件),找到需要调用的 Action 类。

    • 6、找到需要调用的 Action 类后,ActionProxy 会创建一个 ActionInvocation 的实例。

    • 7、ActionInvocation 在调用 Action 的过程之前,会先依次调用相关配置拦截器(Intercepter),执行结果返回 结果字符串。

    • 8、ActionInvocation 负责查找 结果字符串 对应的 Result,然后执行这个 Result,再返回对应的结果视图(如JSP等等)来呈现页面。

    • 9、再次调用所用的配置拦截器(调用顺序与第7步相反),然后响应(HttpServletResponse)被返回给浏览器。

    Struts2 的优点

    下面列举 Struts2 的一些主要优点。

    • Struts2 是非侵入式设计,即不依赖于Servlet API 和 Struts API.

    • Struts2 提供了强大的拦截器,利用拦截器可以进行 AOP编程(面向切面的编程),实现如权限拦截等功能。

    • Struts2 提供了类型转换器,可以很方便地进行类型转换,例如将特殊的请求参数转换成需要的类型。

    • Struts2 支持多种表现层技术,如 JSP、FreeMarker、Velocity 等。

    • Struts2 的输入验证可以对指定的方法进行验证。

    前面对Struts进行了简单的介绍,接下来以最经典最简单的 Hello World 为例,讲解 Struts2 的一些基本原理和运用。

    开发准备

    用 Struts2 写一个 Hello World,当然你需要先安装好 Struts2(Struts2,Eclipse、Tomcat 均已经集成到实验环境中;另外除非特别说明,否则后续课程中的 Struts 均指 Struts2)。

    实验楼环境中已经内置了 struts-2.3.24。

    此处输入图片的描述

    打开 Xfce 终端,输入下面的命令将 /opt/struts-2.3.24 链接到当前 /home/shiyanlou 目录:

    cd /home/shiyanlou
    ln -s /opt/struts-2.3.24
    

    再进入到 struts2 目录:

    $ cd struts-2.3.24
    $ ls
    

    我们可以看到 struts2 的组成(绿色的为文件夹),也是我们需要了解的:


    此处输入图片的描述
    • apps 文件夹包含了多个 example 示例应用的压缩包。

    • docs 文件夹包含了 struts 官方的帮助文档。

    • lib 文件夹包含了 struts 提供的类库 jar 包。

    • src 文件夹包含了 struts 全部框架的源代码。

    项目文件结构

    此处输入图片的描述

    实验步骤

    1 新建 Web 项目工程

    现在,让我们开始来编写 Hello World 示例程序。

    首先在 Eclipse 里新建一个 Web 工程(Dynamic Web Project):

    图片描述信息

    键入项目名称,可以看到 Tomcat 已经被集成到 Eclipse 中,其他配置默认不变:

    图片描述信息

    点击 Next,在这里 注意勾选 “自动生成 web.xml” 这个选项:

    图片描述信息

    工程新建完成后,项目的大致结构如下:

    图片描述信息

    2 Hello World 的 Action

    接下来我们在项目的 HelloWorldStruts2/Java Resources/src 路径下,新建包和类,例如:

    图片描述信息

    HelloWorldAction.java 中添加如下代码:

    package shiyanlou;
    
    public class HelloWorldAction {
        
        private String name;
        
        public String execute() throws Exception {
            
            if ( getName().equals("") || getName() == null )
                return "error";
            
            return "success";
        }
        
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
             this.name = name;
         }
    }
    

    上面提到了项目的结构,现在我们就需要在 HelloWorldStruts2/WebContent/WEB-INF/lib 目录下导入必要的依赖库 jar 包,jar 包位于 struts-2.3.24/lib 下,直接复制粘贴即可。以下为必要的几个 jar 包列表:

    图片描述信息

    3 struts.xml 配置文件

    我们需要解压一个示例应用,以得到其中的 struts.xml 等配置文件,复制并修改成我们自己项目需要的配置文件。路径为 /home/shiyanlou/struts-2.3.24/apps,以第一个为例:

    提示:如果右键菜单中没有解压选项。可以在终端中使用jar -xvf 文件名命令进行解压。

    图片描述信息

    解压后,在 /home/shiyanlou/struts-2.3.24/apps/WEB-INF/src/java/ 中找到 struts.xml 配置文件,将其复制到我们的项目工程目录 HelloWorldStruts2/Java Resources/src 下面:

    图片描述信息

    我们需要修改这个 struts.xml 配置文件,修改的时候注意要以 “右键->Open With->Text Editor” 打开,修改如下:

    <?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>
    
        <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    
        <package name="shiyanlou" extends="struts-default">
            <action name="hello" class="shiyanlou.HelloWorldAction" method="execute">
                <result name="success">/HelloWorld.jsp</result>
                <result name="error">/Error.jsp</result>
            </action>
        </package>  
    
    </struts>
    

    上面的配置文件,struts 是根元素。 DynamicMethodInvocation 表示设置常量实现动态调用。packagename 为每一个package的唯一标识,这个标识不能重复,extends 可以指定本package集成另外一个package的所有配置。action 表示要执行的操作,action 中的name 为 action 标识,class 为指定由哪个类来处理这个action,method 则指定了相应类中的具体方法。另外注意 action 中的类名需要和你自己命名的一致。<result> 标签下定义了根据不同返回值,做出不同响应的JSP页面,默认目录在 WebContent 下面。

    4 JSP 页面

    此时我们来新建上面那两个响应页面。在 WebContent 目录下新建一个 JSP 页面命名为 HelloWorld.jsp,添加如下代码:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Hello World</title>
    </head>
    <body>
        Hello World, Welcome! <s:property value="name"/>
    </body>
    </html>
    

    taglib prefix="s" 表示引入的标签,比如你要在JSP页面里写C代码,就需要引入 c 标签。

    我们再新建 Error.jsp 页面,表示出错时的响应页面,添加如下代码:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Hello World</title>
    </head>
    <body>
        You did not have entered a name!
    </body>
    </html>
    

    此外我们还需要在WebContent目录下新建一个 index.jsp 文件,作为初始响应 action 的页面。添加如下代码:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
       <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Hello World</title>
    </head>
    <body>
       <h1>Hello World Struts2</h1>
       <form action="hello">
          <label for="name">Please enter your name</label><br/>
          <input type="text" name="name"/>
          <input type="submit" value="Enter"/>
       </form>
    </body>
    </html>
    

    5 web.xml 文件

    最后再来修改 web.xml 文件,配置 struts 过滤器等,修改为如下代码:

    <?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>HelloWorldStruts2</display-name>
      <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.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
    </web-app>
    

    6 运行测试

    注:由于在线环境的资源问题,这里启动tomcat比较慢,需要大家耐心等待几分钟。如果遇到 Tomcat 启动超时的问题,请按照下图的方法延长 Tomcat 的启动时间。

    此处输入图片的描述

    右击 HelloWorldStruts2 工程,Run As->Run on Server,保持默认选项不变,点击Finish,一会儿即可看到结果:

    图片描述信息

    输入一个名字 shiyanlou:

    图片描述信息

    字符为空时,提示信息:

    图片描述信息

    自此,一个简单的hello world就写好了,通过这个简单的例子应该学会了如何运用Struts框架了吧,想要学习更多的运用及深入学习Struts框架,点击【Struts框架教程】即可哦~

    最后

    文章所有内容均截选自实验楼教程:【Struts框架教程】,该教程共7节内容,实验列表如下:

    image.png

    点击【Struts框架教程】即可学习后续内容。

    相关文章

      网友评论

        本文标题:Struts框架入门教程

        本文链接:https://www.haomeiwen.com/subject/owtoyxtx.html