Struts2教程二——Hello World Using Struts 2

假设我们建一个叫做Hello World的简单例子,可以返回一个欢迎页面,建立了一个空的Struts2 web应用后,还需要一下四步:

  1. 建立一个存储欢迎消息的类(the model)
  2. 建立一个server page显示消息(the view)
  3. 建立一个Action类控制user,model和view之间的交互(the controller)
  4. 建立一个映射文件struts.xml映射Action类和view
    通过创建这些组件,我们分开了三个部分:tview,model 和controller. ,这可以是我们在应用变得更复杂时更易于管理

    下面开始敲代码

    本篇教程假设你以完成 How To Create A Struts 2 Web Application 的学习

代码

写一个model类存储message,一个view显示message,一个Action类进行控制,一个配置文件映射所有组件

Step 1 - 写一个MessageStore.java

以Ant版本为例,在src目录下建立MessageStore.java文件,注意在包所在路径下

注意JavaDoc注释被忽略,源码中有注释
Message.java
package org.apache.struts.helloworld.model;

public class MessageStore {
	
	private String message;
	
	public MessageStore() {
		
		setMessage("Hello Struts User");
	}

	public String getMessage() {

		return message;
	}

	public void setMessage(String message) {

		this.message = message;
	}

}

注意message的getter和setter方法,Struts2框架要求在view中显示的对象要符合JavaBean风格规定

Step 2 - 写一个Action类HelloWorldAction.java

Action类作为Controller,回应用户动作,一个或多个Action类的方法被执行, 并且一个String结果被返回,基于返回的String,一个特定的page被发回

代码如下:

HelloWorld.java
package org.apache.struts.helloworld.action;

import org.apache.struts.helloworld.model.MessageStore;
import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {

	private static final long serialVersionUID = 1L;

	private MessageStore messageStore;
	
	public String execute() throws Exception {
		
		messageStore = new MessageStore() ;
		return SUCCESS;
	}

	public MessageStore getMessageStore() {
		return messageStore;
	}

	public void setMessageStore(MessageStore messageStore) {
		this.messageStore = messageStore;
	}

}

Struts 2框架创建一个HelloWorldAction对象,并调用execute 方法回应用户动作(通过点击超链接向Servlet容器发送一个特定URL)

本例中,execute方法创建一个MessageStore对象并返回一个String常量SUCCESS

注意MessageStore的getter和setter方法,因为我们要在view page中使用MessageStore 对象,所以要遵循JavaBean规范提供getter和setter方法

Step 3 - 写一个View HelloWorld.jsp

我们需要一个server page显示MessageStore中存储的message,在WebContent目录下创建下面文件

HelloWorld.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!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=ISO-8859-1">
<title>Hello World!</title>
</head>
<body>
    <h2><s:property value="messageStore.message" /></h2>
</body>
</html>

taglib标签告诉Servlet容器此页面使用Struts 2标签,标签前缀为s

s:property标签显示HelloWorldAction类getMessageStore方法的返回值,返回一个MessageStore 对象,通过在messageStore后加.message告诉Struts 2框架一会调用messageStore对象的getMessage方法。getMessage方法返回一个String,这就是我们s:property标签要显示的内容

下篇教程学习更多的关于标签的内容

Step 4 - 在struts.xml中加入Struts配置

我们要映射URL,HelloWorldAction类,还有HelloWorld.jsp。该映射告诉Struts 2框架哪个类回应客户动作,哪个方法被执行,什么view被发回(通过方法返回的String结果)

在src目录下编辑struts.xml文件,加入一个action映射,在package标签之间,在name为index的action标签后,完成后如下:

struts.xml
<?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>

  <constant name="struts.devMode" value="true" />

  <package name="basicstruts2" extends="struts-default">

  <action name="index">
    <result>/index.jsp</result>
  </action>
		
  <action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">
    <result name="success">/HelloWorld.jsp</result>
  </action>

</package>

</struts>

Step 5 - 加入一个URL Action

在index.jsp文件中加入一个Action URL,用户点击它通知Struts 2 framework执行HelloWorldAction的execute方法并发回HelloWorld.jsp页面

完成后文件如下:

index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!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=ISO-8859-1">
<title>Basic Struts 2 Application - Welcome</title>
</head>
<body>
<h1>Welcome To Struts 2!</h1>
<p><a href="<s:url action='hello'/>">Hello World</a></p>
</body>
</html>

Struts的url标签请求hello action,hello action映射到HelloWorldAction类,执行execute方法。用户点击上面URL会导致Struts 2 framework执行HelloWorldAction的execute方法,之后返回String success,HelloWorld.jsp页面将会返回

Step 6 - 发布并运行 Application

创建war文件

复制war文件到Servlet容器,部署成功后键入URLhttp://localhost:8080/Hello_World_Struts2_Ant/index.action

运行成功后页面如下:


点击Hello World连接会看到HelloWorld.jsp页面:


代码工作原理

浏览器向web server发送一个URL,http://localhost:8080/Hello_World_Struts2_Ant/hello.action.

  1. 容器接收hello.action发来的请求,根据web.xml配置,容器发现所有的请求需经过org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,包括*.action请求,StrutsPrepareAndExecuteFilter是框架的入口点。
  2. framework寻找叫hello的映射,发现是"HelloWorldAction"。framework初始化Action调用Action的execute方法
  3. execute方法创建MessageStore对象并返回SUCCESS。framework检查action映射,找到SUCCESSresult对应的页面。framework告诉容器返回HelloWorld.jsp
  4. 处理HelloWorld.jsp页面时,<s:property value="messageStore.message" />标签调用HelloWorldAction的gettergetMessageStore,然后调用返回的MessageStore对象的gettergetMessage,将属性写入页面返回
  5. 一个纯粹的HTML页面被返回到浏览器。

记住

framework通过Actions处理请求,Action类返回像SUCCESSERRORINPUT的result。根据struts.xml的映射,result标签name属性对应内容选择一个页面或者另一个action或者一些其他的web资源。(image,PDF)。

通常返回的server page会有动态的数据,为了方便的显示这些数据,framework提供了许多相似于HTML标签的标签来建立一个server page

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值