Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在WebLogic 11g上将请求发送到JspServlet的无止境循环_Jsp_Servlets_Weblogic - Fatal编程技术网

在WebLogic 11g上将请求发送到JspServlet的无止境循环

在WebLogic 11g上将请求发送到JspServlet的无止境循环,jsp,servlets,weblogic,Jsp,Servlets,Weblogic,我有以下配置: ServletA(在我的例子中是apachecxfserlet,但这并不重要),它匹配所有请求-/*。 ServletB,它将调度到一个命名的servlet——“jsp”(如果可用)或“JspServlet”(否则) ServletA配置为将所有JSP请求转发给ServletB。这是完美的工作 另一方面,如果应用程序在Tomcat上运行,ServletB正向“org.apache.jasper.servlet.JSPServlet”或“weblogic.servlet.JSPSe

我有以下配置:

ServletA(在我的例子中是apachecxfserlet,但这并不重要),它匹配所有请求-/*。 ServletB,它将调度到一个命名的servlet——“jsp”(如果可用)或“JspServlet”(否则)

ServletA配置为将所有JSP请求转发给ServletB。这是完美的工作

另一方面,如果应用程序在Tomcat上运行,ServletB正向“org.apache.jasper.servlet.JSPServlet”或“weblogic.servlet.JSPServlet”,如果我在使用Oracle weblogic

Tomcat上的一切工作都很完美

在Weblogic上,我有以下问题: ServletA正在转发到ServletB它将转发到
weblogic.servlet.JSPServlet
。JSPServlet应该为JSP服务,但它没有。相反,我进入了一个无休止的循环(ServletA->ServletB->JSPServlet->ServletA->……

有没有人知道
weblogic.servlet.JSPServlet
内部发生了什么,有没有人知道如何让weblogic为我的JSP服务?欢迎提出所有意见和建议。。。我已经在这个问题上花了太多时间,但没有成功

注:

  • 在Weblogic 10.3.5上测试
  • 如果ServletB转发到虚拟servlet,则不会发生循环
  • 转发通过使用RequestDispatcher完成,通过调用Tomcat的getNamedDispatcher(“jsp”)或WebLogic的getNamedDispatcher(“JspServlet”)检索

我认为这是Weblogic在URL映射方面严格执行的新Servlet 2.5规范

  • 仅包含
    /
    (正斜杠)字符的servlet路径字符串表示应用程序的默认servlet。servlet路径解析为请求URI减去上下文路径;在这种情况下,路径解析为null
  • *
    (星号)开头的字符串指定扩展映射
这些更改引入了以下HttpServletRequest方法的行为更改:

  • getPathInfo
  • getServletPath
<>为了更好地说明行为的变化,请考虑将请求“<代码> /ABC/DEF.html < /C> >解析为Servela:

  • 如果
    /
    映射到ServletA,则
    servletPath=“abc/def.html”
    pathInfo=null
  • 如果
    /*
    映射到ServletA,则
    servletPath=”“
    pathInfo=“abc/def.html”

为确保返回的路径信息非空,请将所有出现的
/
(正斜杠)servlet映射字符串替换为
/*

,无论何时将CXF servlet与JSP Web应用程序捆绑在一起,都不应将其映射到
/*
。要么它必须被映射到一个更具体的URL模式,要么它必须在一场单独的战争中部署。我有很多理由将CXF映射到/*并且完全不选择单独的战争。事实上,没有JSP我也可以生活,但他们会让我的生活轻松很多。我已经做到了。实际上,最初我使用“/*”映射,由于我非常绝望,我尝试了“/”映射,获得了上述结果。无论如何,谢谢你的回答!