Struts2开发学习随笔

1 定义头和根元素
  部署描述符文件就像所有XML文件一样,必须以一个XML头开始。这个头声明可以使用的XML版本并给出文件的字符编码。
DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本(如2.2或2.3)并指定管理此文件其余部分内容的语法的DTD(Document Type Definition,文档类型定义)。
所有部署描述符文件的顶层(根)元素为web-app。请注意,XML元素不像HTML,他们是大小写敏感的。因此,web-App和WEB-APP都是不合法的,web-app必须用小写。


<?xml version="1.0" encoding="UTF-8"?>  
<web-app  xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">  
    <display-name>网站名称</display-name>  
    <description>网站描述</description>         
    <!-- icon元素包含small-icon和large-icon两个子元素.用来指定web站台中小图标和大图标的路径. -->  
    <icon>  
        <!--small-icon元素应指向web站台中某个小图标的路径,大小为16 X 16 pixel,但是图象文件必须为GIF或JPEG格式,扩展名必须为:.gif或.jpg. -->  
        <small-icon>路径/small.gif</small-icon>  
        <!--large-icon元素应指向web站台中某个大图表路径,大小为32 X 32 pixel,但是图象文件必须为GIF或JPEG的格式,扩展名必须为; gif或jpg.-->  
        <large-icon>路径/large.jpg</large-icon>  
    </icon>     
    <!-- 配置集群的时候,要用到,在这篇文章:“apache+tomcat集群、负载均衡及session复制”里的第三条(http://jiajun.iteye.com/admin/blogs/278586) -->  
    <distributable/>    
    <!-- context-param 元素用来设定web站台的环境参数(context),它包含两个子元素:param-name和param-value.,如spring的典型配置  -->  
    <context-param>  
        <!-- 设定Context名称  -->  
        <param-name>contextConfigLocation</param-name>  
        <!-- 设定Context名称的值  -->  
        <param-value>/WEB-INF/spring-config.xml</param-value>  
    </context-param>  
    <!-- 备注:此所设定的参数,在JSP网页中可以使用下列方法来取得:${initParam.param_name}  
           若在Servlet可以使用下列方法来获得:String param_name=getServletContext().getInitParamter("param_name");   
    -->    
   <!-- filter元素用来声明filter的相关设定.filter元素除了下面介绍的的子元素之外,还包括下面<servlet>绍过的<icon>,<display-name>,<description>,<init-param>,其用途一样.-->  
   <filter>  
      <!-- 定义Filter的名称.  -->  
      <filter-name>URIFilter</filter-name>  
      <!-- 定义Filter的类名称 -->  
      <filter-class>org.cjj.filter.URIFilter</filter-class>  
      <init-param>  
         <param-name>encoding</param-name>  
         <param-value>UTF-8</param-value>  
      </init-param>  
   </filter>  
   <!-- filter-mapping 元素的两个主要子元素filter-name和url-pattern.用来定义Filter所对应的URL.和下面的servlet-mapping一样  -->  
   <filter-mapping>  
      <!-- 定义Filter的名称,和上面定义的Filter名称要一致 -->  
      <filter-name>URIFilter</filter-name>  
      <!-- ilter所对应的RUL,这里是所有的URL -->  
      <url-pattern>/*</url-pattern>  
   </filter-mapping>  
  
   <!-- 这里配置和上面的Filter配置一样 -->  
   <servlet>  
      <description><![CDATA[Application Setup]]></description>  
      <servlet-name>HTML Action Servlet</servlet-name>  
      <servlet-class>org.cjj.servlet.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>debug</param-name>  
         <param-value>2</param-value>  
      </init-param>  
      <init-param>  
         <param-name>detail</param-name>  
         <param-value>2</param-value>  
      </init-param>  
      <load-on-startup>0</load-on-startup>  
   </servlet>  
   <!-- 和上面的filter-mapping,一样 -->  
   <servlet-mapping>  
      <servlet-name>HTML Action Servlet</servlet-name>  
      <url-pattern>*.do</url-pattern>  
   </servlet-mapping>  
  
    <!-- listener元素用来定义Listener接口,它的主要子元素为<listener-class>  -->  
    <listener>  
      <!-- ServletContextListener接口的实现,监听Content -->  
      <listener-class>org.cjj.listener.ContextListener</listener-class>  
   </listener>  
   <listener>  
      <!-- HttpSessionListener, HttpSessionAttributeListener接口的实现,监听session -->  
      <listener-class>org.cjj.listener.SessionListener</listener-class>  
   </listener>  
     
   <!-- session-config包含一个子元素session-timeout.定义web站台中的session参数.  -->  
   <session-config>  
      <!-- 定义这个web站台所有session的有效期限.单位为分钟. 例子中为600分钟 -->  
      <session-timeout>600</session-timeout>  
   </session-config>  
  
    <!-- mime-mapping包含两个子元素extension和mime-type.定义某一个扩展名和某一MIME Type做对映.  -->  
    <mime-mapping>  
        <!-- 扩展名称  -->  
        <extension>htm</extension>  
        <!-- MIME格式  -->  
        <mime-type>text/html</mime-type>  
    </mime-mapping>  
    <mime-mapping>  
        <extension>flv</extension>  
        <mime-type>video/x-flv</mime-type>  
    </mime-mapping>  
    <mime-mapping>  
        <extension>doc</extension>  
        <mime-type>application/vnd.ms-word</mime-type>  
    </mime-mapping>  
    <mime-mapping>  
        <extension>xls</extension>  
        <mime-type>application/vnd.ms-excel</mime-type>  
    </mime-mapping>   
  
    <!-- welcome-file-list包含子元素welcome-file,用来定义首页列单,如:  -->  
    <welcome-file-list>  
        <welcome-file>index.jsp</welcome-file>  
        <welcome-file>index.html</welcome-file>  
    </welcome-file-list>  
  
    <!-- error-page元素包含三个子元素error-code,exception-type和location.将错误代码(Error Code)或异常(Exception)的种类对应到web站台资源路径.-->  
    <error-page>  
        <!-- HTTP Error code -->  
        <error-code>403</error-code>  
        <!-- 在web站点内的相关资源路径  -->  
        <location>路径/403.jsp</location>  
    </error-page>  
    <error-page>  
        <error-code>404</error-code>  
        <location>路径/404.jsp</location>  
    </error-page>  
    <error-page>  
        <error-code>500</error-code>  
        <location>路径/500.jsp</location>  
    </error-page>  
    <error-page>  
        <!-- 一个完整名称的Java异常类型  -->  
        <exception-type>java.lang.Exception</exception-type>  
         <location>路径/exception.jsp</location>  
    </error-page>   
  
    <!-- jsp-config元素主要用来设定JSP的相关配置,<jsp:config>包括<taglib>和<jsp-property-group>两个子元素.  
                  其中<taglib>元素在JSP 1.2时就已经存在了;而<jsp-property-group>是JSP 2.0新增的元素.  
    -->  
    <jsp-config>  
        <!-- taglib元素包含两个子元素taglib-uri和taglib-location.用来设定JSP网页用到的Tag Library路径.  -->  
        <taglib>  
            <!-- 定义TLD文件的URI,JSP网页的taglib指令可以经由这个URI存取到TLD文件.  -->  
            <taglib-uri>core</taglib-uri>  
            <!-- TLD文件对应Web站台的存放位置.  -->  
            <taglib-location>/WEB-INF/tld/jstl-1-core.tld</taglib-location>  
        </taglib>  
        <taglib>  
            <taglib-uri>bean</taglib-uri>  
            <taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>  
        </taglib>  
        <taglib>  
            <taglib-uri>html</taglib-uri>  
            <taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>  
        </taglib>  
        <taglib>  
            <taglib-uri>logic</taglib-uri>  
            <taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>  
        </taglib>  
        <taglib>  
            <taglib-uri>tiles</taglib-uri>  
            <taglib-location>/WEB-INF/tld/struts-tiles.tld</taglib-location>  
        </taglib>  
         <!-- jsp-property-group元素包含8个元素 -->  
         <jsp-property-group>  
            <!-- 此设定的说明  -->  
            <description>Special property group for JSP Configuration JSP example.</description>  
            <!-- 此设定的名称  -->  
            <display-name>JSPConfiguration</display-name>  
            <!-- 设定值所影响的范围,如:/CH2 或者/*.jsp  -->  
            <uri-pattern>/*</uri-pattern>  
            <!-- 若为true,表示不支持EL语法.  -->  
            <el-ignored>true</el-ignored>  
            <!-- 若为true表示不支持<%scription%>语法.  -->  
            <scripting-invalid>false</scripting-invalid>   
            <!-- 设置JSP网页的抬头,扩展名为.jspf  -->  
            <include-prelude>.jspf</include-prelude>   
            <!-- 设置JSP网页的结尾,扩展名为.jspf  -->  
            <include-coda>.jspf</include-coda>   
            <!-- 编码 -->  
            <page-encoding>utf-8</page-encoding>  
        </jsp-property-group>  
    </jsp-config>  
      
    <!-- esource-ref元素包括五个子元素description,res-ref-name,res-type,res-auth,res-sharing-scope.利用JNDI取得站台可  -->  
    <resource-ref>  
        <!-- 资源说明  -->  
        <description>JNDI JDBC DataSource of JSPBook</description>  
        <!-- 资源名称  -->  
        <res-ref-name>jdbc/sample_db</res-ref-name>  
        <!-- 资源种类  -->  
        <res-type>javax.sql.DataSoruce</res-type>  
        <!-- 资源由Application或Container来许可,如下面为Container  -->  
        <res-auth>Container</res-auth>  
        <!-- 资源是否可以共享.默认值为 Shareable 可选择Shareable|Unshareable -->  
        <res-sharing-scope>Unshareable</res-sharing-scope>   
    </resource-ref>   

</web-app>  

2.struts2.0中struts.xml配置文件详解
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts>
    <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
    <include file="struts-default.xml"></include>
    <!-- package提供了将多个Action组织为一个模块的方式
        package的名字必须是唯一的 package可以扩展 当一个package扩展自
        另一个package时该package会在本身配置的基础上加入扩展的package
        的配置 父package必须在子package前配置 
        name:package名称
        extends:继承的父package名称
        abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
        namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
     -->
    <package name="com.kay.struts2" extends="struts-default" namespace="/test">
        <interceptors>
            <!-- 定义拦截器 
                name:拦截器名称
                class:拦截器类路径
             -->
            <interceptor name="timer" class="com.kay.timer"></interceptor>
            <interceptor name="logger" class="com.kay.logger"></interceptor>
            <!-- 定义拦截器栈 -->
            <interceptor-stack name="mystack">
                <interceptor-ref name="timer"></interceptor-ref>
                <interceptor-ref name="logger"></interceptor-ref>
            </interceptor-stack>
        </interceptors>
        
        <!-- 定义默认的拦截器 每个Action都会自动引用
         如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
        <default-interceptor-ref name="mystack"></default-interceptor-ref>
        
        
        <!-- 全局results配置 -->
        <global-results>
            <result name="input">/error.jsp</result>
        </global-results>
        
        <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同)
             name:action名称
             class: 对应的类的路径
             method: 调用Action中的方法名
        -->
        <action name="hello" class="com.kay.struts2.Action.LoginAction">
            <!-- 引用拦截器
                name:拦截器名称或拦截器栈名称
             -->
            <interceptor-ref name="timer"></interceptor-ref>
        
            <!-- 节点配置
                name : result名称 和Action中返回的值相同
                type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher
             -->
         <result name="success" type="dispatcher">/talk.jsp</result>
         <!-- 参数设置 
             name:对应Action中的get/set方法 
         -->
         <param name="url">http://www.sina.com</param>
        </action>
    </package>
</struts>


注.<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<constant name="struts.devMode" value="false"/>
<constant name="struts.i18n.encoding" value="UTF-8"/>
<constant name="struts.serve.static.browserCache " value="false"/>
<include file="chapter1.xml"/>
</struts> 
常用开关的介绍
<constant name="struts.i18n.encoding" value="UTF-8"/>
指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法
<constant name="struts.action.extension" value="do"/>
该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts 2处理。    如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。   
<constant name="struts.serve.static.browserCache " value="false"/>
设置浏览器是否缓存静态内容,默认值为true,开发阶段最好false
<constant name="struts.configuration.xml.reload" value="true"/>
当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false,开发阶段最好true
<constant name="struts.devMode" value="true"/>
开发模式下设为true,这样可以打印出更详细的错误信息
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
动态方法调用,可以解决多个请求对应一个Servlet的问题,后面详细讲解,默认为true,关闭则设为false.
这里只是列举了一些常用的开关,当然还有许多其他的开关,后面的学习中会逐渐介绍,大家在这里先了解一下.
以下是从网上摘得的,比较全的一个资料
struts.serve.static.browserCache 该属性设置浏览器是否缓存静态内容。当应用处于开发阶段时,我们希望每次请求都获得服务器的最新响应,则可设置该属性为false。
struts.enable.DynamicMethodInvocation 该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为false。
struts.enable.SlashesInActionNames 该属性设置Struts 2是否允许在Action名中使用斜线,该属性的默认值是false。如果开发者希望允许在Action名中使用斜线,则可设置该属性为true。
struts.tag.altSyntax 该属性指定是否允许在Struts 2标签中使用表达式语法,因为通常都需要在标签中使用表达式语法,故此属性应该设置为true,该属性的默认值是true。
struts.devMode该属性设置Struts 2应用是否使用开发模式。如果设置该属性为true,则可以在应用出错时显示更多、更友好的出错提示。该属性只接受true和flase两个值,该属性的默认值是false。通常,应用在开发阶段,将该属性设置为true,当进入产品发布阶段后,则该属性设置为false。
struts.i18n.reload该属性设置是否每次HTTP请求到达时,系统都重新加载资源文件。该属性默认值是false。在开发阶段将该属性设置为true会更有利于开发,但在产品发布阶段应将该属性设置为false。
提示 开发阶段将该属性设置了true,将可以在每次请求时都重新加载国际化资源文件,从而可以让开发者看到实时开发效果;产品发布阶段应该将该属性设置为false,是为了提供响应性能,每次请求都需要重新加载资源文件会大大降低应用的性能。
struts.ui.theme该属性指定视图标签默认的视图主题,该属性的默认值是xhtml。
struts.ui.templateDir该属性指定视图主题所需要模板文件的位置,该属性的默认值是template,即默认加载template路径下的模板文件。
struts.ui.templateSuffix该属性指定模板文件的后缀,该属性的默认属性值是ftl。该属性还允许使用ftl、vm或jsp,分别对应FreeMarker、Velocity和JSP模板。
struts.configuration.xml.reload该属性设置当struts.xml文件改变后,系统是否自动重新加载该文件。该属性的默认值是false。
struts.velocity.configfile该属性指定Velocity框架所需的velocity.properties文件的位置。该属性的默认值为velocity.properties。
struts.velocity.contexts该属性指定Velocity框架的Context位置,如果该框架有多个Context,则多个Context之间以英文逗号(,)隔开。
struts.velocity.toolboxlocation该属性指定Velocity框架的toolbox的位置。
struts.url.http.port该属性指定Web应用所在的监听端口。该属性通常没有太大的用户,只是当Struts 2需要生成URL时(例如Url标签),该属性才提供Web应用的默认端口。
struts.url.https.port该属性类似于struts.url.http.port属性的作用,区别是该属性指定的是Web应用的加密服务端口。
struts.url.includeParams该属性指定Struts 2生成URL时是否包含请求参数。该属性接受none、get和all三个属性值,分别对应于不包含、仅包含GET类型请求参数和包含全部请求参数。
struts.custom.i18n.resources该属性指定Struts 2应用所需要的国际化资源文件,如果有多份国际化资源文件,则多个资源文件的文件名以英文逗号(,)隔开。
struts.dispatcher.parametersWorkaround 对于某些Java EE服务器,不支持HttpServlet Request调用getParameterMap()方法,此时可以设置该属性值为true来解决该问题。该属性的默认值是false。对于WebLogic、Orion和OC4J服务器,通常应该设置该属性为true。
struts.freemarker.manager.classname 该属性指定Struts 2使用的FreeMarker管理器。该属性的默认值是org.apache.struts2.views.freemarker.FreemarkerManager,这是Struts 2内建的FreeMarker管理器。
struts.freemarker.wrapper.altMap该属性只支持true和false两个属性值,默认值是true。通常无需修改该属性值。
struts.xslt.nocache 该属性指定XSLT Result是否使用样式表缓存。当应用处于开发阶段时,该属性通常被设置为true;当应用处于产品使用阶段时,该属性通常被设置为false。
struts.configuration.files 该属性指定Struts 2框架默认加载的配置文件,如果需要指定默认加载多个配置文件,则多个配置文件的文件名之间以英文逗号(,)隔开。该属性的默认值为struts-default.xml,struts-plugin.xml,struts.xml,看到该属性值,读者应该明白为什么Struts 2框架默认加载struts.xml文件了。 
在请求时,路径后的后缀action可要可不要,即下面的两种请求都是可以的
http://localhost:8080/Struts2/chapter1/HelloWorld
http://localhost:8080/Struts2/chapter1/HelloWorld.action




Action配置中的各项默认值
请看下面的代码
<action name="Login">
<result>/WEB-INF/JspPage/chapter1/Login.jsp</result>
</action> 
我们发现,当我们请求的路径为http://localhost:8080/Struts2/chapter1/Login时,同样可以实现页面的跳转,这是怎么回事呢?
如果没有为action指定class,默认是ActionSupport类
<action name="Login"> 
相当于 
<action name="Login" class="com.opensymphony.xwork2.ActionSupport">
如果没有为action指定method,默认执行action中的execute()方法
<action name="Login">
相当于
<action name="Login" class="com.opensymphony.xwork2.ActionSupport"
method="execute">
如果没有指定result的name属性,默认值为success.
<result>
相当于
<result name="success">
提出一个问题ActionSupport这个类到底是个什么类呢?
首先要肯定的一点是他是一个具有execute方法的类,并且execute方法返回”success”字符串,因为只有这样,前面的运行结果才能说的通. ActionSupport还实现了很多其他的结果,提供了许多定制的功能.
ActionSupport类的作用 
struts2不要求我们自己设计的action类继承任何的struts基类或struts接口,但是我们为了方便实现我们自己的action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的public String execute() throws Exception方法。因为此类中实现了很多的实用借口,提供了很多默认方法,这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样可以大大的简化Acion的开发。 
Struts2中通常直接使用Action来封装HTTP请求参数,因此,Action类里还应该包含与请求参数对应的属性,并且为属性提供对应的getter和setter方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值