您的位置:首页 > 编程语言 > Java开发

struts配置的运用和理解

2015-02-26 11:07 204 查看

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节点引用
如图



我在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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: