簡體   English   中英

Java Servlet:RequestDispatcher無法正常工作不會重定向路徑

[英]Java servlets: RequestDispatcher doesn't work doesn't redirect paths

我有一個start.jsp ,一個UserInfo.java servlet和一個view.jsp start.jsp具有接受用戶名輸入的形式,然后將其發送到servlet,然后將其發送到view.jsp 但是,當我按下表單上的“提交”按鈕時,沒有重定向發生。 我懷疑這里的路徑有問題,但無法找出問題所在。 這是我的目錄樹:

AppName
  pages
    projects
      ProjectName
        start.jsp
        view.jsp
  src
    com
      web
        UserInfo.java
  WEB-INF
    classes
      com
        UserInfo.class
    web.xml

UserInfo.java

public class UserInfo extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        response.getWriter().println("GET");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        String userName = request.getParameter("username");

        RequestDispatcher view= request.getRequestDispatcher("/projects/ProjectName/view.jsp");
        view.forward(request, response);

    }

}

web.xml

<servlet-mapping>
    <servlet-name>UserInfo</servlet-name>
    <url-pattern>/User.do</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>UserInfo</servlet-name>
    <servlet-class>com.web.UserInfo</servlet-class>
</servlet>

start.jsp

<form method="POST" action="User.do">
    <div class="form-group">
        <label for="usr">username:</label><br/><br/>
        <input type="text" class="form-control"name="username"><br/><br/>

    </div>
</form>

<button type="button" class="btn btn-primary"  type="submit">
   Get info
</button>

view.jsp

<h3>Hello,
   <%
      out.println(request.getParameter("username"));
   %>
</h3>

以下是有關已發布示例的幾點注意事項:


(1)按鈕:

(a)這些定義了一個可單擊的按鈕-通常與JavaScript一起使用以激活腳本。 以下兩個是相似的; 一個擁有身體,另一個沒有。

<INPUT TYPE="BUTTON" VALUE="Get Info">

<BUTTON TYPE="BUTTON">
    Get Info
</BUTTON>

(b)如本例所示,要提交帶有其輸入內容的表單,請單擊“提交”按鈕。 將該表單發送到FORM的ACTION屬性指定的Servlet(服務器端程序)。 以下兩個是相似的; 一個擁有身體,另一個沒有。

<INPUT TYPE="SUBMIT" VALUE="Get Info">

<BUTTON TYPE="SUBMIT">
    Get Info
</BUTTON>


(2)表格:

所有要提交的輸入(與表單相關)都將在該表單中定義-包括用戶名文本輸入Submit按鈕 更正后的start.jsp標記:

<form method="POST" action="User.do">
    <div>
        <label>username:</label><br/><br/>
        <input type="text" name="username"><br/><br/>
    </div>
    <button type="submit">
        Get info
    </button>
</form>


(3)Servlet:

UserInfo.java

public class UserInfo extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        response.getWriter().println("GET");
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        String userName = request.getParameter("username");
        getServletContext().log("# User name: " + userName);
        RequestDispatcher view = request.getRequestDispatcher("view.jsp");
        view.forward(request, response);
    }
}


(4)我對目錄樹的結構稍有不同(為方便起見):

servlet-1
    start.jsp
    view.jsp
src
    com
        web
            UserInfo.java
WEB-INF
    classes
        com
            web 
                UserInfo.class
     web.xml

start.jspweb.xmlview.jsp沒有其他更改。 已使用以下URL(在本例中為部署在Apache Tomcat Web服務器上)調用了已部署的Web應用程序: http://localhost:8080/servlet-1/start.jsp

這將在瀏覽器中顯示start.jsp 輸入文本“用戶名”,然后單擊“獲取信息”按鈕。 結果將顯示在view.jsp (我想這是預期的結果)。

最后,如前所述, RequestDispatcher用於轉發到另一個資源或包括來自另一個資源的內容-它不是重定向。 注意:可以從ServletContext或從ServletRequest獲取請求分配器。 請注意獲得調度程序的兩種方法之間的區別。

好吧,你不說會發生什么。

forward工作嗎? 即是否出現新頁面? 因為forward不是重定向。

重定向將明確的響應發送到瀏覽器,然后加載新頁面,這在瀏覽器中URL發生更改的事實中尤為明顯。

但是forward並不能做到這一點。 而是,它僅更改當前發送的請求的輸出頁面。 因此,您並沒有真正詳細地說明這里正在發生(或未發生)什么。

但是從表面上看您的問題,您不會得到重定向,因為forward根本不會重定向。

將按鈕保留在表格中。

<form method="POST" action="User.do">
    <div>
        <label>username:</label><br/><br/>
        <input type="text" name="username"><br/><br/>
    </div>
    <button type="submit">
        Get info
    </button>
</form>

暫無
暫無

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

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