在 Struts 2 web 应用中,当你单击一个超级链接或提交一个表单, 输入木有直接发送到另外一个页面而是一个你提供的 Action类. 在 Action 调用后一个Result 选择一个资源作为请求的响应. 资源通常是服务器页面, 但也可能是PDF 文件, 一个Excel 表格, 或Java applet窗口.
假设你想创建一个简单 “Hello World”示例来显示欢迎信息 .在设置好的空的基本 Struts 2 web 应用 (查看 如何构建一个Struts 2 Web 应用), 创建 “Hello World” 示例, 你需要做四个事情:
创建一个类来存储welcome消息( 模型)
服务器页面来展示消息 (视图)
创建一个Action类来控制 用户, 模型和视图之间的交互 ( 控制器)
创建一个映射 (struts.xml) 来组合 Action类和视图
为创建这些控件, 我们把工作流划为三个著名的关注点: View, Model和Controller. 分离的关注点使得维护应用越来越重要随着应用的复杂性.
让我查看该实例的模型类, Action, 服务器页面和映射.如果你喜欢, 启动你的 Java IDE, 并输入如下代码.
在 Struts2学习(一)–maven搭建Struts2框架的开发环境 已经讲了如何创建一个struts2项目,在这就不在说了
package com.lgh.struts2maven.model;
public class MessageStore {
private String message;
public MessageStore() {
setMessage("Hello , Java Struts2");
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
上面的模型类使用 public set 和get 方法来访问 private message String 属性. Struts 2 框架要求让视图(HelloWorld.jsp) 访问的对象都必须遵守 JavaBean 规范.
我们需要一个 Action 类作为控制器 . Action 响应用户动作(在本例动作指的是单击一个 HTML 超级链接并发送一个指定的 URL到 Servlet容器).一个或多个 Action类方法将被执行并返回一个 String 结果. 根据结果的值, 一个指定的页面 (在本例视图指的是 HelloWorld.jsp) 被渲染.
注意包和导入的类如下.
package com.lgh.struts2maven.action;
import java.util.Date;
import com.lgh.struts2maven.model.MessageStore;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import ognl.OgnlContext;
public class HelloWorldAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private MessageStore messageStore;
private static int helloCount;
public HelloWorldAction() {
}
@Override
public String execute() throws Exception {
messageStore = new MessageStore();
helloCount++;
return SUCCESS;
}
public MessageStore getMessageStore() {
return messageStore;
}
public void setMessageStore(MessageStore messageStore) {
this.messageStore = messageStore;
}
public int getHelloCount() {
return helloCount;
}
public void setHelloCount(int helloCount) {
HelloWorldAction.helloCount = helloCount;
}
}
helloCount 的作用时统计我们访问了多少次
Struts 2 框架将创建一个 HelloWorldAction 对象并调用 execute 来响应用户动作 (单击超级链接发送一个指定 URL 到 Servlet容器).
在上面的例子, MessageStore的execute方法执行并返回 String 常量 SUCCESS.
注意 public set 和get 方法和 private MessageStore 对象. 由于我们想让MessageStore 对象在页面可以访问 (HelloWorld.jsp) ,我们需要遵守 JavaBean格式 提供 get 和 set方法.
我们需要服务器页面来展示存储在模型类 MessageStore中的消息. 在 WebContent文件夹 创建如下的jsp.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!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>Insert title here</title>
</head>
<body>
<h2><s:property value="messageStore.message"/></h2>
<br>
<p>I've watched <s:property value="helloCount"/> times</p>
</body>
</html>
taglib指令告诉 Servlet 容器该页面将使用 Struts 2 标签并且这些标签使用前缀 s.
s:property 标签显示调用 HelloWorldAction 控制器类的 getMessageStore()方法的返回值. 该方法返回一个 MessageStore 对象. 通过在value属性添加 .message 到messageStore部分,我们告诉 Struts 2 框架我们将调用MessageStore 对象的getMessage 方法 。MessageStore 类的getMessage 方法返回一个String. 该 String 是 s:property 标签要显示的值.
我们需要使用映射来捆绑URL, HelloWorldAction类 (控制器)和
HelloWorld.jsp (视图) 在一起. 该映射告诉Struts 2框架那个类将响应用户的动作 (URL), 那个方法将被执行和根据 方法返回的 String结果那个视图将被渲染.
编辑struts.xml 文件来添加 action映射.放置 action节点 (action name=”hello”) 在 package 节点的开始和结束标签之间, 在name=”index” action 映射之后写 . 你的完整 struts.xml 配置应该如下所示:
<action name="hello" class="com.lgh.struts2maven.action.HelloWorldAction" method="execute">
<result name="success">/HelloWorld.jsp</result>
</action>
在 index.jsp (WebContent文件夹),让我们添加一个 Action URL,用户可以单击告诉 Sruts 2 框架来运行HelloWorldAction类的 execute方法并渲染 HelloWorld.jsp 视图.
首先在jsp顶部添加 <%@ taglib prefix=”s” uri=”/struts-tags” %>指令. 接着在 h1 标签之后添加 p 标签
“>Hello World
.你的新 index.jsp 内容应该如下:这里写代码片
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!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>Struts2 Test</title>
</head>
<body>
<h1>Hello Struts2</h1>
<br>
<h2><a href="<s:url action='hello' />">Hello World</a></h2>
</body>
</html>
你的浏览器通过请求 URL发送请求到 web服务器.
框架使用 Action来处理 HTML表单和其它请求. Action 类返回结果名如 SUCCESS, ERROR或 INPUT. 基于从 struts.xml加载的配置信息, 一个给定结果名将选择一个页面 (如本例), 另外一个action, 或其它资源 (image, PDF).
当一个服务器页面被渲染, 通常包含 Action提供的动态数据.为了使得显示动态数据简单, 框架提供了一个标签的集合和HTML 标签一起来创建服务器页面 .