学习sturts2无非就是学习各种配置而已。最重要的就是struts.xml配置文件。
<?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>
<include file="login.xml" /><!--将其他的xml文件容纳进来-->
<constant name="struts.devMode" value="true" />
<!-- 开发模式,更改配置文件无需重启服务器。 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- 字符集,页面传递是中文需要使用此配置。解决中文问题。 -->
<constant name="struts.custom.i18n.resources" value="i18n" />
<!-- 国际化 -->
<constant name="struts.i18n.reload" value="false" />
<!--国际化是否生效-->
<constant name="struts.convention.classes.reload" value="false" />
<!-- 配置Convention插件自动重加载映射-->
<constant name="struts.convention.action.packages" value="net.shopxx.action" />
<!--
这个属性用于约定Action 类的根包(这个包是Java 类的包,而不是Struts.xml中配置的<package>节点)
在一个项目中有这样一系列的Java 包,那么当指定convention的这个属性,Struts
框架就会在你访问特定的URL时会自动的找到所要的请求的实现类。 当你在浏览器中输入:
http://localhost:8080/HelloWorld.action
,Struts会自动的找到并执行com.ZTest.web.action.HelloWorldAction.java类。
当你在浏览器中输入: http://localhost:8080/test/aaa.action
,Struts会自动的找到并执行com.ZTest.web.action.test.aaaAction.java类。
-->
<constant name="struts.serve.static.browserCache" value="false" />
<!--是否struts过滤器中提供的静态内容应该被浏览器缓存在头部属性中-->
<constant name="struts.objectFactory" value="spring" />
<!-- com.opensymphony.xwork2.ObjectFactory接口 -->
<constant name="struts.multipart.maxSize" value="-1" />
<!-- multipart请求信息的最大尺寸(文件上传用) -->
<constant name="struts.ui.theme" value="simple" />
<!-- 默认的UI template主题 -->
<constant name="struts.action.extension" value="action" />
<!--
用URL扩展名来确定是否这个请求是被用作Struts action,其实也就是设置 action的后缀,例如login.do的'do'字
-->
<constant name="struts.convention.result.path" value="/WEB-INF/template/" />
<!--
设置Convention插件定位视图资源的根路径。默认值为/WEB-INF/content
这个属性用于约定Action类执行完毕以后返回资源的结果路径 当你在浏览器中输入:xxx/HelloWorld.aciton
,Struts会自动的找到并执行com.ZTest.web.action.HelloWorldAction.java类,并放回到WEB-INF/template/HelloWorld.jsp。
-->
<constant name="struts.convention.action.name.separator"
value="_" />
<!--
这个属性是约定当一个Java 类 有多个单词组合成的时候,映射的URL地址的时候访问的格式的分隔符。
如果不指定这个属性,Struts默认的分隔符是 “-”,例如 HelloWorldAction 则访问的URL
是Hello-World.action 如果指定这个属性是上面的格式,则是没有分隔符,会按照Java 类名直接映射,例如
HelloWorldAction 则访问的URL 是HelloWorld.action
-->
<constant name="struts.convention.action.name.lowercase"
value="false" />
<!--
是否将Action类转换成小写当一个类的类名是多个单词组合起来的时候,例如 HelloWolrdAction,如果指定了这个属性,
则访问的地址必须是: HelloWorld.action ,如果不是指定这个属性则是: helloworld.action
-->
<constant name="struts.convention.default.parent.package"
value="default" />
<!--
这个属性指定的是Strtus.xml中配置的 <package>节点的父节点。
-->
<constant name="struts.freemarker.manager.classname" value="net.shopxx.common.FreemarkerManager" />
<!--
属性指定Struts 2使用的FreeMarker管理器。该属性的默认值是
org.apache.struts2.views.freemarker.FreemarkerManager,这是Struts
2内建的FreeMarker管理器。
struts.freemarker.wrapper.altMap该属性只支持true和false两个属性值,默认值是true。通常无需修改该属性值。
-->
<!--访问http://localhost:8080/工程名/hello_struts(既可以访问根目录下得Hello.jsp)-->
<package name="front" extends="struts-default" namespace="/">
<default-action-ref name="errorPage404Action" /><!-- 默认的action -->
<action name="errorPage404Action">
<result type="redirect">/html/error_page_404.html</result>
</action>
<global-results><!-- 全局的result,只使用与此packeage中的所有action -->
<result name="mainpage">/main.jsp</result>
</global-results>
<action name="index" class="com.bjsxt.struts2.front.action.IndexAction1">
<!--
配置了class程序会访问自己的action中的execute方法返回String,如return success
-->
<result name="success">/ActionIntroduction.jsp</result>
</action>
</package>
<package name="user" extends="struts-default" namespace="/user">
<action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction"
method="add"><!--加入了method="add"所以会访问UserAction中的add方法(这种方法不建议使用,忘了吧!)-->
<result>/user_add_success.jsp</result>
<!--
页面调用<a href="<%=context
%>/user/userAdd">添加用户</a>【这样会访问】namespace="/user",action名称为name="userAdd"的action中add方法
-->
</action>
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<!--
建议使用的方法在这里,这样配置需要使用的调用发放是(动态调用DMI)
-->
<result>/user_add_success.jsp</result>
<!--
页面调用<a href="<%=context
%>/user/user!add">添加用户</a>【这样会访问】namespace="/user",action名称为name="user"的action中add方法
-->
<!--用于一个action中多个方法对应返回同一个页面,返回不同页面需要配置多个result-->
</action>
</package>
<package name="actions" extends="struts-default" namespace="/actions">
<action name="Student*" class="com.bjsxt.struts2.action.StudentAction"
method="{1}">
<result>/Student{1}_success.jsp</result>
<!--
通配符的使用;jsp中有两个访问连接 <a href="<%=context
%>/actions/Studentadd">添加学生</a> <a href="<%=context
%>/actions/Studentdelete">删除学生</a>
*和{1}就是填充add和delete后所访问action中的方法与jsp 【action中一定会有两个方法一个add一个delete】
-->
<!--用于一个action中多个方法,返回不同页面。只需配置一个带有通配符的result【约定优于配置】-->
</action>
<action name="*_*" class="com.bjsxt.struts2.action.{1}Action"
method="{2}"><!--第一个*对应{1};第二个*对应{2}-->
<result>/{1}_{2}_success.jsp</result>
<!-- {0}_success.jsp -->
</action>
<!--用于多个action中多个方法,返回不同页面。只需配置一个带有通配符的result【约定优于配置】-->
</package>
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index"></default-action-ref>
<!--默认的action配置-->
<action name="index">
<result>/default.jsp</result>
</action>
</package>
</struts>
如果使用struts2的convertion plugin约束,可以完全不用配置action