[英]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.jsp
, web.xml
和view.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.