Webapp的Tomcat 7尾部斜杠问题


13

最近,我将tomcat服务器从6.x版本升级到了最新的7.x版本。

我遇到了小麻烦,希望得到帮助。

我有一个名为MyApp的应用程序

在tomcat6上,当我转到http://www.example.com/MyApp/page/时 ,通常会得到想要的结果。

现在,在tomcat7上,访问相同的确切URL(带有斜杠),我得到一个错误:“资源不可用”,因为tomcat认为/ MyApp / page /是一个完整的Web应用程序名称,而不是请求名称MyApp Webapp下的页面。

我需要在网址的末尾加上斜杠,因为否则我会收到错误:“ HTTP状态405-请求方法'GET'不支持”,这是可以的,因为我确实不允许GET方法用于“页面”请求。

如果有人知道如何告诉tomcat在现有Web应用程序路径之后的斜杠不应假定将其重定向到新的Web应用程序会调用整个“字符串”,并且像在tomcat6上那样处理请求,那就太好了!


web.xml映射到中的默认Servlet /*吗?否则,tomcat使用欢迎文件列表。通常,只有第一个路径段才作为上下文根进行解释。因此,找不到您的webapp似乎不是问题。
法力值2012年

第一个路径段是上下文根并且可以正常工作,可以找到它,但是以下路径而不是第一个路径的一部分,tomcat会搜索所有路径的webapp。。是非默认值

我真的不明白你在说什么。抱歉。如果您的MyAppWeb应用程序配置了名称,则tomcat将使用剩余路径使用此Web应用程序上下文page/。如果没有,它将ROOT使用完整路径查找上下文。
法力值2012年

我有一个名为MyApp的webapp,example.com / MyApp 正常运行,但是当访问example.com/MyApp/foo而不是在MyApp中查找foo内容时,它会搜索一个名为“ MyApp / foo /”的webapp,而不是寻找MyApp下的内容称为foo ..

Answers:


1

古老的问题,但是由于我最近与Tomcat 8中的终止斜线作斗争,所以我知道斜线的问题继续困扰着Tomcat用户世界。:-)

您可能会遇到的是Tomcat在加载根上下文时处理重定向的方式发生变化。请查看错误58660,并在那里阅读一些开发人员讨论。您可能需要通过修改mapperContextRootRedirectEnabledContext元素的属性来关闭默认映射器conf/context.xml


0

检查您的欢迎文件列表..接下来是猜测...

我认为问题的实质是当Tomcat带有/时-它有几个选项-遍历欢迎文件列表-没有任何内容时-显示目录列表(如果启用)

好玩的地方就从这里开始。很多人都想将* .do用于struts。因此,他们希望index.do成为主页。或者也很常见的是index.jsp,其中* .jsp映射到JspServlet。

这是事情变得有趣的地方。因此,可以说您的欢迎文件是index.jsp,index.do。

Tomcat(IIRC)的工作是首先遍历欢迎文件列表以查找该名称的资源。

然后它将进行第二遍查找匹配的映射。因此,如果在欢迎列表中指定了index.jsp并映射了* .jsp。然后,tomcat将尝试转发到index.jsp,您将得到一个404。

因此,我猜您有一个servlet映射和欢迎文件重叠。而且该Servlet的行为不支持GET。(因此405)


0

如果您的项目使用的是v2.2的动态Web模块,则需要显式创建WebContent中web.xml(例如:index.html)中存在的至少一个文件(可以是空html文件)。


1
这是评论;没有答案;当您获得更多积分时,请考虑在将来发表评论。谢谢
HrvojeŠpoljar2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.