Struts由入门到精通(第一章)- 第一个struts应用程序(一)

第一个struts应用程序

上面我们了解关于Struts的一些基本知识。Struts使用基于MVC设计模式的Model 2架构。下面我们来运行第一个Struts应用程序,来让你快速入门。

 

1.5.1 获取和安装Jakarta Struts项目

 

在前面,我们获取了最新版本的Struts包。接下来,我们为了执行这个应用做一些准备工作。

(1)   在应用目录<CATALINA_HOME>/webapps/下建立自己一个应用目录MyStruts

(2) 复制StrutsJAR文件到<CATALINA_HOME>/webapps/MyStruts/WEB-INF/lib目录下,jar文件列表如下:

Struts.jar

commons-beanutils.jar

commons-collections.jar

commons-dbcp.jar

commons-digester.jar

commons-logging.jar

commons-pool.jar

commons-services.jar

commons-validator.jar

(3) <CATALINA_HOME>/webapps/MyStruts/WEB-INF/下创建web.xml,在文件中添加如下代码:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application

2.3//EN"

"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">

<web-app>

</web-app>

(4) 创建一个strut-config.xml文件,复制到<CATALINA_HOME>/webapps/MyStruts /WEB-INF/ 目录下。struts-config.xmlStruts应用的部署描述文件。它用来把MVC组件组合在一起。它通常被放置在<CATALINA_HOME>/webapps/ webappname/WEB-INF/目录下,我们将会频繁的使用到它。空的struts-config.xml如下:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config

PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"

"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>

<message-resources

parameter="MyStruts.ApplicationResources"/>

</struts-config>

注意:如果你使用Struts 1.1 b1版本,在struts-config.xml文件中你需要添加<message-resources />元素。现在我们只是简单的创建struts-config.xml文件,对于每个元素的详细介绍我们将放在后面章节“国际化你的struts应用”。在这章我们将创建struts应用中所有必须的组件。当你开始设计和开发你的Struts应用时,你必须安装和培植你的struts组件。

 

1.5.2 创建你的第一个Struts应用

 

现在可以开发Struts应用了。我们的应用由查询学生号码的简单的JSP页面来完成,它将返回被查询学生的名称。我们会通过这个例子来说明在创建Struts应用中必须执行哪些步骤。因为Struts技术来源于MVC设计模式,所以在所有基于Struts的开发中,你可以遵循MVC模式这种标准来进行处理。处理方式为:从视图开始,控制器对象操纵模型组件来为视图服务。

这个处理过程通过下面步骤来实现:

(1) 定义并创建实现某一功能的相关视图,它们是应用中的用户接口。在struts-config.xml这个struts配置文件中所有的ActionForm 就是我们要创建的视图。

(2) 创建控制器组件。

(3) struts-config.xm文件中定义视图,控制器之间的关系。

(4) web.xml文件中配置启动struts的一些必要信息。

(5) 启动应用。

上述步骤只是对Struts开发做了概要描述,在接下来的章节我们将会对这些步骤进行比较细致的描述。下面我们来一一了解。

 

1. 创建视图

 

在创建struts应用的视图时(也就是上面所说的MVC模式的V),我们会先创建一个包含Struts标签的JSP文件。

当前有三个主要的struts标签,Bean, HTMLLogic。在第5章我们会集中关注在这几个标签库上,但这章我们在视图中主要关注于HTML标签库。在开始我们的应用时,我们首先要需要描述视图接口。在下面的应用中有两个视图:query.jspresult.jsp

(1) query视图

query视图有query.jsp文件来表现,是我们第一个看到的视图。它用来查询学生和提交

请求到相应的Action中。query.jsp源文件如下:

<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html>
<head>
<title>MyStruts Struts Application</title>
</head>
<body>
<table width="500"
border="0" cellspacing="0" cellpadding="0">
<tr>
<td>&nbsp;</td>
</tr>
<tr bgcolor="#36566E">
<td height="68" width="48%">
<div align="left">
<img src="images/hp_logo_MyStruts.gif" width="220" height="74">
</div>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>
<html:form action="search.do" name="searchForm" type="MyStruts.SearchForm" >
<table width="45%" border="0">
<tr>
<td>Symbol:</td>
<td><html:text property="symbol" /></td>
</tr>
<tr>
<td colspan="2" align="center"><html:submit /></td>
</tr>
</table>
</html:form>
</body>
</html>

 

如你看到的query视图,除了form标签外,它就象一个包含数据集合的HTML页面。HTML页面中我们把FORM标签改为用Struts标签<html:form />来替换。

 
2.
创建控制器组件

 

ActionForm用来保存视图中表单输入参数的实际数值(也就是上面所说的MVC模式的C)。如我们在前面章节提到的,当一个<html:form />标签被提交,Struts框架把对应的数据组装到ActionForm实例中。Struts框架通过JavaBean影射,因此ActionForm中的成员变量必须遵守JavaBean的命名规则。举例如下:

private String symbol;

public void setSymbol(String symbol);

public String getSymbol();

在这个例子中有一个简单成员变量symbol。在获取或设置成员变量的数值时必须带有前缀setget,在setget后面的成员变量的第一个字符必须为大写。列表3-2ActionForm的源代码

SearchForm.java.

package MyStruts;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
public class SearchForm extends ActionForm {
private String symbol = null;
public String getSymbol() {
return (symbol);
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public void reset(ActionMapping mapping,
HttpServletRequest request) {
this.symbol = null;
}
}

 

 

 

在这个类中没有特殊的东西,它只是简单的继承org.apache.struts.action.ActionForm,以及每个ActionForm实例对每个成员变量必须实现的get,set方法。在这个ActionForm  bean中有一个特殊的reset()方法。每一个使用SearchForm的请求都会执行reset()方法。这个方法的目的是为了重置SearchForm的成员变量,以便下一个应用使用。

注意:reset()方法ActionMapping类来被引用。关于ActionMapping类我们暂时可以忽略,将在后面章节中有详细的描述。

编译SearchForm类,移到<CATALINA_HOME>/webapps/MyStruts/WEB-INF/classes/ MyStruts目录下,在<CATALINA_HOME>/webapps/MyStruts/WEB-INF/struts-config.xml文件中添加<form-bean name="searchForm" type="MyStruts.SearchForm"/>这是为了让Struts应用知道SearchForm如何被引用。

 

(2) result视图

我们最后的视图是result.jsp。视图在用户成功的寻找到学生信息后显示。它是没有特殊struts功能的非常简单的JSP页面。

result.jsp源程序如下:

----------------------------------------------------

<html>

<head>

<title>MyStruts Struts Application</title>

</head>

<body>

<table width="500" border="0" cellspacing="0" cellpadding="0">

<tr>

<td>&nbsp;</td>

</tr>

<tr bgcolor="#36566E">

<td height="68" width="48%">

<div align="left">

<img src="images/hp_logo_MyStruts.gif" width="220" height="74">

</div>

</td>

</tr>

<tr>

<td>&nbsp;</td>

</tr>

<tr>

<td>&nbsp;</td>

</tr>

<tr>

<td>&nbsp;</td>

</tr>

<tr>

<td>

姓名 : <%= request.getAttribute("name") %>

</td>

</tr>

<tr>

<td>&nbsp;</td>

</tr>

</table>

</body>

</html>

  -----------------------------------------------------------------

 

上面的JSP中包含简单一个简单的代码行,它用HttpServletRequest获取特定的学生的姓名。这个姓名数据通过Action对象中的HttpServletRequest实例来设置。

 

3. 创建控制组件

 

Struts应用中,控制器由两个组件组成(也就是上面所说的MVC模式的M)。这两个组件是org.apache.struts.action.ActionServletorg.apache. struts.action.Action类。在大多数的Struts应用只存在一个org.apache.struts.action.ActionServlet实现(实例),但存在多个org.apache.struts.action.Action实现(多个继承实例)。org.apache.struts.action.ActionServlet用来控制客户端请求和决定哪个org.apache.struts.action.Action实例来处理请求。在我们创建的简单应用中,缺省的ActionServlet已经足以满足我们的应用需求了,你不需要再实现特定的org.apache.struts.action.ActionServlet 

控制器的第二个组件是org.apache.struts. action.Action,和ActionServlet不同的是Action类在你的应用中必须扩展。这个类是你业务逻辑的开始部分。

例如我们寻找指定的学生的姓名。我们会创建一个从org.apache.struts.action.Action扩展的SearchAction。代码如下:

 

SearchAction.java

------------------------------------------------------------

package MyStruts;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

public class SearchAction extends Action {

protected String getName (String symbol) {

if ( symbol.equalsIgnoreCase("S0001") ) {

return “SUN”;

}

return null;

}

public ActionForward execute(ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response)

throws IOException, ServletException

{

String  name = null;

/

// Default target to success

String target = new String("success");

if ( form != null ) {

// Use the SearchForm to get the request parameters

SearchForm searchForm = (SearchForm)form;

String symbol = searchForm.getSymbol();

name = getName (symbol);

}

// Set the target to failure

if (name == null ) {

target = new String("failure");

}

else {

request.setAttribute("name ", name);

}

// Forward to the appropriate View

return (mapping.findForward(target));

}

}

-----------------------------------------------------------------

我们注意到SearchAction类有两个方法:getName () and execute()getName ()方法会返回一个姓名(如果提交的学生号代码为“S0001”)。request.setAttribute("name ", name);方法从ActionClass传递对象到View组件,以使JSP文件可以通过它们取回所对应的对象(<%= request.getAttribute("name") %>)。execute() 方法是SearchAction的主函数,在所有的Action类中必须被实现 。

4. 整合struts-config.xml文件

       struts-config.xml配置文件是整个 框架的主心骨。web.xml文件定义了一个请求到来应向何处转发后,后面的工作就全权

(1) 创建Web应用的配置文件

对于Struts应用,它的配置文件web.xml应该对ActionServlet类进行配置,此外,还应该声明Web应用所使用的Struts标签库,本例中声明使用了三个标签库: Struts BeanStruts HTMLStruts Logic标签库。web.xml的源代码。

 

 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

  "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>

  <display-name>myStruts Application</display-name>

 

 <!-- Standard Action Servlet Configuration  -->

  <servlet>

    <servlet-name>action</servlet-name>

    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

    <init-param>

      <param-name>config</param-name>

      <param-value>/WEB-INF/struts-config.xml</param-value>

    </init-param>

     <load-on-startup>2</load-on-startup>

  </servlet>

  <!-- Standard Action Servlet Mapping -->

  <servlet-mapping>

    <servlet-name>action</servlet-name>

    <url-pattern>*.do</url-pattern>

  </servlet-mapping>

  <!-- The Usual Welcome File List -->

  <welcome-file-list>

    <welcome-file>hello.jsp</welcome-file>

  </welcome-file-list>

  <!-- Struts Tag Library Descriptors -->

  <taglib>

    <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>

  </taglib>

</web-app>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值