struts配置的运用和理解


action配置的格式

<package name="包名字" extends="继承的包" namespace="空间名" >
<action name="访问的名称" class="处理请求的类">
<result name="处理类返回的结果名称">该结果名称所对应的JSP页面</result>
</action>
</package>

常用的两种action配置示例

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<package name="getIp" extends="json-default" namespace="/getIp">		
			<!-- 查询链接 -->
		<action name="getIpDetailAction" class="action.GetIpDetailAction">
			<result type="json"></result>
		</action>		
		<action name="getIp"  class="action.GetIpAction">
			<result name="success">/getIp.jsp</result>
		</action>	
	</package>
	
	
</struts>
这两种配置的访问方法分别为

getIpDetailAction

                            localhost:8080/项目名/命名空间/action名称

在浏览器中输入  localhost:8080/项目名/getIp/getIpDetailAction 

就会进入到 

action.GetIpDetailAction中进行处理

然后返回一个json


getIp

                           localhost:8080/项目名/命名空间/action名称

在浏览器中输入  localhost:8080/项目名/getIp/getIp

就会进入到 

action.GetIpAction中进行处理

处理成功后跳转到

getIp.jsp页面



Action配置中的各项默认值

如果没有为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">


ps: ActionSupport这个类到底是个什么类呢?
是一个具有execute方法的类,并且execute方法返回”success”字符串. ActionSupport还实现了很多其他的结果,提供了许多定制的功能



一些配置用法示例

示例一

<package name="aa" extends="struts-default" >
<action name="myaa" class="com.test.MyAction">
<result name="success">/test/msg.jsp</result>
</action>
</package>
访问时:
<a href="myaa.action" >访问myaaAction</a>

ps:  这里的.action也是默认值 可在后面讲到的开关中设置


示例二

method属性,该属性可以把一个类的多个方法映射为多个Action,如:
类文件

public class MethodAction extends ActionSupport
{
public String add()
{
return SUCCESS;
}
public String delete()
{
return SUCCESS;
}
public String modify()
{
return SUCCESS;
}
public String query()
{
return SUCCESS;
}
}
struts.xml配置文件:
<action name="访问的方法名" class="处理的类" method="处理的方法名">
<result name="结果页名">结果页面</result>
</action>
<action name="add" class="com.struts2.chen.MethodAction" method="add">
<result name="success">/method/addRes.jsp</result>
</action>
<action name="delete" class="com.struts2.chen.MethodAction" method="delete">
<result name="success">/method/deleteRes.jsp</result>
</action>
<action name="modify" class="com.struts2.chen.MethodAction" method="modify">
<result name="success">/method/modifyRes.jsp</result>
</action>
<action name="query" class="com.struts2.chen.MethodAction" method="query">
<result name="success">/method/queryRes.jsp</result>
</action>
页面:
<a href="add.action">增加</a><br />
<a href="delete.action">删除</a><br />
<a href="modify.action">修改</a><br />
<a href="query.action">查询</a><br />


示例三

动态调用方法DMI 如果是动态调用,那么就不必要象上面那样填写那么多的配置,可以直接在页面上指定调用的方法。
类文件
public class MethodAction extends ActionSupport
{
public String add()
{
return SUCCESS;
}
public String delete()
{
return SUCCESS;
}
public String modify()
{
return SUCCESS;
}
public String query()
{
return SUCCESS;
}
}
struts.xml配置为:
<action name="methodaction" class="com.struts2.chen.MethodAction">
<result name="success">/method/Res.jsp</result>
</action>
页面:
<a href="<%=path %>/methodaction!add.action">增加DMI</a><br />
<a href="<%=path %>/methodaction!delete.action">删除DMI</a><br />
<a href="<%=path %>/methodaction!modify.action">修改DMI</a><br />
<a href="<%=path %>/methodaction!query.action">查询DMI</a><br />


常用开关的介绍

以下开关并非都要设置,酌情使用

<constant name="struts.i18n.encoding" value="UTF-8"/>
指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法


<constant name="struts.action.extension" value="do"/>
该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts 2处理。    如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。   
ps:
在请求时,路径后的后缀action可要可不要,即下面的两种请求都是可以的
http://localhost:8080/Struts2/chapter1/HelloWorld
http://localhost:8080/Struts2/chapter1/HelloWorld.action
http://localhost:8080/Struts2/chapter1/HelloWorld.do


<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。
ps:开发阶段将该属性设置了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 的时候,会报错,那么就应该到struts.xml中加上一个默认错误ACTION。如:
<default-action-ref name="error" />
<action name="error">
<result>/error.jsp</result>
</action>
错误的,不存在的页面,那么就在web.xml中加如下配置:
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>



一份完整的struts示例

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >  
<struts>   
   
    <include file="struts-default.xml"></include>      
       
  
    <package name="com.kay.struts2" extends="struts-default" namespace="/test">  
        <interceptors>          
            <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>  

        <default-interceptor-ref name="mystack"></default-interceptor-ref>  

        <global-results>  
            <result name="input">/error.jsp</result>  
        </global-results>  
           
    
        <action name="hello" class="com.kay.struts2.Action.LoginAction">           
            <interceptor-ref name="timer"></interceptor-ref> 
         <result name="success" type="dispatcher">/talk.jsp</result> 
         <param name="url">http://www.sina.com</param>  
        </action>  
    </package>  
</struts>

分段解析struts

<include file="struts-default.xml"></include>  
include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用

如图

struts配置的运用和理解_第1张图片

我在2中 使用<include file="struts/*.xml"></include>  就可以把1的struts包含在内



      <interceptor-stack name="mystack">  
                <interceptor-ref name="timer"></interceptor-ref>  
                <interceptor-ref name="logger"></interceptor-ref>  
            </interceptor-stack>  
定义拦截器栈


     <interceptor name="timer" class="com.kay.timer"></interceptor>  
            <interceptor name="logger" class="com.kay.logger"></interceptor>  
定义拦截器   name:拦截器名称      class:拦截器类路径   


   <default-interceptor-ref name="mystack"></default-interceptor-ref>  
定义默认的拦截器 每个Action都会自动引用,如果Action中引用了其它的拦截器 默认的拦截器将无效

  

  <global-results>  
            <result name="input">/error.jsp</result>  
        </global-results>  
全局results配置


 <param name="url">http://www.sina.com</param>  
参数设置       name:对应Action中的get/set方法 


 

 <result name="success" type="dispatcher">/talk.jsp</result>
节点配置        name : result名称 和Action中返回的值相同        type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher   
 

<interceptor-ref name="timer"></interceptor-ref> 
引用拦截器       name:拦截器名称或拦截器栈名称 

 <action name="hello" class="com.kay.struts2.Action.LoginAction"> 
        </action>  
 Action配置 一个Action可以被多次映射(只要action配置中的name不同)   
             name:action名称   
             class: 对应的类的路径   
             method: 调用Action中的方法名  

 

 <package name="com.kay.struts2" extends="struts-default" namespace="/test">         
    </package>  
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

我常用的struts配置

struts.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<!-- struts constants-->
	<constant name="struts.multipart.maxSize" value="2000000000" />
	<constant name="struts.multipart.saveDir" value="/tmp" />
	<constant name="struts.custom.i18n.resources" value="i18n/message,i18n/actions" />
	<package name="zoe-default" extends="json-default">
		<interceptors>
			<!-- Default Stack -->
			<interceptor-stack name="zoeStack">
				<interceptor-ref name="defaultStack">
					<param name="exception.logEnabled">true</param>
					<param name="exception.logLevel">warn</param>
				</interceptor-ref>			
			</interceptor-stack>
			<!-- Authority CheckInterceptor -->	
		</interceptors>
	
	</package>

	<!-- struts packages -->
	<include file="struts/*.xml"></include>

	<!-- spring plug-in(refer from spring plug-in package) -->
	<!-- 
		<package name="spring-default">
		<interceptors>
		<interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
		</interceptors>
		</package>   
	-->

	<!-- json plug-in(refer from json plug-in package) -->
	<!-- 
		<package name="json-default" extends="struts-default">
		<result-types>
		<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
		</result-types>
		<interceptors>
		<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
		</interceptors>
		</package>
	-->
</struts>

struts文件夹下的 action-package.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<package name="getIp" extends="json-default" namespace="/getIp">		
			<!-- 查询链接 -->
		<action name="getIpDetailAction" class="action.GetIpDetailAction">
			<result type="json"></result>
		</action>		
		<action name="getIp"  class="action.GetIpAction">
			<result name="success">/getIp.jsp</result>
		</action>	
	</package>
	
	
</struts>





你可能感兴趣的:(json,namespace,struts2,struts,Interceptor)