全部博文(2065)
分类: Java
2010-06-16 23:28:55
structs配置文件详解
时间:
1) struts-default.xml
这个文件是struts2框架默认加载的配置文件。它定义struts2一些核心的bean和拦截器。
详细内容请见的一篇单独的文章整理!而且里面定义了一个包名!
2) struts.xml
该文件也是struts2框架自动加载的文件,在这个文件中可以定义一些自己的action,interceptor,package等,该文件的package 通常继承struts-default包。下面是这个文件的格式。
依据这份配置来详细讲解:(以后参考这份配置文档进行配置相应的配置文件)
xml version="1.0" encoding="UTF-8"
?>
DOCTYPE struts PUBLIC
"-//Apache
Software Foundation//DTD Struts Configuration 2.0//EN"
"">
<include file="struts-default.xml">include
这里面其实是定义了常用的一些框架自带的东西包括一些bean与拦截器之类的
<struts>
<package name="mldn" namespace="/"
extends="struts-default">
说明一下package里面的四个属性:
1、name 表示当前这个包的名称。
2、namespace 定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为
3、extends 继承的父package名称 (这里因为有include的父包名)
4、 abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
<action name="login" class="action.Login">
<result name="input">/login.jspresult>
<result name="success"
type="redirect-action">Menuresult>
action>
现在来讲一下Action里面都包含了哪些个属性呢?
Action配置一个Action可以被多次映射(只要action配置中的name不同,即同一个类可以被多次映射)
name:action名称(这个名称就是我们访问的URI了)
class: 对应的类的路径(即映射到具体的哪个类上面包含了其包名即 包名.类名)
method: 调用Action中的方法名(默认为execute方法的当然你也可以自定义方法了)
Action下面的result标签的属性配置
name : result名称 和Action中返回的值相同(理解:Action的方法中会有一个返回值如return SUCCESS之类的。这个值就与我们这里面的result的name相同!)
type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher。
其中的name 表示的就是我们的Action对应的方法其返回值的字符串的值了。Return
ERROR之类
以下是系统所带的几种类型
|
Used for |
|
Used for web resource integration,
including
integration |
|
Used for
integration |
|
Used to control special HTTP behaviors |
|
Used to redirect to another URL (web
resource) |
|
Used to redirect to another action
mapping |
|
Used to stream an InputStream back to the
browser (usually for file downloads) |
|
Used for
integration |
|
Used for XML/XSLT integration |
|
Used to display the raw content of a
particular page (i.e jsp, HTML) |
|
Used to provide Tiles integration |
<result name="success">/menu.jspresult>
action>
<action name="Findbook" class="action.Findbook">
<result name="success">/showbook.jspresult>
action>
<action name="Mybook" class="action.Mybook">
<result name="success">/mybook.jspresult>
action>
<action name="Lendbook" class="action.Lendbook">
<result name="success">/lendbook.jspresult>
action>
<action name="Lend" class="action.Lend">
<result name="error">/errors.jspresult>
<result name="success">/success.jspresult>
action>
<action name="Returnbook" class="action.Returnbook">
<result name="error">/errors.jspresult>
<result name="success">/success.jspresult>
action>
<action name="Addbook" class="action.Addbook">
<result name="success">/addbook.jspresult>
action>
<action name="fileUpload" class="action.BookAdd">
<interceptor-ref name="fileUploadStack"
/>
<result name="error">/errors.jspresult>
<result name="success">/success.jspresult>
action>
<action name="History" class="action.BookHistory">
<result name="success">/history.jspresult>
action>
<action name="download" class="action.Download">
以下相当于给我们的Action传参数处理了!
name:对应Action中的get/set方法 (我们的Action里面的private属性值就是它了)
在struts2中还可以为action指定一个或多个参数。大家还记着struts1.x是如何设置的action参数不? 在struts1.x中可以使用
<param name="inputPath">/imgs/0000000000.gifparam>
<result name="success"
type="stream">
<param name="contentType">application/zipparam>
<param name="inputName">inputStreamparam>
<param name="contentDisposition">
filename="0000000000.gif"
param>
<param name="bufferSize">4096param>
result>
action>
<action name="updatebook" class="action.UpdateBook">
<result name="success">/updatebook.jspresult>
action>
<action name="update" class="action.Update">
<interceptor-stack name="mystack">
<interceptor-ref name="timer">interceptor-ref>
<interceptor-ref name="logger">interceptor-ref>
interceptor-stack>
<interceptor-ref name="fileUploadStack"
/>
<result name="error">/errors.jspresult>
<result name="success">/success.jspresult>
action>
<action name="delbook" class="action.DelBook">
<result name="error">/errors.jspresult>
<result name="success"
type="redirect-action">Menuresult>
action>
<action name="maturebook" class="action.Mature">
<result name="success">/maturebook.jspresult>
action>
<action name="Quit" class="action.UserQuit">
<result name="success">/login.jspresult>
action>
package>
struts>
讲讲拦截器的一些知识。
我们发现在我们的表单中如果你这样定义
一提交框架会自动调用first这个Action里面的setName了。那这个背后到底是怎么一个机制来实现的呢》它的原理到底是什么呢?
A:这个操作实际上是由params拦截器来完成的。(看到没有params原来是一个拦截器的。它其实是框架自带的一个拦截器默认包里面就有的!)
默认就有了所以我们的Action配置中就没有单独再拿出来说明了。可以直接使用的!
现在我想在执行execute方法之前我再加进来一个新的拦截器的话就得显示声明的。那如果我显式声明了一个新的其它的拦截器的话那这个params拦截器的话就得再次添加进来了。
依据static-params拦截器还可以通过配置
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor。
bill
如果first动作使用上面的配置,在访问first动作时,Struts2会自动调用setWho方法将“比尔”作为参数值传入setWho方法。
拦截器栈的概念
有的时候可能一个动作需要引入同一个或几个拦截器,这样的话其实我们是可以将这些拦截器当成一个整体进行引用。那拦截器栈应当位于
<package name="demo" extends="struts-default" >
<interceptors>
<interceptor-stack name="mystack">
<interceptor-ref name="timer" />
<interceptor-ref name="logger" />
<interceptor-ref name="params" />
<interceptor-ref name="static-params" />
interceptor-stack>
interceptors>
以上我们定义了一个拦截器集合即拦截器栈其名称为(mystack)其下面就有引用了
<action name="first" class="action.FirstAction">
<param name="who">比尔param>
<interceptor-ref name="mystack"/>
action>
package>
名字
|
说明
|
chain
|
用来处理Action链
|
dispatcher
|
用来转向页面,通常处理JSP,这是默认的结果类型
|
freeMarker
|
处理FreeMarker模板
|
httpHeader
|
用来控制特殊的Http行为
|
redirect
|
重定向到一个URL
|
redirect-action
|
重定向到一个Action
|
stream
|
向浏览器发送InputSream对象,通常用来处理文件下载
|
velocity
|
处理Velocity模板
|
xslt
|
处理XML/XLST模板
|
plaintext
|
显示原始文件内容,例如文件源代码
|
tiles
|
结合Tile使用
|
chinaunix网友2010-06-20 20:48:51
默认为dispatcher即转向到了一个JSP页面。这个是默认的结果类型。如果是redirect类型的话就重定向到了URL。如果是redirect-action就重定向到了一个Action。如果现在需要下载文件的话使用stream。处理XML 使用xslt