记一下Struts0配置

公司项目用了Struts零配置,看起来好像很有趣的样子,稍微看了下。

1.将struts-Convention-plugin-2.1.6.jar文件复制到WEB-INF/lib路径下

2.web.xml

	<display-name>SSI</display-name>
    
	<!-- Struts配置 -->
        <filter>
		<filter-name>struts2</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
		</filter-class>
	</filter>
        <init-param>
            <param-name>config</param-name>
            <param-value>classpath:/struts.xml</param-value>
        </init-param>
        <filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

3.Struts.xml配置

<struts>
	<!-- convertion插件配置  -->
	<!-- ACTION后缀 -->
	<constant name="struts.convention.action.suffix" value="Action"/>
	<!-- 缺省的包是什么(定义拦截器用) -->
	<constant name="struts.convention.default.parent.package" value="global"/>
	<!-- 是否禁止通过包扫描Action。默认值是false  -->
        <constant name="struts.convention.action.mapAllMatches" value="true"/>
	<!-- 慎用!Convention插件使用该常量指定的包作为搜寻Action的根包。对于actions.fore.LoginAction类,
  		按约定原本应映射到/fore/login;如果将该常量设为fore,则该Action将会映射到/login -->
 	<constant name="struts.convention.package.locators" value="action"/>
	<!-- 配置Convention插件自动重加载映射 -->
	<constant name="struts.convention.classes.reload" value="true" />
	
	<!-- 不扫描哪些包下面的java类作为action -->
	<!-- <constant name="struts.Convention.exclude.packges" value="action"/> -->
	<!-- 慎用!插件以该常量指定包作为根包来搜索Action类。
		Convention插件除了扫描action,actions,struts,struts2四个包的类以外,还会扫描该常量指定的一个或多个包 -->
	<!-- <constant name="struts.convention.action.packages" value="action"/> -->
	<!-- 设置Convention插件定位视图资源的根路径。默认值为/WEB-INF/content -->
	<!-- <struts.convention.result.path" value="path"/> -->
	<!-- convertion插件配置  -->
	
        <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
        <constant name="struts.i18n.encoding" value="UTF-8"/>
        <!-- 该属性指定需要Struts 2处理的请求后缀,多个后缀之间以(,)隔开。 -->
        <constant name="struts.action.extension" value="action"/>
        <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
        <constant name="struts.serve.static.browserCache" value="false"/>
        <!-- 开发模式下使用,详细错误提示+修改配置文件不用重启tomcat含有i18n.reload、configuration.xml.reload -->
        <constant name="struts.devMode" value="true" />
	<!-- 每次上传文件的总大小设置为不超过100MB-->
        <constant name="struts.multipart.maxSize" value="104857600"/>
        <!-- 动态方法调用 ,为true时,就可以在struts.xml配置“*”的通配符-->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
    
        <!-- 全局  -->
 	<package name="global" extends="struts-default,json-default">
            
        </package>
    
</struts>

4.编写action文件

package com.test.manager.action;

import java.util.HashMap;
import java.util.Map;

import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;

import com.opensymphony.xwork2.ActionSupport;

@Results({
		@Result(name = "resultObj", type = "json", params = { "root",
				"resultObj" }),
		@Result(name = "resultArray", type = "json", params = { "root",
				"resultArray" }) })
public class testAction extends ActionSupport {
	private Map resultObj = null;

	public String HelloWorld() {
		resultObj = new HashMap();
		resultObj.put("returnMessage", "hello world!");
		return "resultObj";
	}

	public Map getResultObj() {
		return resultObj;
	}

	public void setResultObj(Map resultObj) {
		this.resultObj = resultObj;
	}

}

启动tomcat,在地址栏输入http://localhost:8080/SSI/test!HelloWorld.action

5.引入的jar包


6.插件的一些说明(转)

对于Convention插件而言,它会自动搜索位于action,actions,struts,struts2包下的所有java类,Convention插件会把如下两种java类当成Action处理:
    1)  所有实现了com.opensymphony.xwork2.Action的java类
    2)  所有类名以Action结尾的java类


默认情况下。Convention总会到WEB应用的WEB-INF/content路径下定位物理资源,定位资源的约定是:actionRUL+resultCODE+suffix。当某个逻辑视图找不到对应的试图资源时,Convention会自动视图使用ActionURL+suffix作为物理视图资源。
如:actions.fore.LoginAction 返回success字符串时,Convention优先考虑使用WEB-INF/content/fore目录下的login-success.jsp作为视图资源。如果找不到该文件,login.jsp也可作为对应的试图资源。如果返回input字符串,Convention会将WEB-INF/content/fore里面查找login-input.jsp


映射完毕会将Action类名的驼峰写法(每个单词首字母大写、其他字母小写的写法)转成中画线写法(所有字母小写,单词与单词之间以中画线隔开)


为了看到struts2应用里的Action等各种资源的影射情况,struts2提供了Config Browser插件。使用方法,将struts2-config-browser-plugin-2.1.6.jar文件复制到struts2应用的WEB-INF/lib目录中。
打开首页地址:http://localhost:8080/应用名字/config-browser/actionNames.action这里可以看到Config Browser插件的首页。
注意:这里不管开发者是否使用struts.xml文件进行配置,一样可以看到struts的配置信息。


如果希望一个Action处理结束后不是进入一个试图页面,而是进行另一个Action形成的Action链。通过Convention插件则只需遵守如下三个约定即可。
1)  第一个Action返回的逻辑视图字符串没有对应的视图资源
2)  第二个Action与第一个Action处在同一个包下
3)  第二个Action影射的URL为:firstActionURL+resultCODE
如,第一个Action为OneAction,里面有个方法返回为“two”,那么就得保证,WEB-INF/content/下没有one.jsp或one-two.jsp 对于第二个action 它的名字应该是OneTwoAction,而对应的url应该是:“one-two.action”

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值