Servlets 升级tomcat时,HttpServletResponse.sendRedirect不工作

Servlets 升级tomcat时,HttpServletResponse.sendRedirect不工作,servlets,tomcat7,httprequest,httpserver,Servlets,Tomcat7,Httprequest,Httpserver,我正在开发一个java web应用程序,它部署在Tomcat上。我使用Servlet来处理一些功能,在Servlet中,我使用 SendRedirect方法,它已成功重定向到其他servlet 问题:之前我们使用Tomcat版本-7.0.65,但最近它已升级到7.0.67。 将tomcat升级到更新版本(7.0.67)后,发送重定向调用不起作用 例如: Public class MainServlet extends HttpServlet { protected void servic

我正在开发一个java web应用程序,它部署在Tomcat上。我使用Servlet来处理一些功能,在Servlet中,我使用 SendRedirect方法,它已成功重定向到其他servlet

问题:之前我们使用Tomcat版本-7.0.65,但最近它已升级到7.0.67。 将tomcat升级到更新版本(7.0.67)后,发送重定向调用不起作用

例如:

Public class MainServlet  extends HttpServlet {

  protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  // do some operations..
  String emptyStr = " "; 
  String urlPath = "http:localhost:8085/DemoProject/demoServlet? username=dummy&eid=emptyStr";
  response.sendRedirect(urlPath);
  return;  
    }

 }
我也看到了Tomcat规范,他们正在谈论重定向,这是我无法理解的

ApacheTomcat 7.0.67 发布日期:2015-12-10 完整的发行说明可以在这里找到。 56917:根据RFC7231(HTTP/1.1),允许HTTP/1.1和更高版本的重定向使用相对URI。这由上下文上的新属性useRelativeRedirects控制,默认为true。(马克) 58660:更正7.0.66中由于将上下文根重定向从映射器移动到默认Servlet的更改而导致的回归。(马克) 修复了部署应用程序时HostConfig中的潜在NPE。coverity扫描报告的问题。(violetagg) 58655:修复使用RemoteIpFilter调用HttpServletResponse.sendRedirect()时出现的非法状态异常。这是由于尝试使用56917的修复程序为重定向正确生成绝对URI造成的,重定向现在可能是相对的,这使得RemoteIpFilter的sendRedirect()实现更加简单。这也解决了从http重定向到https再从https重定向到http时,重定向可能没有按预期进行的问题。(马克)

请调查一下这个问题,如果你有任何建议,请告诉我


如果您有任何建议,我们将不胜感激。

我继承的一个应用程序在Tomcat 7.0.62中运行时遇到了同样的问题。我必须执行的升级路径是使用Tomcat8.x和Java8。在测试应用程序时,它也坏了

将范围缩小到为重定向生成的URL中存在空格(未编码且未使用+)。这在7.0.65之前的所有版本中都没有问题。一旦命中7.0.67,Tomcat就不再处理重定向URL中的空格(顺便说一句,这是一个绝对值)https://.... 路径(非相对)

sendRedirect的行为似乎受到7.0.67+中更改的直接影响。解决方案是对重定向URL进行正确的URL编码,以便在调用sendRedirect函数和要转到的位置之前对空格、特殊字符等进行编码


因为我最近也提到了这一点,所以我在这个主题上只花了2美分。

代码片段中有两个编译错误,URL语法错误。请不要粗心地发布有问题的代码,并从您的问题中消除这些繁文缛节。Hello@BalusC,请查看编辑过的问题。我的意图是指定一些不提供我正在工作的运行代码就足够了。