浏览 8763 次
锁定老帖子 主题:说一说struts2
精华帖 (0) :: 良好帖 (0) :: 新手帖 (9) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-06
2.1.6默认加上个fileUpload拦截器,很没必要。需要的时候配置不就好了,真不知道它是怎么想的。 还有那个jsonvalidat拦截器,里面竟然直接输出json文本,哎,我要用了json插件,那jsonvalidat输出的东西就看不到了。明显是这拦截器设计的有问题 现在做法是使用一个hashmap封装信息,配合json插件输出到页面。 制定struts-core,struts-upload,struts-ajax这几个包,给每个包重新配置拦截器栈和默认拦截器。需要文件上传继承struts-upload包,需要ajax则继承struts-ajax包。 感觉好多了 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-08-07
benbear2008 写道 2.1.6默认加上个fileUpload拦截器
这个东西害得我找了关天问题,整整耗了我半天时间。:cry: 我这两天写了一个servlet来上传文件,却在servlet里怎么也得不到上传文件的信息,我还以为我写错了呢。找了一个示例程序,试的另一个程序在单独应用里可以,在我的应用里就是不行。试了好长时间,最后试到struts2,这下行了,这才知道是它的问题。由于系统比较复杂,而且技术杂乱,怎么也没有想到struts2。唉,还是不太了解啊,不过也没有必要了解了,我想以后也没有机会用它了, 除非万不得以的情况。 |
|
返回顶楼 | |
发表时间:2009-08-08
应该是struts2过滤器配置的问题,建议配置成 <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> 这样就不会过滤servlet了。 |
|
返回顶楼 | |
发表时间: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就只用了国际化的功能了。
没有办法,有些领导不关心技术,就知道催命。 |
|
返回顶楼 | |
发表时间:2009-08-08
说句你不爱听的话,这是你的问题
struts2默认的拦截器栈已经有10个,如果再加上你所说的struts-core,struts-upload,struts-ajax那还得了,struts2是高度灵活配置的,正如你所做的写一些自己的拦截器栈是很简单的(默认配置fileUpload是没有什么问题的,具体自己看源代码或者自己做性能测试) 再来就是你所说的"我要用了json插件,那jsonValidat输出的东西就看不到了",这根本就是你拦截器栈顺序的问题,或者你是你不懂得怎么使用jsonValidat |
|
返回顶楼 | |
发表时间: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的用法,学习了。 |
|
返回顶楼 | |
发表时间: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的配置是相当灵活,你可以很容易写出自己的拦截器包,正如你现在所做,如果这你都不能理解那就说什么也是多余 |
|
返回顶楼 | |