任何的 Struts 2 项目,我们将必须创建四个组件
序号 | 组件 & 描述 |
---|---|
1 | 动作<br/>创建一个包含完整的业务逻辑和控制用户,模型和视图之间的交互的动作类。 |
2 | 拦截器<br/>如果需要,则创建拦截器,或者使用已存在的拦截器。这是控制器的部分。 |
3 | 视图<br/>创建一个与用户交互的 JSP,它接受输入并且显示最后的信息。 |
4 | 配置文件<br/>创建连接动作,视图和控制器的配置文件。这些文件是 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的核心包 |
xwork-core-x.x.x.jar | xwork的核心包 |
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.FilterDispatcher</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() 方法返回的。