- 论坛徽章:
- 0
|
TOMCAT不符合J2EE标准!! 大家尽量别用。
原帖由 "lamei" 发表:
到底哪种是正确的呢????
news.do 还是 index.jsp 形式。
下载了你给的例子看了一下,终于明白你的意思了。你的意思是说,在 .jsp 里调用 request.getRequestURL(),在 tomcat 里返回的是 *.do,在 WL/WS 里返回的是 *.jsp,而你不知道哪个正确。
这里有一点要注意的是,不管是 tomcat 还是 WL/WS,在地址栏内的地址都是 *.do 的形式,而不是 *.jsp 的形式。
你的截图里地址栏里面的 /test/processSimple.do,在你的 struts-config.xml 有下面的定义:
- <action path="/processSimple"
- type="examples.simple.ProcessSimpleAction"
- name="simpleForm"
- scope="request"
- input="/jsp/simple/Simple.jsp"
- validate="true">;
- <forward name="success" path="/jsp/simple/SimpleResults.jsp"/>;
- </action>;
复制代码
从这个 mapping 可以看出,processSimple.do 应该做一个 forward 到 /jsp/simple/SimpleResults.jsp (因为 action 里面没有 redirect 属性,所以 redirect 属性默认为 false)。在 SimpleResults.jsp 里面,你做了一个 <%=request.getRequestURL()%>;,来显示 RequestURL。这里到底应该是原始的 RequestURL (*.do) 还是当前的 jsp 页面的 URL (*.jsp) 呢?看看标准是怎么说的吧。下面一段引自 Java" Servlet Specification
Version 2.4,SRV.15.1.3 (P. 242-243):
- public java.lang.StringBuffer getRequestURL()
- Reconstructs the URL the client used to make the request. The returned URL
- contains a protocol, server name, port number, and server path, but it does not
- include query string parameters.
复制代码
意思是说,重建客户端用来发出 request 的 URL。在你的例子里,用户端发出的 request URL 是 *.do 的形式,所以 tomcat 的做法是符合标准的,而 WL/WS 则不符合,因为它们用的是 forward 之后的 URL,而不是客户端发出的 URL。至于它们为什么不符合标准,但还是得到了 certification,我想是他们付了巨额的 certification fee 给 Sun 的缘故吧。
Tomcat 对标准的符合是出了名的,比如说,用 container managed security 的时候,cookie 的名称一定是 JSESSIONID。有许多人在 mailing list 里面问能不能改变,答案是否定的,因为这个是标准里规定的,除非你自己改 tomcat 的代码。 |
|