Servlet不转发 - Servlet异常

时间:2017-03-19 02:17:01

标签: java html jsp servlets

我的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>

以下是锚标记:

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

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

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

以下是各自的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;
}

1 个答案:

答案 0 :(得分:1)

好的让我们分析你的代码:

1.- dd(web.xml)

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

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

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

哦,男孩,这是一个问题,你对Container说,嘿,如果有人使用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”;但是等等,你看到了我的观点吗?你将再次调用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