DWR和struts2的问题!!!!!
现在尝试将原有的项目转化成struts2框架的。目前完成了一些小模块都是采用struts2配置的action,而原来的项目中有很多servlet,web.xml配置中大多...
现在尝试将原有的项目转化成struts2框架的。 目前完成了一些小模块都是采用struts2配置的action,而原来的项目中有很多servlet,web.xml配置中大多是*.do格式。
#1. struts2 配置中默认的action 都是/*而不是*.do ,请问怎么配置才能将struts2的action和servlet同时使用。 尝试过在struts.xml中采用
<constant name="struts.action.extension" value="do,action,,"/>
不过貌似不好用。
#2.原有的面目中有一部分页面都采用dwr的技术。很遗憾我不会用,今天刚刚了解一点。将dwr.jar放入了web-inf下的lib中,jsp页面中也引用了web-appname/dwr/engin.js 和util.js。不过在运行的时候 页面就会报错说 DWRUtil未定义。不知道什么原因。
#3.针对第二个问题,我把dwr.jar解压后得到了上述两个js文件,并重新放入了一个/dwr路径下,这次没有报错说dwrutil未找到,但是却不能找到dwr/interface下动态产生的js文件。怀疑是struts2的过滤器将dwr的servlet过滤掉,而不能正常工作。因为尝试访问localhost://8080/webappname/dwr/index.html返回404错误。
实在是才疏学浅,不知道怎么处理了。
麻烦高手指点,多谢!多谢!
只有这么点分了,还请不吝赐教。。。 展开
#1. struts2 配置中默认的action 都是/*而不是*.do ,请问怎么配置才能将struts2的action和servlet同时使用。 尝试过在struts.xml中采用
<constant name="struts.action.extension" value="do,action,,"/>
不过貌似不好用。
#2.原有的面目中有一部分页面都采用dwr的技术。很遗憾我不会用,今天刚刚了解一点。将dwr.jar放入了web-inf下的lib中,jsp页面中也引用了web-appname/dwr/engin.js 和util.js。不过在运行的时候 页面就会报错说 DWRUtil未定义。不知道什么原因。
#3.针对第二个问题,我把dwr.jar解压后得到了上述两个js文件,并重新放入了一个/dwr路径下,这次没有报错说dwrutil未找到,但是却不能找到dwr/interface下动态产生的js文件。怀疑是struts2的过滤器将dwr的servlet过滤掉,而不能正常工作。因为尝试访问localhost://8080/webappname/dwr/index.html返回404错误。
实在是才疏学浅,不知道怎么处理了。
麻烦高手指点,多谢!多谢!
只有这么点分了,还请不吝赐教。。。 展开
3个回答
展开全部
我来帮你解答吧。
解1.你的web.xml里应该有<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>resources/context/struts-context.xml,struts-default.xml,struts-plugin.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
倒数第二行是请求扩展名,懂了吧,一可以改成<url-pattern>/*.action</url-pattern>这样你的请求只有*.action的进入struts2的filter,其他都不进。同理你可以改servlet的请求扩展名,他也在这里大概是这样的<servlet-mapping>
<servlet-name> myServlet </servlet-name>
<url-pattern> *.do </url-pattern>
</servlet-mapping>
不过话说回来别两个同时用,看代码的人会骂人的。
解2+3:我们配置DWR时一般是这样的:
<script type='text/javascript' src='/dwr/interface/classonedwr.js'></script>
<script type='text/javascript' src='/dwr/interface/newsAdmindwr.js'></script>
<script type='text/javascript' src='/dwr/interface/channelAlldwr.js'></script>
<script type='text/javascript' src='/dwr/interface/voteAlldwr.js'></script>
<script type='text/javascript' src='/dwr/interface/tUserUserinfoJs.js'></script>
<script type='text/javascript' src='/dwr/interface/productViewdwr.js'></script>
<script type='text/javascript' src='/dwr/interface/tSystemLinkJs.js'></script>
<script type='text/javascript' src='/dwr/engine.js'></script>
<script type='text/javascript' src='/dwr/util.js'></script>
看到了吧,其实项目中是没有'/dwr/interface/.....js'路径及这个js的,他们都是dwr自动根据配置文件生成的,dwr自动生成engine.js和util.js(其实也不是生成,就是给你拷一份,这点不用纠结),不用解压的,所有class翻译的js,dwr都放入'/dwr/interface/'里面,你找不到的原因是因为你的路径写错了,后来你解压找到了就因为确实找到了,找到你解压的了,并不是dwr生成的。但你其他自写的class翻译的js路径还是不对的。注class翻译js的步骤是运行期做的工作,只要路径和名字写对了其他不用管。 以上是没有修改dwr基础配置文件的路径,如果改了就另当别论了!
解1.你的web.xml里应该有<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>resources/context/struts-context.xml,struts-default.xml,struts-plugin.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
倒数第二行是请求扩展名,懂了吧,一可以改成<url-pattern>/*.action</url-pattern>这样你的请求只有*.action的进入struts2的filter,其他都不进。同理你可以改servlet的请求扩展名,他也在这里大概是这样的<servlet-mapping>
<servlet-name> myServlet </servlet-name>
<url-pattern> *.do </url-pattern>
</servlet-mapping>
不过话说回来别两个同时用,看代码的人会骂人的。
解2+3:我们配置DWR时一般是这样的:
<script type='text/javascript' src='/dwr/interface/classonedwr.js'></script>
<script type='text/javascript' src='/dwr/interface/newsAdmindwr.js'></script>
<script type='text/javascript' src='/dwr/interface/channelAlldwr.js'></script>
<script type='text/javascript' src='/dwr/interface/voteAlldwr.js'></script>
<script type='text/javascript' src='/dwr/interface/tUserUserinfoJs.js'></script>
<script type='text/javascript' src='/dwr/interface/productViewdwr.js'></script>
<script type='text/javascript' src='/dwr/interface/tSystemLinkJs.js'></script>
<script type='text/javascript' src='/dwr/engine.js'></script>
<script type='text/javascript' src='/dwr/util.js'></script>
看到了吧,其实项目中是没有'/dwr/interface/.....js'路径及这个js的,他们都是dwr自动根据配置文件生成的,dwr自动生成engine.js和util.js(其实也不是生成,就是给你拷一份,这点不用纠结),不用解压的,所有class翻译的js,dwr都放入'/dwr/interface/'里面,你找不到的原因是因为你的路径写错了,后来你解压找到了就因为确实找到了,找到你解压的了,并不是dwr生成的。但你其他自写的class翻译的js路径还是不对的。注class翻译js的步骤是运行期做的工作,只要路径和名字写对了其他不用管。 以上是没有修改dwr基础配置文件的路径,如果改了就另当别论了!
追问
谢谢你!评价只有49个字的上限。想跟你交流,只好先追问下了。
关于dwr确实如你所说的那样,完全自动生成,不需再多处理。
不过dwr要自动生成上述的js文件是要通过servlet的。而在web.xml中我之前也尝试过和你描述类似的配置方法,但是并不能逃过struts2的过滤 。
后来在struts.xml里可以把servlet排除过滤,目前看来dwr运行没有问题,但是servlet好像并不好用。我研究研究,不成功的话,还得向你求教。多谢!
展开全部
dwr可能有多种搭建方式吧,我之前只用过一种,看看对你有没有帮助。
dwr其实不算是动态生成JS文件,都是需要在启动时把对应的JAVA类加载到容器中,并赋予xxxx.js的别名而已。因此需要一个dwr.xml文件,来指定需要加载的类,并描述出【Java类】和【Javascript别名】的对应关系。
看到你完全没提及这个文件,也许就是漏了这一块东西吧?
dwr其实不算是动态生成JS文件,都是需要在启动时把对应的JAVA类加载到容器中,并赋予xxxx.js的别名而已。因此需要一个dwr.xml文件,来指定需要加载的类,并描述出【Java类】和【Javascript别名】的对应关系。
看到你完全没提及这个文件,也许就是漏了这一块东西吧?
追问
谢谢。
我配置了dwr.xml文件,其中也制定了java类和javascript的别名。可是并不好用。
那么你的意思是要通过把预先写好的类的class文件变成js文件吗?
或者换个问法,要怎么处理这个class文件,除了放在class目录下还要放在/dwr/interface下吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询