gpt4 book ai didi

java - Servlet 不转发 - Servlet 异常

转载 作者:行者123 更新时间:2023-12-02 13:38:12 24 4
gpt4 key购买 nike

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

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

非常感谢您的帮助。

下面是我的 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>

下面是 anchor 标记:

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

注意,我还在 anchor 标记上尝试了以下操作:

<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.- 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";但是等等,你看到我的第一点了吗?您将再次调用 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

还有呜啦=)

[![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]: /image/9hhTO.png
[2]: /image/Hqha7.png
[3]: /image/uUvn4.png
[4]: /image/Tge2x.png

关于java - Servlet 不转发 - Servlet 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42882198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com