Struts2学习(二)--使用struts2编写helloworld

在 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项目,在这就不在说了

代码

完整的项目结构
这里写图片描述

步骤 1 - 创建模型类 MessageStore.java

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 规范.

步骤 2 - 创建 Action类 HelloWorldAction.java

我们需要一个 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方法.

步骤 3 - 创建视图 HelloWorld.jsp

我们需要服务器页面来展示存储在模型类 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 标签要显示的值.

步骤 4 - 添加 Struts配置在struts.xml

我们需要使用映射来捆绑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>

步骤 5 - 创建URL 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>

步骤 6 - 运行项目

通过 URL访问,将会出现如下的结果页面:
这里写图片描述
点击超链接后
这里写图片描述

代码如何工作

你的浏览器通过请求 URL发送请求到 web服务器.

  1. 容器接收来自web 服务器的请求 hello.action. 根据在 web.xml 加载的配置,容器发现所有请求被路由到org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter, 包括 *.action请求. StrutsPrepareAndExecuteFilter 是框架的入口点.
  2. 框架查找一个 action 映射名字为 “hello”, 并发现该映射关联一个类 “HelloWorldAction”. 框架初始化该Action 并调用该 Action的execute方法.
  3. execut方法创建一个 MessageStore 对象并返回一个 SUCCESS. 框架检查action映射来发现当返回 SUCCESS哪个页面将被加载. 框架告诉容器渲染资源 HelloWorld.jsp作为响应
  4. 在 HelloWorld.jsp 页面处理过程中, 标签调用HelloWorld Action 的 getter方法 getMessageStore并调用MessageStore 对象的getMessage,并且标签把该结果合并到响应中.
  5. 一个纯 HTML响应发回到浏览器.

必须记住

框架使用 Action来处理 HTML表单和其它请求. Action 类返回结果名如 SUCCESS, ERROR或 INPUT. 基于从 struts.xml加载的配置信息, 一个给定结果名将选择一个页面 (如本例), 另外一个action, 或其它资源 (image, PDF).

当一个服务器页面被渲染, 通常包含 Action提供的动态数据.为了使得显示动态数据简单, 框架提供了一个标签的集合和HTML 标签一起来创建服务器页面 .

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值