【问题标题】:Servlet not forwarding - Servlet exceptionServlet 不转发 - Servlet 异常
【发布时间】:2017-08-10 11:13:38
【问题描述】:

我的 servlet 没有正确转发。根据我的尝试,我不断被转发到 Tomcat-8.5 404 或 500 错误页面。当我收到 500 错误时,它只是说 servlet 抛出了异常。

我正在尝试检索锚标记的名称(在导航栏中),并根据名称将其转发到正确的 JSP。一旦我得到这个工作,我将使用这个 servlet 来检查现有会话或启动新会话。

非常感谢您的帮助。

下面是我的 servlet 映射:

<servlet>
    <servlet-name>SessionTracker</servlet-name>
    <servlet-class>SessionTracker</servlet-class>
</servlet>

<!-- Servlet Maps -->
<servlet-mapping>
    <servlet-name>SessionTracker</servlet-name>
    <url-pattern>/donate/*</url-pattern>
</servlet-mapping>

下面是锚标记:

&lt;li&gt;&lt;a href="/donate/donate.jsp" name="donate"&gt;Donate&lt;/a&gt;&lt;/li&gt;

注意,我也在锚标签上尝试了以下内容:

&lt;li&gt;&lt;a href="/donate/donate.jsp?name=donate" name="donate"&gt;Donate&lt;/a&lt;/li&gt;

下面是各自的Java函数:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ServletContext sc = getServletContext();
    String url = forwardRequest(request, response, sc);

    sc.getRequestDispatcher(url).forward(request, response);
}

private static String forwardRequest(HttpServletRequest request, HttpServletResponse response, ServletContext sc){
    String url = new String("");
    String name = request.getParameter("name");

    switch(name){ //switch state to determine which
        case "donate":
            url = "/donate/donate.jsp";
            break;

        case "mission":
            url = "/about/missionStatement.jsp";
            break;
    }

    return url;
}

【问题讨论】:

  • 那是什么异常?
  • 当我能够从日志中提取堆栈跟踪时,我得到了 NullPointerException,而另一次我得到了 StackOverflow。
  • 即使在我停止 Tomcat 后,日志仍然提供大量输出

标签: java html jsp servlets


【解决方案1】:

好的,让我们分析一下你的代码:

1.- dd (web.xml)

<servlet-class>SessionTracker</servlet-class>

尽量不要使用Default包,(虽然这里没有问题)

<url-pattern>/donate/*</url-pattern>

哦,男孩,这是一个问题,你对容器说,嘿,如果有人使用 url http://localhost:8080/mysite/donate/whateverIDon'tCare 调用 Servlet SessionTracker,所以我可以使用这个不同的路径,它会调用相同的 Servlet

/mysite/donate/some
/mysite/donate/hereWeGo
/mysite/donate/lol

这样不好,改成

<url-pattern>/donate/SesionTrackerServlet</url-pattern>

2.- 看看你的

<li><a href="/donate/donate.jsp?name=donate" name="donate">Donate</a</li>

你能看到失败吗?是的,正如我所说,当用户单击此处时,它将调用您的 Servlet,因此您的 servlet 将调用您的方法 forwardRequest,您认为会发生什么?是的,它将转发到 url = "/donate/donate.jsp";但是等等,你看到我的第 1 点了吗?您将再次调用 servlet 和方法,一次又一次地调用 booooom....Estado HTTP 500 - Servlet 执行引发异常,因为您创建了一个循环。

但正如我所说,将其更改为:

Web.xml

<servlet>
<servlet-name>SessionTracker</servlet-name>
<servlet-class>SessionTracker</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>SessionTracker</servlet-name>
<url-pattern>/donate/SessionTrackerServlet</url-pattern>
</servlet-mapping>

现在输入这个网址(当然如果你需要改变你的端口)

http://localhost:8080/Test/donate/SessionTrackerServlet?name=donate

还有 woooala =)

[![enter image description here][1]][1]
[![enter image description here][2]][2]
[![enter image description here][3]][3]
[![enter image description here][4]][4]


  [1]: https://i.stack.imgur.com/9hhTO.png
  [2]: https://i.stack.imgur.com/Hqha7.png
  [3]: https://i.stack.imgur.com/uUvn4.png
  [4]: https://i.stack.imgur.com/Tge2x.png

【讨论】:

  • 没问题 ;) 对不起图片,我不能把它发布好 :( 我正在学习
猜你喜欢
  • 1970-01-01
  • 2018-06-29
  • 2012-09-07
  • 2013-05-12
  • 2013-08-13
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 2014-10-04
相关资源
最近更新 更多