且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

04 Struts2 Hello Word

更新时间:2022-08-22 10:20:48

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxdeng/article/details/81627250

本教程使用的Struts2版本是struts-2.5.16 希望读者保存一致

任何的 Struts 2 项目,我们将必须创建四个组件

序号 组件 & 描述
1 动作
创建一个包含完整的业务逻辑和控制用户,模型和视图之间的交互的动作类。
2 拦截器
如果需要,则创建拦截器,或者使用已存在的拦截器。这是控制器的部分。
3 视图
创建一个与用户交互的 JSP,它接受输入并且显示最后的信息。
4 配置文件
创建连接动作,视图和控制器的配置文件。这些文件是 struts.xml,web.xml,struts.properties。

1. 创建项目

1.1 Eclipse 下创建项目
启动你的 Eclipse,然后使用 File > New > Dynamic Web Project,并且输入项目名称为 HelloWorldStruts2  

2. 导入Struts2核心jar包

包名 包说明
commons-fileupload-x.x.x.jar Struts文件的上传和下载
commons-io-x.x.x.jar 文件读取
commons-lang-x.x.x.jar 为java.lang包提供扩展
commons-logging-x.y.z.jar
commons-logging-api-x.y.jar
freemarker-x.x.x.jar FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具
ognl-x.x.x.jar 支持ognl表达式
javassist-x.x.x.jar 分析、编辑和创建JAVA字节码的类库
struts2-core-x.x.x.jar Struts2的核心包
asm-*.jar 类似javassits
log4j-1.2.17.jar 日志类库

3. 在web.xml配置Strust2核心控制器filter

下一步是创建一个* web.xml* 文件,它是一个任何对 Struts 2 请求的入口点。Struts2 应用程序的入口点将是一个在部署描述符(web.xml)中定义的过滤器。因此,我们将在 web.xml 中定义一个 oforg.apache.struts2.dispatcher.FilterDispatcher 类。 web.xml 文件需要在 WebContent的WEB-INF 文件夹下创建。当你创建项目时,Eclipse 已经创建了初始的 web.xml 文件。所以,我们只需要修改它,如下所示:

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

4. 创建struts.xml

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

</struts>

5. 编写控制器Action

Action 类是 Struts 2 应用程序的关键,并且我们在 action 类中实现大部分的业务逻辑。所以让我们在 Java Resources > src 下的包名 com.javaee.struts2.action 中创建一个java 文件 HelloWorldAction.java
==Action 类的要求==
- 方法是public的
- 返回值为String类型

public class HelloWorldAction{
   private String msg;

    public String execute() throws Exception {
        msg = "Hello Word Strust2 !!!";
        return "success";
    }
    public String getMsg() {
      return name;
    }
    public void setMsg(String name) {
      this.name = name;
    }
}

当用户点击一个 URL 时,Action 类响应用户动作。执行一个或多个 Action 类中的方法并且返回一个字符串结果。基于结果的值,将呈现一个指定的 JSP 页面。

6. 在struts.xml配置文件中注册Action

<?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:包,用于对Action进行封装
        name:包名,根元素下可以有多个包,彼此不能重名
        extends:继承,用于指定继承的包,相当于将继承包下的配置信息复制到当前包
        namespace:命名空间,用于规定Action的访问路径,必须"/"开头    -->
    <package name="HelloWord" namespace="/" extends="struts-default">
        <!--action:业务控制器,用于注册业务控制器组件
            name:action名称,用于规定Action的访问路径
            class:业务控制器组件,用于指定业务控制器对应的类
            method:方法,用于指定访问当前action时要调用的方法
        -->
        <action name="hello" class="com.javaee.struts2.action.HelloAction" method="execute">
            <!--result:输出组件,用于转发、重定向、直接输出
                name:名称,一个action下可以有多个result,彼此不能重名
                默认值转发,元素内设置转发的页面
            -->
            <result name="success">
                /hello.jsp
            </result>
        </action>
    </package>
</struts>

关于上述配置文件有几点需要注意。在这里我们设置常量 struts.devModetrue,是因为我们正工作在程序开发环境中,我们需要看到一些有用的日志信息。然后,我们定义了一个名为 helloworld 的包。当你想要把你的动作分成一组时,创建一个包是有用的。在我们的例子中,我们命名我们的动作为 “hello”,它对应着 URL /hello.action 和通过 HelloWorldAction.class 进行备份。当 URL /hello.action 调用时,HelloWorldAction.class 的执行方法是运行的方法。如果执行方法的结果返回 “success”,然后我们把 HelloWorld.jsp 呈现给用户。

7. 创建JSP页面

我们需要一个 JSP 提交最后的信息,当一个预定义的动作发生时,这个页面会被 Struts 2 框架调用,这种映射将被定义在 struts.xml 文件中。所以让我们在 Eclipse 项目的 WebContent 文件夹中创建下面的 jsp 文件 HelloWorld.jsp。为了做到这个,在项目资源管理器的 WebContent 文件夹上单击右键,选择 New >JSP File。

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
    ${msg }
    <hr />
    <s:property value="msg" />
</body>
</html>

标签库指令告诉 Servlet 容器这个页面将使用 Struts 2 的标签,而且这些标签将在 s 之前。 s:property 标签显示动作类属性 “msg> 的值,它是由 HelloWorldAction 类的 getMsg() 方法返回的。