本教程使用的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.devMode 为 true,是因为我们正工作在程序开发环境中,我们需要看到一些有用的日志信息。然后,我们定义了一个名为 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() 方法返回的。