簡體   English   中英

Servlet無法轉發-Servlet異常

[英]Servlet not forwarding - Servlet exception

我的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.- dd(web.xml)

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

盡量不要使用默認程序包,(盡管這里沒有問題)

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

現在輸入此URL(當然,如果需要,請更改端口)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM