CSDN博客

img kui

Struts程序各文件之间的关系(1)

发表于2004/6/14 10:31:00  1244人阅读

Struts程序各文件之间的关系

 

 

下面介绍《如何实现最简单的Struts程序》例子中各文件之间的关系及源代码分析。

 

[相关链接]

JavaWebStudio系列开发工具Visaul Struts版本简介http://dev.csdn.net/develop/article/28/28871.shtm

如何实现最简单的Struts程序http://dev.csdn.net/develop/article/28/28946.shtm

Struts下拉框的实现http://dev.csdn.net/develop/article/28/28956.shtm

Sruts单选框的实现》http://dev.csdn.net/develop/article/29/29042.shtm

Struts复选框的实现http://dev.csdn.net/develop/article/29/29043.shtm

开发环境:Java Web Studio系列开发环境visual strutst版本。

最新JavaWebStudio下载地址:ftp://210.36.64.79/kui

 

 

[背景知识]

Struts使用MVC结构;图2.1所示的逻辑图描述了框架的高层结构。

我们现在讨论图中的每个元素。

一个基于Struts的应用程序的表示层(view)使用Struts标签库(taglibs)构建。来自客户的请求被传递给叫ActionServletservlet,它作为controller.使用了Struts的应用程序,所有需要通过框架的请求都通过ActionServlet传递。这个ActionServlet把数据从请求传递到ActionForm JavaBean

                                             

 

 

ActionForm是代表从一个表单View组件输入数据的JavaBean。这些表单由JSP用Struts html标签库产生。这个beam由  ActionServlet生成,带request参数,它还请求ActionForm来验证用户提交数据的合法性。

ActionServlet通过定义一组ActionMapping来配置。一个ActionMapping是一个对象,它将请求中的URL映射到由应用程序开发者提供的处理请求的组件。ActionServlet和ActionMapping的配置在XML配置文件中完成。

专用的应用程序用于处理请求的组件叫Action类。在MVC结构中,它们代表模型。它们可能用于验证用户输入的合法性,假如在信息处理过程中出现了应用程序错误,Action类可以创建一个error对象的实例,然后保存庆HTTP request对象中。如果在Action类中的逻辑成功地被招待类给Controller传递一个ActionForward对象,代表所需的描绘响应的JSP。ActionForward有两种:专门转发给特定的Action类或全局转发(任何一个Action类可以把这些ActionForwards转给Controller)。

 

 

本例主要文件之间的关系:

 

 

   初学者常会不清楚HelloWord.jspHelloWordForm.javaHelloWordAction.javaHelloWordOut.jsp这四个文件是如何关联在一起的,实际上它们正是通过struts-config.xml配置实现的。这些配置是Struts程序设计中的一个难点,幸运的是,在Java web StudioVisual Struts中,所有这些配置都是在Struts文件向导中自动完成的。

 

[关键源代码分析]

1  输入JSP页面文件

    输入JSP页面文件名是hello.jsp,主要实现一个带有文本框的表单,文件代码如下:

<%@ page contentType="text/html;charset=GB2312" language="java" %>

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

<%@ taglib uri="/WEB-INF/struts-template.tld" prefix="template" %>

<html:html>

<head>

<title></title>

<html:base/>

</head>

<body bgcolor="white">

<html:form  action="/ HelloWordAction.do"  method="post">

      <html:text property="mybeanvariable1" />

      <html:submit value="提交" />

      <html:reset value="重写" />

  </html:form>

</body>

</html:html>

 

    首先是把本页定义为支持中文显示,中文编码采用GB2312格式,程序语言为Java:

<%@ page contentType="text/html;charset=GB2312" language="java" %>

接着定义支持四种Struts标签bean、html、logic和template,在该文件中没用到的标签可以去掉相应的定义,如果在文件中还需要用到自定义标签,也需要在这里加入相应的定义:

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

<%@ taglib uri="/WEB-INF/struts-template.tld" prefix="template" %>

<html:html>就不用说了。<html:base/>标签对应HTML的<BASE>标签,用来设定测览器中文件的绝对路径,然后在文件中只需写下文件的相对位置,在测览器中测览的时候这些位置会自动附在绝对路径后面,成为完整的路径。在文档中所有相对地址形式的URL是相对于这里定义的UTRL而言的。一篇文档中的<BASE>标记不能多于一个,必须放于<head>标签内,并且应该在任何包含URL地址的语句之前定义。<html:form>这里用了黑体字,表示是要重点讲解的地方。

<html:form  action="/ HelloWord Action.do"  method="post">

      <html:text property="mybeanvariable1" />

      <html:submit value="提交" />

      <html:reset value="重写" />

  </html:form>

<html:form>标签定义了一个表单,提交时的目标URL是“/helloAction.do”,方法是“post”,Post方法是将用户在表单中填写的数据包含在表单的主体中一起传送到服务器上的处理程序中该万法没有字符的限制它包含了ISO10646的字符集是一种邮寄的万式在测览器的地址栏不显示提交的信息这种万式传送的数据是没有限制。当然也可以选择Get方法,Get方法是将表单内容附加在URL地址后面,所以对提交信息的长度进行了限制,最多不可以超过8192个字符,如果信息大长,将被截去,从而导致意想不到的结果,而且不能传送非ASCII码的字符。表单内包含一个文本输入框<html:text>,它的值与Bean中属性为"mybeanvariable1"的变量相对应,如果结mybeanvariable1付了初值,则在启动这个页面时文本框中就显示默认的mybeanvariable1初值。另外表单内还包含了两个最常见的提交按钮<html:submit value="提交" />和重写按钮<html:reset value="重写" />。

 

2  输出JSP页面文件

输出JSP页面文件名是HelloWordOut.jsp,主要实现输入文件提交的文本框的值,文件代码如下:

<%@ page contentType="text/html;charset=GB2312" language="java" %>

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

<html:html>

<head>

<title></title>

<html:base/>

</head>

<body bgcolor="white">

<html:html>

<head>

<title></title>

<html:base/>

</head>

<body bgcolor="white">

<bean:write  name="HelloWordForm"  property="mybeanvariable1" />

</body>

</html:html>

</body>

</html:html>

输出文件与前面输入文件唯一不同的是把<html:form>标签变成了<bean:write>标签:

<bean:write  name="helloForm"  property="mybeanvariable1" />

<bean:write>标签实现Bean属性值的输出,其中name保存Bean名,这里是“helloForm”,从后面的配置文件可以看出,它对应的类是helloForm类;property保存属性名,这里是“mybeanvariable1”,与输入文件的文本框取的属性名一至。

 

3  ActionForm Bean文件

Hello程序的ActionForm Bean文件实现只包含一个变量的Bean,文件名是HelloWordForm.java,文件代码如下:

package  emptyprj;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionError;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionMapping;

public final class HelloWordForm extends ActionForm 

{

        private String mybeanvariable1;

        public String getMybeanvariable1()

        {

            return (this.mybeanvariable1);

        }

        public void setMybeanvariable1(String mybeanvariable1)

        {

            this.mybeanvariable1=mybeanvariable1;

        }

}

首先是定义package

package  emptyprj;

这是选用了JSPStudio默认的packageemptyprj,需注意的是package名要与目录名对应。接着引入了ActionForm Bean设计中常用的五个类HttpServletRequest、ActionError、ActionErrors、ActionForm和ActionMapping,这是JSPStudio自动加入的,实际上HelloWordForm类只用于ActionForm类,其它部分可以删除,但这里保留它以方便以后扩展程序时用。

        import javax.servlet.http.HttpServletRequest;

        import org.apache.struts.action.ActionError;

        import org.apache.struts.action.ActionErrors;

        import org.apache.struts.action.ActionForm;

        import org.apache.struts.action.ActionMapping;

接下来就是定义了HelloWordForm、一个参数mybeanvariable1和它对应的get()、set()函数,这与普通Bean定义的方法一模一样。

 

0 0

相关博文

我的热门文章

img
取 消
img