Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26193550
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Java

2010-06-16 23:28:55

structs配置文件详解

时间:2010-6-16

1)    struts-default.xml

这个文件是struts2框架默认加载的配置文件。它定义struts2一些核心的bean和拦截器。

详细内容请见的一篇单独的文章整理!而且里面定义了一个包名!

2)    struts.xml

该文件也是struts2框架自动加载的文件,在这个文件中可以定义一些自己的action,interceptorpackage等,该文件的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里面的四个属性:

1name 表示当前这个包的名称。

2namespace 定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为

3extends 继承的父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不同,即同一个类可以被多次映射)

nameaction名称(这个名称就是我们访问的URI了)
class: 
对应的类的路径(即映射到具体的哪个类上面包含了其包名即  包名.类名)
method: 
调用Action中的方法名(默认为execute方法的当然你也可以自定义方法了)

       

Action下面的result标签的属性配置
name : result
名称 Action中返回的值相同(理解:Action的方法中会有一个返回值如return SUCCESS之类的。这个值就与我们这里面的result的name相同!)
type : result
类型 不写则选用superpackagetype struts-default.xml中的默认为dispatcher

 

其中的name 表示的就是我们的Action对应的方法其返回值的字符串的值了。Return ERROR之类

 

 

 

以下是系统所带的几种类型


       chain" class="com.opensymphony.xwork2.ActionChainResult"/>
       dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
       freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
       httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
       redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
       redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
       stream" class="org.apache.struts2.dispatcher.StreamResult"/>
       velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
       xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
       plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
       
       redirect-action" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
       plaintext" class="org.apache.struts2.dispatcher.PlainTextResult" />

 

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中可以使用标签的parameter属性为其指定一个action参数,如果要指定多个,就只能通过逗号(,)或其他的分隔符将不同的参数隔开。而在struts2中可以通过标签指定任意多个参数。(Action其实就是依据它的setter方法实现的!)

            <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拦截器还可以通过配置标签来调用Action类的相应的setter方法。这个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>




Struts2提供了对不同种类返回结果的支持,常见的有JSP,FreeMarker,Velocity等。
Struts2支持的不同类型的返回结果为:
名字
说明
chain
用来处理Action链
dispatcher
用来转向页面,通常处理JSP,这是默认的结果类型
freeMarker
处理FreeMarker模板
httpHeader
用来控制特殊的Http行为
redirect
重定向到一个URL
redirect-action
重定向到一个Action
stream
向浏览器发送InputSream对象,通常用来处理文件下载
velocity
处理Velocity模板
xslt
处理XML/XLST模板
plaintext
显示原始文件内容,例如文件源代码
tiles
结合Tile使用

 

阅读(1376) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-06-20 20:48:51

默认为dispatcher即转向到了一个JSP页面。这个是默认的结果类型。如果是redirect类型的话就重定向到了URL。如果是redirect-action就重定向到了一个Action。如果现在需要下载文件的话使用stream。处理XML 使用xslt