论坛首页 Java企业应用论坛

说一说struts2

浏览 8732 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (9) :: 隐藏帖 (2)
作者 正文
   发表时间:2009-08-06  
说句大家不爱听的话,struts2在细节上做的太不好了。
2.1.6默认加上个fileUpload拦截器,很没必要。需要的时候配置不就好了,真不知道它是怎么想的。
还有那个jsonvalidat拦截器,里面竟然直接输出json文本,哎,我要用了json插件,那jsonvalidat输出的东西就看不到了。明显是这拦截器设计的有问题

现在做法是使用一个hashmap封装信息,配合json插件输出到页面。
制定struts-core,struts-upload,struts-ajax这几个包,给每个包重新配置拦截器栈和默认拦截器。需要文件上传继承struts-upload包,需要ajax则继承struts-ajax包。

感觉好多了
   发表时间:2009-08-07  
benbear2008 写道
2.1.6默认加上个fileUpload拦截器


这个东西害得我找了关天问题,整整耗了我半天时间。:cry:

我这两天写了一个servlet来上传文件,却在servlet里怎么也得不到上传文件的信息,我还以为我写错了呢。找了一个示例程序,试的另一个程序在单独应用里可以,在我的应用里就是不行。试了好长时间,最后试到struts2,这下行了,这才知道是它的问题。由于系统比较复杂,而且技术杂乱,怎么也没有想到struts2。唉,还是不太了解啊,不过也没有必要了解了,我想以后也没有机会用它了, 除非万不得以的情况。
1 请登录后投票
   发表时间:2009-08-08  

应该是struts2过滤器配置的问题,建议配置成

<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>*.action</url-pattern>
</filter-mapping>

 这样就不会过滤servlet了。

0 请登录后投票
   发表时间:2009-08-08  
benbear2008 写道

应该是struts2过滤器配置的问题,建议配置成

<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>*.action</url-pattern>
</filter-mapping>

 这样就不会过滤servlet了。

我们的程序主要用它做国际化,没有用什么action, 所以后来没有办法只有把原来的url-pattern改成*.jsp了。我看了一下基本上就只用了一个s:text标签。刚开始的想法不是这样的,想用它的全部功能,但是前台页面人员不熟悉这个,就用最原始的办法把jsp script写在页面里了。结果引进struts2就只用了国际化的功能了。

 

没有办法,有些领导不关心技术,就知道催命。

0 请登录后投票
   发表时间:2009-08-08  
说句你不爱听的话,这是你的问题

struts2默认的拦截器栈已经有10个,如果再加上你所说的struts-core,struts-upload,struts-ajax那还得了,struts2是高度灵活配置的,正如你所做的写一些自己的拦截器栈是很简单的(默认配置fileUpload是没有什么问题的,具体自己看源代码或者自己做性能测试)

再来就是你所说的"我要用了json插件,那jsonValidat输出的东西就看不到了",这根本就是你拦截器栈顺序的问题,或者你是你不懂得怎么使用jsonValidat
1 请登录后投票
   发表时间:2009-08-10   最后修改:2009-08-10

楼上貌似误解的我的意思。我还是把我的包配置贴出来吧。

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<package name="core-default" abstract="true" extends="struts-default">
		<interceptors>

			<!--普通栈-->
			<interceptor-stack name="commonStack">
				<interceptor-ref name="exception">
					<param name="logEnabled">true</param>
					<param name="logLevel">warn</param>
				</interceptor-ref>
				<interceptor-ref name="params">
					<param name="excludeParams">dojo\..*</param>
				</interceptor-ref>
				<interceptor-ref name="conversionError" />
				<interceptor-ref name="validation">
					<param name="excludeMethods">input,back,cancel,browse</param>
					<param name="alwaysInvokeValidate">false</param>
					<param name="validateAnnotatedMethodOnly">true</param>
				</interceptor-ref>
				<interceptor-ref name="workflow">
					<param name="excludeMethods">input,back,cancel,browse</param>
				</interceptor-ref>
			</interceptor-stack>

		</interceptors>
		<default-interceptor-ref name="commonStack" />

	</package>

	<package name="upload-default" abstract="true" extends="struts-default">
		<interceptors>
			<!--上传栈-->
			<interceptor-stack name="uploadStack">
				<interceptor-ref name="exception">
					<param name="logEnabled">true</param>
					<param name="logLevel">warn</param>
				</interceptor-ref>
				<interceptor-ref name="fileUpload">
					<!--
						<param name="allowedTypes">
						image/bmp,image/png,image/gif,image/jpeg,image/pjpeg,application/x-shockwave-flash,text/css,text/js,text/javascript
						</param>
					-->
				</interceptor-ref>
				<interceptor-ref name="params">
					<param name="excludeParams">dojo\..*</param>
				</interceptor-ref>
				<interceptor-ref name="conversionError" />
				<interceptor-ref name="validation">
					<param name="excludeMethods">input,back,cancel,browse</param>
					<param name="alwaysInvokeValidate">false</param>
					<param name="validateAnnotatedMethodOnly">true</param>
				</interceptor-ref>
				<interceptor-ref name="workflow">
					<param name="excludeMethods">input,back,cancel,browse</param>
				</interceptor-ref>
			</interceptor-stack>
		</interceptors>

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

	</package>

	<package name="ajax-default" abstract="true" extends="json-default">

		<result-types>
			<result-type name="json" class="com.googlecode.jsonplugin.JSONResult">
				<param name="enableGZIP">true</param>
			</result-type>
		</result-types>

		<interceptors>
			<!--AJAX栈-->
			<interceptor-stack name="ajaxStack">
				<interceptor-ref name="exception">
					<param name="logEnabled">true</param>
					<param name="logLevel">warn</param>
				</interceptor-ref>
				<interceptor-ref name="params">
					<param name="excludeParams">dojo\..*</param>
				</interceptor-ref>
				<interceptor-ref name="conversionError" />
				<interceptor-ref name="validation">
					<param name="excludeMethods">
						input,back,cancel,browse,list
					</param>
				</interceptor-ref>
			</interceptor-stack>
		</interceptors>

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

	</package>

	<package name="ajax-upload-default" abstract="true" extends="json-default">
		<result-types>
			<result-type name="json" class="com.googlecode.jsonplugin.JSONResult">
				<param name="enableGZIP">true</param>
			</result-type>
		</result-types>

		<interceptors>
			<!--ajax上传栈-->
			<interceptor-stack name="ajaxUploadStack">
				<interceptor-ref name="exception">
					<param name="logEnabled">true</param>
					<param name="logLevel">warn</param>
				</interceptor-ref>
				<interceptor-ref name="fileUpload">
					<!--
						<param name="allowedTypes">
						image/bmp,image/png,image/gif,image/jpeg,image/pjpeg,application/x-shockwave-flash,text/css,text/js,text/javascript
						</param>
					-->
				</interceptor-ref>
				<interceptor-ref name="params">
					<param name="excludeParams">dojo\..*</param>
				</interceptor-ref>
				<interceptor-ref name="conversionError" />
				<interceptor-ref name="validation">
					<param name="excludeMethods">input,back,cancel,browse</param>
					<param name="alwaysInvokeValidate">false</param>
					<param name="validateAnnotatedMethodOnly">true</param>
				</interceptor-ref>
				<interceptor-ref name="workflow">
					<param name="excludeMethods">input,back,cancel,browse</param>
				</interceptor-ref>
			</interceptor-stack>
		</interceptors>

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

	</package>

</struts>

 

 

 

使用上面的配置需要加入json插件,建议如下使用下面的方法引用。

 

1.拷贝上面的代码保存为 struts-core.xml

2.新建struts.xml文件

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<include file="struts-core.xml" />

	<package name="my" namespace="/index" extends="core-default">
		<!-- 最普通的action -->
	</package>

	<package name="my.ajax" namespace="/index/ajax" extends="ajax-default">
		<!-- 需要ajax的action -->
	</package>

	<package name="my.upload" namespace="/index/upload" extends="upload-default">
		<!-- 需要文件上传的action -->
	</package>

	<package name="my.upload.ajax" namespace="/index/upload/ajax"
		extends="ajax-upload-default">
		<!-- 需要ajax方式上传文件的action -->
	</package>
</struts>

 

 

 

 

 

我是这么想的,重新配置拦截器,按功能把一些拦截器配置成拦截器栈,并按功能重新做成包。以后用的时候直接继承配置包。

 

请楼上说说jsonvalidation的用法,学习了。

0 请登录后投票
   发表时间:2009-08-10  
benbear2008 写道

楼上貌似误解的我的意思。我还是把我的包配置贴出来吧。

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<package name="core-default" abstract="true" extends="struts-default">
		<interceptors>

			<!--普通栈-->
			<interceptor-stack name="commonStack">
				<interceptor-ref name="exception">
					<param name="logEnabled">true</param>
					<param name="logLevel">warn</param>
				</interceptor-ref>
				<interceptor-ref name="params">
					<param name="excludeParams">dojo\..*</param>
				</interceptor-ref>
				<interceptor-ref name="conversionError" />
				<interceptor-ref name="validation">
					<param name="excludeMethods">input,back,cancel,browse</param>
					<param name="alwaysInvokeValidate">false</param>
					<param name="validateAnnotatedMethodOnly">true</param>
				</interceptor-ref>
				<interceptor-ref name="workflow">
					<param name="excludeMethods">input,back,cancel,browse</param>
				</interceptor-ref>
			</interceptor-stack>

		</interceptors>
		<default-interceptor-ref name="commonStack" />

	</package>

	<package name="upload-default" abstract="true" extends="struts-default">
		<interceptors>
			<!--上传栈-->
			<interceptor-stack name="uploadStack">
				<interceptor-ref name="exception">
					<param name="logEnabled">true</param>
					<param name="logLevel">warn</param>
				</interceptor-ref>
				<interceptor-ref name="fileUpload">
					<!--
						<param name="allowedTypes">
						image/bmp,image/png,image/gif,image/jpeg,image/pjpeg,application/x-shockwave-flash,text/css,text/js,text/javascript
						</param>
					-->
				</interceptor-ref>
				<interceptor-ref name="params">
					<param name="excludeParams">dojo\..*</param>
				</interceptor-ref>
				<interceptor-ref name="conversionError" />
				<interceptor-ref name="validation">
					<param name="excludeMethods">input,back,cancel,browse</param>
					<param name="alwaysInvokeValidate">false</param>
					<param name="validateAnnotatedMethodOnly">true</param>
				</interceptor-ref>
				<interceptor-ref name="workflow">
					<param name="excludeMethods">input,back,cancel,browse</param>
				</interceptor-ref>
			</interceptor-stack>
		</interceptors>

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

	</package>

	<package name="ajax-default" abstract="true" extends="json-default">

		<result-types>
			<result-type name="json" class="com.googlecode.jsonplugin.JSONResult">
				<param name="enableGZIP">true</param>
			</result-type>
		</result-types>

		<interceptors>
			<!--AJAX栈-->
			<interceptor-stack name="ajaxStack">
				<interceptor-ref name="exception">
					<param name="logEnabled">true</param>
					<param name="logLevel">warn</param>
				</interceptor-ref>
				<interceptor-ref name="params">
					<param name="excludeParams">dojo\..*</param>
				</interceptor-ref>
				<interceptor-ref name="conversionError" />
				<interceptor-ref name="validation">
					<param name="excludeMethods">
						input,back,cancel,browse,list
					</param>
				</interceptor-ref>
			</interceptor-stack>
		</interceptors>

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

	</package>

	<package name="ajax-upload-default" abstract="true" extends="json-default">
		<result-types>
			<result-type name="json" class="com.googlecode.jsonplugin.JSONResult">
				<param name="enableGZIP">true</param>
			</result-type>
		</result-types>

		<interceptors>
			<!--ajax上传栈-->
			<interceptor-stack name="ajaxUploadStack">
				<interceptor-ref name="exception">
					<param name="logEnabled">true</param>
					<param name="logLevel">warn</param>
				</interceptor-ref>
				<interceptor-ref name="fileUpload">
					<!--
						<param name="allowedTypes">
						image/bmp,image/png,image/gif,image/jpeg,image/pjpeg,application/x-shockwave-flash,text/css,text/js,text/javascript
						</param>
					-->
				</interceptor-ref>
				<interceptor-ref name="params">
					<param name="excludeParams">dojo\..*</param>
				</interceptor-ref>
				<interceptor-ref name="conversionError" />
				<interceptor-ref name="validation">
					<param name="excludeMethods">input,back,cancel,browse</param>
					<param name="alwaysInvokeValidate">false</param>
					<param name="validateAnnotatedMethodOnly">true</param>
				</interceptor-ref>
				<interceptor-ref name="workflow">
					<param name="excludeMethods">input,back,cancel,browse</param>
				</interceptor-ref>
			</interceptor-stack>
		</interceptors>

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

	</package>

</struts>

 

 

 

使用上面的配置需要加入json插件,建议如下使用下面的方法引用。

 

1.拷贝上面的代码保存为 struts-core.xml

2.新建struts.xml文件

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<include file="struts-core.xml" />

	<package name="my" namespace="/index" extends="core-default">
		<!-- 最普通的action -->
	</package>

	<package name="my.ajax" namespace="/index/ajax" extends="ajax-default">
		<!-- 需要ajax的action -->
	</package>

	<package name="my.upload" namespace="/index/upload" extends="upload-default">
		<!-- 需要文件上传的action -->
	</package>

	<package name="my.upload.ajax" namespace="/index/upload/ajax"
		extends="ajax-upload-default">
		<!-- 需要ajax方式上传文件的action -->
	</package>
</struts>

 

 

 

 

 

我是这么想的,重新配置拦截器,按功能把一些拦截器配置成拦截器栈,并按功能重新做成包。以后用的时候直接继承配置包。

 

请楼上说说jsonvalidation的用法,学习了。


"我是这么想的,重新配置拦截器,按功能把一些拦截器配置成拦截器栈,并按功能重新做成包。以后用的时候直接继承配置包。" 适合你的不一定适合别人,正如你不需要fileUpload拦截器.你就反而怪Struts2在细节上做的太不好了.如果Struts2默认有30个拦截器栈,而那些拦截器栈全部都不适合你你就叫得更大声了. Struts2默认的拦截器有30多个,想一下有多少种组合方式,说实话我觉得我的帖子已经说明得很清楚,没什么需要再补充的了. 重点是Struts2的配置是相当灵活,你可以很容易写出自己的拦截器包,正如你现在所做,如果这你都不能理解那就说什么也是多余
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics