服务器是apache+tomcat
项目是webwork+spring做的
需求是要求地址大小写都可以访问。
现在的地址是/news/newsDetail.do?newsId=50
要求/news/newsdetail.do?newsid=50也能访问
我做了个filter,将链接地址都转成了小写。
可是这样的话,webwork就找不到小写的action
(以前的格式是/news/newsDetail.do) 那么namespace是/news,action的name是newsDetail
转成小写后的地址是/news/newsdetail.do,那么namespace是/news,action的name是newsdetail
所以找不到对应的action
There is no Action mapped for namespace / and action name searchdata.
请问该怎么做?一个很傻的办法是,将webwork里的action的id都写成小写
项目是webwork+spring做的
需求是要求地址大小写都可以访问。
现在的地址是/news/newsDetail.do?newsId=50
要求/news/newsdetail.do?newsid=50也能访问
我做了个filter,将链接地址都转成了小写。
可是这样的话,webwork就找不到小写的action
(以前的格式是/news/newsDetail.do) 那么namespace是/news,action的name是newsDetail
转成小写后的地址是/news/newsdetail.do,那么namespace是/news,action的name是newsdetail
所以找不到对应的action
There is no Action mapped for namespace / and action name searchdata.
请问该怎么做?一个很傻的办法是,将webwork里的action的id都写成小写
而且另外一个问题出来了。
即使将webwork里的action的id都写成小写,webwork找到了对应的action,(当然只是个假设,应为不只是更改一个action配置,是个已运营项目,旧的action有几百个了,每个action都加一个小写的映射,没有从根本上解决问题),参数传递又会出问题。
newsDetail.do?newsId=50 的链接,webwork会自动将50设置到newsId上,
而newsdetail.do?newsid=50,webwork没法自动设置了,因为java是区分大小写的(newsId和newsid是不同的)希望各位有类似经验的,给指点下。
这样action找不到的问题是解决了。
可是参数的传递还是有问题。
参数是按照bean的标准写的,所以webwork才能将其数值准确的填充到bean中。
参数也用了小写后,数据就填充不进去了。楼上的方法,处理一个action还行,关键是现在的action很多,根本处理不过来。
set和get都是eclipse根据标准的bean自动生成的。
每个set和get都自己写小写的话,根本不现实。
假设action的id为testWeb
如果用户输入的是testWeb,原有的映射关系可以找到相应的action
如果用户输入的是testweb,则将id都转换成小写的在进行匹配
总而言之,在DefaultActionMapper类里做两次匹配查找,一次是和id比较,另外一次是把id转换成小写的再进行比较。
能不能,利用action的插件机制,为扩充点,在action-config.xml提交name路径到ActionProcess的时候
把name属性转成小写呢
肯定是可以的,虽然现在我还没找到那个需要重写的方法。可是参数呢,参数也有大小写的,这个就比较复杂了。
入口要【大小写都可以访问】
出口是【大小写不同的】webwork
到你们的服务器的 LOG 内找出各种路径。(newsDetail,newsId,...)
在你的 filter 内,做比较,有的话就转成上面合适的 ACTION/ID。
现在我的解决方案是,只把主要的几个地址做了大小写转换,而不是所有的路径。
实现方法是:
1.给需要做大小写不敏感的action都写一个小写的别名(newsDetail和newsdetail指向同一个Action,利用webwork的别名)
2.对于象newsId这样的参数,在model里写一个setNewsid()方法,将newsid的值传给newsId以上策略只能针对已知的action和已知的参数,基本可以解决一些问题。