Sym - 一个用 Java 实现的现代化社区平台 • 源码 • 注册

Pipe - 小而美的开源博客平台 • 体验 • 皮肤
Solo - 一个用 Java 实现的博客系统,为你或你的团队创建个博客吧! • 源码下载 
Wide - 一个基于 Web 的 Go 语言 IDE • 教程试用

初学者入门:Structs 中基本配置入门

1. 为 Structs 应用配置 Web.xml 文件

第一步: 配置 ActionServlet


  action
  
org.appache.structs.ActionServlet

  
  
  
  action
  *.do
  
  

注意: 不管应用中包含多少个子应用, 都只需配置一个 ActionServlet, 因为 ActionServlet 支持多线程, 目前的 Structs 框架只允许在应用中配置一个 ActionServlet。

第二步:初始化参数对 Servlet 的运行环境进行初始化配置。


  
action

  
org.appache.structs.ActionServlet

  
  config
  
/WEB-INF/structs-config.xml

  
  
  

Struts1.1 中用到的初始化参数

config

以相对路径的方式指明 Struts 应用程序的配置文件位置。如不设置,则默认值为 / WEB-INF/struts-config.xml。

config/sub1   以相对路径的方式指明子应用程序的配置文件位置,一般来说,很少用到子应用程序,在此不多描述。

debug      设置 Servlet 的 debug 级别,控制日志记录的详细程度。默认为 0,记录相对最少的日志信息。

detail    

设置 Digester 的 debug 级别,Digester 是 Struts 框架所使用的用来解析 xml 配置文件的一个框架,通过该设置,可以查看不同详细等级的解析日志。默认为 0,记录相对最少的日志信息。

第三步:配置欢迎清单

当客户访问 Web 应用时,如果仅仅给出 Web 应用的 Root URL,没用指定具体的文件名,Web 容器会自动调用 Web 应用的欢迎文件。


  
welcome.jsp

  
index.jsp

  
  

说明:可以包含多个子元素,首先查找第一个文件。

由于元素中不能配置 Servlet 映射,因此不能直接把 Structs 的 Action 作为欢迎文件,可以采用一种变通的方法来实现在欢迎文件中调用 Structs Action。首先,在 Structs 配置文件中为被调用的 Action 创建一个全局的转发项,例如:


  
path=”HelloWord.do”/>
  

创建一个 welcome.jsp 的文件

最后在 web.xml 文件中把 welcome.jsp 文件配置为欢迎文件,代码如下:


  welcome.jsp
  

第四步:配置错误处理


  404
  /commom/404.jsp
  
  
  505
  /commom/505.jsp
  
  

也可以为 Web 容器捕获的 Java 异常配置, 需要设置子元素,它用于指定 Java 异常类。Web 容器可能捕获如下异常:

RuntimeException 或 Error 

ServletException 或它的子类 

IOException 或它的子类


  
java.io.IOException

  
/common/system_ioerror.jsp

  
  

第五步:配置 Structs 标签库

使用客户化的标签库,要配置它们


  
/WEB-INF/structs-html.tld

  
/WEB-INF/structs-html.tld

  
  

用于指定标签库的相对或者绝对 URI 地址,Web 应用根据这一 URI 来访问标签库。

指定标签描述文件在文件资源系统中的物理位置。

2.Structs 配置文件

Structs 框架在启动时会读入其配置文件,根据它来创建和配置各种 Structs 组件。

1元素

元素是 Structs 配置文件的根元素,元素有 8 个子元素。它的 DTD 定义如下:


global-exeception?,global-forward?,
action-mapping,controller?,
message-resources*,plug-in*)>
  

在 Struts 配置中,必须按照以上的 DTD 指定的先后顺序来配置元素的各个子元素,如果颠倒了这些元素的配置文件中的位置,在 Structs 应用启动时会生成错误。

1.元素

元素包含零个、一个或者多个子元素,用于配置特定的数据源,它可以包含多个子元素,用于设置数据源的各种属性。

配置了数据源后,就可以在 Action 类中访问数据源,在 org.apache.structs.action.Action 类中定义了 getDataSource(HttpRequrst) 方法,它用于获取数据源对象的引用。

DataSource dataSource;
Connection connection;
dataSource =getDataSource(request);
connection=dataSource.getConnection();
  

也可以在配置文件中声明多个数据源,此时需要为每一个数据源分配唯一的 key 值,通过改值来标识特定的数据源。

2.元素

元素用来配置多个 ActionForm Bean,包含多个子元素,每个包含多个属性,ClassName,name,type


  
type="hello.HelloForm"/>
  
  

注意:配置动态 ActionForm Bean,还必须配置元素的元素。


  
type="hello.HelloForm"/>
  
type="org.apache.structs.action.DynaAction">
  
type="java.lang.String"/>
  
type="java.lang.String">
  
type="java.Integer" initial="18">
  
  

3.元素

用于配置异常处理,元素可以包含零个或者多个元素。

元素用来设置 java 异常和异常处理类 org.apache.structs.action,Exception Hander 之间的映射。

4.元素

元素用来声明全局的转发关系,有零个或多个元素组成。元素用于把一个逻辑映射到特定的 URL

className  

和元素对应的配置类,默认为 org.apache.structs.action.ActionForWard

name    

转发路径的逻辑名,此项时必须的

path    

指定或者重定向的 URI。此项时必须的,必须以”/” 开头

redirect  

此项是 true,表示是执行重定向的操作,此项是 false 时,表示请求转发。


  
path="/Action1.do"/>
  
path="/Action2.do"/>
  
  

如果 jsp1.jsp 把请求转发给 Action1, 可以使用以下代码:

 
   
  

或者

 
   

如果 Action1 的 execute()方法把请求转发给 JSP2.jsp,可以使用一下代码:

return(mapping.findForward(“forward2”))

          <span class="content01"></span></p><span id="zoom" class="a14c"><p style="text-indent: 2em;"><span id="zoom" class="a14c"></span></p></span><span id="zoom" class="a14c"><p style="text-indent: 2em;">5.<action-mapping>元素

元素包含零个或者多个元素。元素描述了从特定的请求路径到相应的 Action 类的映射。

6.元素

元素用于配置 ActionServlet。

7. 元素

元素用于配置 Resource Bundle,Resource Budle 用于存放本地化消息文件。

base        

包装 HTML 的 base 元素

button       

包装 HTML 的 button 类型的 input 元素

cancel       

包装 HTML cancel 按钮

checkbox      

包装 HTML checkbox 类型的输入域

errors       

有条件地显示一些 error 消息,显示 ActionErrors 信息

file        

包装 HTML 文件上传输入域

form        

定义 HTML form 元素

frame        

包装 HTML frame 元素

hidden       

包装 HTML hidden 输入域

html        

包装 HTML 中的 html 元素

image        

包装 "image" 类型的输入域

img         

包装 HTML 的 img 元素

javascript     

包装根据 ValidatorPlugIn 提供的校验规则所提供的 javascript 校验脚本

link        

包装超链接

messages      

有条件地显示一些提示信息,显示 ActionMessages 信息

multibox      

包装多选输入框

option       

包装一个选择输入框

options       

包装一批选择输入框

optionsCollection  

包装一批选择输入框集

password      

包装密文输入框

radio        

包装单选输入框

reset        

包装 “重置” 功能的按钮

rewrite       

包装一个 URL

select       

包装一个选择输入框

submit       

包装一个提交按钮

text        

包装一个文本输入框

textarea      

包装一个备注输入框

ActionForm

ActionForm 的要求

创建一个 ActionForm 并不困难,但是你的类必须符合一些要求:

ActionForm 必须扩展自 org.apache.struts.ActionForm。基类 ActionForm 是不能实例化的。ActionForm 必须为每个应该从请求中收集的 HTML 控件定义一个公共属性。

(Struts 1.0 要求每个属性都要 mutator 和 accessor 。Struts 1.1 则没有如此严格)

ActionForm 还可能要符合一些可选的要求:

如果你要求 ActionForm 在传递属性到 Action 之前校验它们,你就必须实现 validate

方法;

如果想在组装前初始化属性,必须实现 reset,它在 ActionForm 组装前被调用。

动态 ActionForm

ActionForm 作为类型转换器

ActionForm 的一个强制点是应该使用 String 和 boolean 属性。实际上,这意味着属性必须得从一种转换到另一种类型。大部分应用也需要一些属性,比如电话号码或者数量,以一种格式化的方式出现。 核心 Java 包提供一些工具来做这种事情,但是要清楚地将他们集成到应用中仍然是一个挑战。

Struts 开发人员经常在 ActionForm 中包含 helper 方法,来进行类型转换。helper 方法可以有很多种实现方式,我们将在后面叙述。

5.2.6 ActionForm 作为防火墙

当请求提交时,ActionServlet 使用一个自动组装机制来从请求参数中设置请求的,ActionForm 属性。这让你可以通过控制哪个 ActionForm 属性被暴露来控制哪个请求参数。是可接受的。这也意味着如果你的 ActionForm 的粗心设计你可能失去控制哪个参数可以接受的能力。ActionForm 一定不能包含看起来像是一个 JavaBean 属性,但不能从 HTTP 请求设置的属性方法。

5.3.4 ActionForm 可以嵌套其它 bean

因为 Struts 标签扩展和自动组装机制都支持点号语法来从 ActionForm 访问其它 bean。这是一个方便的方式,可以通过 ActionForm 来组装存在的 bean。在 JSP 页面你可以象这样引用一个嵌套的 bean:


  propety="values.telephoneText"
  size="14"
  maxlength="14"/>
  

分发(Dispatch )

Struts 开发人员通常使用同一个 Action 处理相关的操作。一个通常做法来选择操作是在 HTML 表单中使用隐藏属性。BaseForm 的 dispatch 属性也可用作这个目的:

public void setDispatch(String dispatch);
public String getDispatch();

Struts 配置提供连个级别嵌套的 ActionForward:

Global (全局) ActionForward 对整个应用中的所有 Action 对象均有效;

Local (局部) ActionForward 则在 ActionMapping 元素中定义。仅对那些在这个

ActionMapping 中调用的 Action 对象有效。

从 Action 对象内部来看,forward 通常像这样来选择:

<table bordercolorlight="black" bordercolordark="#FFFFFF" width="400" align="center" border="1" cellpadding="2" cellspacing="0"><tbody><tr><td class="code" style="font-size: 9pt;" bgcolor="#e6e6e6">
<pre><ccid_code>ActionForward forward = <br>mapping.findForward("continue");</ccid_code></pre></td></tr></tbody></table>转自:http://java.ccidnet.com/art/3737/20051212/391299_5.html<br>

欢迎注册黑客派社区,开启你的博客之旅。让学习和分享成为一种习惯!

留下你的脚步