大大毛
的笔记
  DDM's Note
哪怕没有办法一定有说法,
就算没有鸽子一定有乌鸦,
固执无罪 梦想有价,
让他们惊讶.
posts - 14, comments - 23, trackbacks - 0, articles - 58
::
首页
:: ::
联系
:: ::
管理
精通Struts笔记--04.01
Posted on 2006-08-02 11:42
大大毛
阅读(753)
评论(0)
编辑
收藏
所属分类:
Struts
Struts应用的配置
Struts的配置是两个文件web.xml以及struts配置文件
1.web.xml
配置ActionServlet,其方法与配置普通的Servlet一致,涉及的元素是<servlet> (名称,类,参数),<servlet-mapping> (servlet所要处理的URL),<taglib> (客户化标签库)
这里
ActionServlet配置
<
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
>
<
init-param
>
<
param-name
>
config/moduleA
</
param-name
>
<
param-value
>
/WEB-INF/struts-moduleA.xml
</
param-value
>
</
init-param
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>
action
</
servlet-name
>
<
url-pattern
>
*.do
</
url-pattern
>
</
servlet-mapping
>
可以看到,<servlet>标签与<servlet-mapping>相对应,由于Struts只支持配一个ActionServlet,因此只能出现一对。
ActionServlet支持用户类,只需要改变这里的<servlet-class>即可使用自定义类;
<servlet>/<init-param>标签中,config代表Struts配置文件所在的位置,这里需要注意 config/moduleA的写法,它代表着一个
模块moduleA
以及支持该模块的配置文件
<init-param>可以具有多个,在这里可以保存一些客户化的参数,使用servlet.getInitParameter("paramname")的方式即可以取得。
<url-parttern>代表该servlet所要处理的URL,支持通配符,*.do代表所有以 .do 为后缀的请求都交由该servlet来处理
标签库配置
<
taglib
>
<
taglib-uri
>
/WEB-INF/struts-html.tld
</
taglib-uri
>
<
taglib-location
>
/WEB-INF/struts-html.tld
</
taglib-location
>
</
taglib
>
<taglib-uri>:指定标签库的相对或绝对URI地址,即在JSP页面中引用标签时,需与之对应;
<taglib-location>:指定标签库的物理位置,即实际存放在什么地方。
欢迎文件配置
<
welcome-file-list
>
<
welcome-file
>
welcome.jsp
</
welcome-file
>
<
welcome-file
>
index.html
</
welcome-file
>
</
welcome-file-list
>
<welcome-file>:web应用的欢迎文件,即只输入了应用的根目录时响应的文件,按先后顺序查找;
该元素不能被配置成Action,如果有此需要的话则应在这里配置一个JSP,并在JSP里面<logic:forward name="key" />进行跳转
错误代码配置
<
error-page
>
<
error-code
>
404
</
error-code
>
<
location
>
/common/404.html
</
location
>
</
error-page
>
<error-page>:指定web出错后的处理页面,常见的错误多是404:找不到目录或文件,500:服务器内部错误;
<error-code>:指定需要处理的错误号;
<location>:指定出错后跳转的处理页面,这里可以设置JSP页面。
异常捕获配置
<
error-page
>
<
exception-type
>
javax.servlet.ServletException
</
exception-type
>
<
location
>
/common/system_error.jsp
</
location
>
</
error-page
>
捕获的异常:
RuntimeException 或 Error
ServletException
IOException
2.Struts配置文件
Struts配置的相关类位于org.apache.struts.config包中,其中ModuleConfig接口是整个树的顶点,各种配置信息都放入ModuleConfig的实现类中(由于存在着多模块,因此会有多个实现)。因此从ModuleConfig接口中可以取得各种配置信息,当然需要先通过selectModule()来选择需要操作的具体实现。
还需要注意的一点就是在Struts配置文件里面DTD文件严格定义了各个元素出现的先后顺序。
datasources元素
<
data-sources
>
<
data-source
type
="org.apache.commons.dbcp.BasicDataSource"
>
<
set-property
property
="dirverClassName"
value
="com.microsoft.jdbc.sqlserver.SQLServerDriver"
/>
<
set-property
property
="url"
value
="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=addressbook;"
/>
<
set-property
property
="username"
value
="sa"
/>
<
set-property
property
="password"
value
="i am ddm"
/>
<
set-property
property
="autoCommit"
value
="false"
/>
<
set-property
property
="readOnly"
value
="false"
/>
<
set-property
property
="minCount"
value
="2"
/>
<
set-property
property
="maxCount"
value
="20"
/>
<
set-property
property
="description"
value
="SQL Server2000"
/>
</
data-source
>
<
data-source
key
="datasource.other"
type
="
"
>
</
data-source
>
</
data-sources
>
<data-sources>:配置应用的数据源,可以包含多个<data-source>子标签
<data-source>:数据源的参数,由于可以有多个数据源,因此<data-source>有一个属性 key 用于区分,如果没有 key 属性,Struts将此做为缺省的数据源,该缺省数据源实际上也是有 key 值的,对应于Globals.DATA_SOURCE_KEY的值,实际值是 "org.apache.struts.action.DATA_SOURCE"字串。
:key 属性的值不允许重复,自行指定key属性后,在Action中操作为 this.getDataSource(request,key),在其它地方则需要从ServletContext(application范围)中用 (DataSource)getAttribute(key),
参数key的值与该属性值完全相同
,因此在配置文件中该属性应该具有一定的区别性,如"datasource.other"等,以避免在引用时出现麻烦,另外如果在配置文件中各个data-source
都配置了key属性
,那么在应用
仅能通过对应的key值进行调用
,而
不会存在着缺省数据源
("org.apache.struts.action.DATA_SOURCE");
:使用Myeclipse插件配DBCP时还需要手工修改
几处
。
这里
form-beans元素(普通)
<
form-beans
>
<
form-bean
name
="loginForm"
type
="com.ddm.struts.addressbook.form.LoginForm"
/>
</
form-beans
>
<form-beans>:配置ActionForm,可以包含多个<form-bean>子标签
<form-bean>:ActionFormBean的参数。
className:该标签对应的配置类,Struts中与之对应的类是"org.apache.struts.config.FormBeanConfig",有需要时也可自行指定
name:该ActionForm的唯一标识符
type:ActionForm的类名
form-bean元素(动态)
<
form-bean
name
="userForm"
type
="org.apache.struts.action.DynaActionForm"
>
<
form-property
name
="firstName"
type
="java.lang.String"
/>
<
form-property
name
="lastName"
type
="java.lang.String"
/>
<
form-property
name
="age"
type
="java.lang.Integer"
initial
="18"
/>
</
form-bean
>
<form-bean>:动态的ActionForm的type="org.apache.struts.action.DynaActionForm"或子类;
<form-property>:配置ActionForm的成员属性
name:属性名称
type:属性类型,必须是对象类型。如果是Java简单数据类型需要使用包装类
inital:初始值,可缺省,与类的属性可以不用初始化的特性相同
另:这个动态ActionForm还很有些名堂,现在只能逐步推进了
这里
global-exceptions元素
<
global-exceptions
>
<
exception
className
="org.apache.struts.config.ExceptionConfig"
handler
="org.apache.struts.action.ExceptionHandler"
key
="global.error.login"
bundle
="bundle01"
path
="/err.jsp"
scope
="request"
type
="com.ddm.struts.addressbook.LoginException"
/>
</
global-exceptions
>
<global-exception>:配置
全局
异常处理,可以包含多个<exception>子标签,其配置方法与局部(Action)异常配置相同,但是作用域不同,类似于Java类的成员属性与同名方法形参作用域之间的关系,对照想想setter就清楚了
<exception>:配置异常处理
className:与<exception>标签对应的配置类,缺省是"org.apache.struts.config.ExceptionConfig";
handler:异常处理类,缺省是"org.apache.struts.action.ExceptionHandler";
key:描述异常的消息在资源文件中的key;
bundle:资源文件,可缺省;
path:Struts捕获到指定类型的异常后,转发的处理路径;
scope:ActionMessages实例的存放范围,缺省为"request",还可取值"session";
type:异常的类型
这里
global-forwards元素
<
global-forwards
>
<
forward
className
="org.apache.struts.action.ActionForward"
contextRelative
="false"
name
="login"
path
="/login.jsp"
redirect
="false"
/>
<
forward
name
="toModuleA"
contextRelative
="true"
path
="/moduleA/index.do"
redirect
="true"
/>
</
global-forwards
>
<global-forwards>:配置
全局
forward,可包含多个<forward>子标签。
<forward>:配置forward
className:与<forward>标签对应的配置类,缺省为"org.apache.struts.action.ActionForward";
contextRelative:缺省值为"false",表示path相对于应用;当取值为"true"时,表示path属性给出的是相对于当前上下文的URL,如果配置用于子模块之间切换的forward,则此项需设为"true";
name:名称;
path:转发的路径,必须以"/"打头
redirect:缺省值为"false",表示请求转发,取值"true"时,表示重定向,子模块切换用的forward,此项需设为"true"
action-mappings元素
<
action-mappings
>
<
action
className
="org.apache.struts.action.ActionMapping"
attribute
="loginForm"
input
="/login.jsp"
name
="loginForm"
path
="/login"
scope
="request"
validate
="true"
parameter
="36"
roles
=""
unknown
="false"
type
="com.ddm.struts.addressbook.action.LoginAction"
forward
="
"
include
="
"
>
<
exception
key
="global.error.login"
path
="/err.jsp"
type
="com.ddm.struts.address.LoginException"
/>
<
forward
name
="loginSuccess"
path
="/menu.jsp"
/>
<
forward
name
="loginFaile"
path
="/login.jsp"
/>
</
action
>
</
action-mappings
>
<action-mappings>:配置Action,可包含多个<action>子标签
<action>:配置Action
className:标签对应的配置类,缺省为"org.apache.struts.action.ActionMapping"
attribute:name属性所对应的ActionForm实例的
key
,通过这个attribute操作它,如 (LoginForm)request.getAttribute("loginForm"); ;
input:输入URL,转发到该 Action 时如果 ActionForm.validate()
检验失败,Action 将把请求转发到该URL,
请看
;
name:与Action对应的ActionForm的 name ,与<form-bean>标签的name属性相匹配;
path:Action的访问路径,必须以"/"打头,不需要后缀
scope:与Action对应的ActionForm的存在范围,缺省是"session",可取值"request";
validate:是否需要调用ActionForm的 validate() 方法进行检验,缺省是"true",可取值"false",ActionForm将不会对提交的数据进行表单校验;
parameter:可附加的参数,在Action中可以用 mapping.getParameter() 来获取;
roles:指定允许调用该Action的安全角色,与容器设置的安全角色匹配,由容器来判断;
unknown:表示是否处理用户发出的所有无效的Action URL,默认为"false";
type:Action的类名;
forward:指定转发的URL,相当于使用ForwardAction
include:指定包含的URL,相当于使用IncludeAction
<exception>:Action局部异常捕获,
参看<global-exceptions>小节
<forward>:Action局部forward,
参看<global-forwards>小节
注意:
<action>标签的type,forward,include三种属性互斥。
controller元素
<
controller
className
="org.apache.struts.config.ControllerConfig"
contentType
="text/html;charset=UTF-8"
locale
="true"
nochache
="false"
proccessorClass
="org.apache.struts.action.RequestProcessor"
/>
<controller>:配置ActionServlet
className:标签的配置类,缺省为"org.apache.struts.config.ControllerConfig";
contentType:指定响应结果的内容类型和字符编码,如果在Action和JSP中设置将会覆盖掉该设置;
locale:指定是否把 Locale 对象保存到session中,默认值为"false";
nochache:是否在客户端缓存,缺省为"false",可选"true",struts将在响应中加入特定的头参数以防止页面被缓存
processorClass:指定负责处理 Request 的类,缺省为"org.apache.struts.action.RequestProcessor",如果有多模块则应在各模块指定自己的处理类;
bufferSize:指定上传文件的输入缓冲,默认为"4096";
tempDir:指定处理上传文件的临时工作目录,Servlet容器可以自行分配。
message-resources元素
<
message-resources
className
="org.apache.struts.config.MessageResourcesConfig"
factory
="org.apache.struts.util.PropertyMessageResourcesFactory"
key
="org.apache.struts.action.MESSAGE"
null
="true"
parameter
="com.ddm.struts.addressbook.ApplicationResources"
/>
<messge-resources>:配置资源文件,这个标签与以上的几个有点不同,他本身可以存在多个
className:标签的配置类,缺省为"org.apache.struts.config.MessageResourcesConfig";
factory:资源的工厂类,缺省为"org.apache.struts.util.PropertyMessageResourcesFactory";
key:指定 Resource Bundle 存放在 ServletContext 中的 key,缺省为Globals.MESSAGES_KEY的值 "org.apache.struts.MESSAGE" ,可以自行指定key,使用如resource.bundle01加以区别,可通过 (MessageResources)servletContext.getAttribute(key) 拿到,Struts提供的客户化标签中常常可以见到一个 bundle 属性,该属性即对应于这里的 key 值;
null:指定如何处理未知的消息,缺省为"true",返回空字串,可选"false",将返回类似"???key???"的字串;
parameter:资源文件的存放路径。
plug-in元素
<
plug-in
className
="com.ddm.struts.addressbook.bean.UserBean"
>
<
set-property
property
="path"
value
="/WEB-INF/user.xml"
/>
</
plug-in
>
<plug-in>:配置插件,className属性指定具体的插件类,struts配置文件中可配置多个插件,
初始化顺序由书写顺序决定
;
<set-property>:设置插件的属性,可具有多个,该插件类必须实现与本属性对应的setter/getter,在Struts初始化时自动set。
插件必须实现 org.apache.struts.action.PlugIn 接口,该接口具有两个方法:
public
void
init(ActionServlet servlet,ApplicationConfig config)
throws
ServletException;
init方法将于Struts应用启动时被调用,是一个初始化客户资源的接口,而且由Struts传入的参数也便于设置各种环境。
public
void
destroy();
destroy方法于Struts应用关闭时调用,是一个释放客户资源的接口。
多应用模块的配置
多应用模块的划分有助于应用的并行开发,提高效率。
步骤:
1.为每个子应用创建单独的 Struts 配置文件;
2.在 web.xml 中配置每个子应用的信息,参看
这里
;
3.应用中实现切换:<forward> 或 在<action>标签中使用 SwitchAction 来实现切换
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
精通Struts笔记--04.01
精通Struts笔记--03.02
Struts国际化的快速演示
Struts中action之间控制权转移的问题
Struts中文问题的暂时解决
DBCP数据源的配置问题(Myeclipse)
精通Struts笔记--03.01
Digester类的简单使用方法
web.xml中无法添加<taglib>标签问题的解决
精通Struts笔记--02
Powered by:
BlogJava
Copyright © 大大毛
日历
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
公告
果然是不能想得太好。
随笔分类
(4)
VB培训(4)
文章分类
(59)
JAVA
(6)
Spring
(3)
Hibernate
Struts
(12)
NET
VB
(2)
ASP
(1)
ASP.NET
(6)
HTML
(3)
400
(2)
I4.0
Nifi
(5)
Angular
(1)
SQL
(15)
常用算法
(1)
其它
(2)
积分与排名
积分 - 59275
排名 - 877
最新评论
1. re: 手工添加MyEclipse的XML文件模板[未登录]
请问,eclipse下面有没有呢?现在想要实现eclipse的xml的模板进行配置修改,简单说,就是把新建时候的名字作为其中的一个tag;找了很久没有找到方法
--allen
2. re: 第二章 Visual Basic 基础语法
受益匪浅,多谢!
--yuleself
3. re: 数字填空
评论内容较长,点击标题查看
--去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去
4. re: Checkbox联动演示
dcdc
--dcd
5. re: 利用TN5250NF下載檔案的自動化處理
請教若密碼要動態生成,是否有辦法呢?
謝謝
--江佳桂
i am ddm