<package name="包名字" extends="继承的包" namespace="空间名" > <action name="访问的名称" class="处理请求的类"> <result name="处理类返回的结果名称">该结果名称所对应的JSP页面</result> </action> </package>
<?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>这两种配置的访问方法分别为
localhost:8080/项目名/命名空间/action名称
在浏览器中输入 localhost:8080/项目名/getIp/getIpDetailAction
就会进入到
action.GetIpDetailAction中进行处理
然后返回一个json
localhost:8080/项目名/命名空间/action名称
在浏览器中输入 localhost:8080/项目名/getIp/getIp
就会进入到
action.GetIpAction中进行处理
处理成功后跳转到
getIp.jsp页面
如果没有为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="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 />
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>
<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不同)
<package name="com.kay.struts2" extends="struts-default" namespace="/test"> </package>package提供了将多个Action组织为一个模块的方式
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>
<?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>