首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Servlet未转发- Servlet异常

Servlet未转发- Servlet异常
EN

Stack Overflow用户
提问于 2017-03-19 10:17:01
回答 1查看 307关注 0票数 0

我的servlet没有正确转发。我不断地被转发到Tomcat-8.5、404或500错误页面,这取决于我尝试了什么。当我收到500错误时,它只是说servlet抛出了一个异常。

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

非常感谢你的帮助。

下面是我的servlet映射:

代码语言:javascript
复制
<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函数:

代码语言:javascript
复制
@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;
}
EN

回答 1

Stack Overflow用户

发布于 2017-03-19 12:54:03

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

1.- dd (web.xml)

代码语言:javascript
复制
<servlet-class>SessionTracker</servlet-class>

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

代码语言:javascript
复制
<url-pattern>/donate/*</url-pattern>

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

代码语言:javascript
复制
/mysite/donate/some
/mysite/donate/hereWeGo
/mysite/donate/lol

所以这并不好,请尝试将其更改为

代码语言:javascript
复制
<url-pattern>/donate/SesionTrackerServlet</url-pattern>

2.-看看你的

代码语言:javascript
复制
<li><a href="/donate/donate.jsp?name=donate" name="donate">Donate</a</li>

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

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

Web.xml

代码语言:javascript
复制
<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>

现在输入这个url (当然,如果需要,可以更改您的端口)

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

和woooala =)

代码语言:javascript
复制
[![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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42882198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档