Java servlets:RequestDispatcher 不起作用不会重定向路径



我有一个start.jsp,一个UserInfo.javaservlet和一个view.jspstart.jsp有一个表单,该表单接受用户名输入,将其发送到servlet,而servlet又将其发送到view.jsp。但是,当我按下表单上的提交按钮时,不会发生重定向。我怀疑我在这里的路径有问题,但无法弄清楚出了什么问题。这是我的目录树:

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

用户信息.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);
}
}

网站.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>

开始.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>

查看.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(如本例所示,要提交带有输入的表格,应点击提交按钮。表单被发送到由表单的 ACTION 属性指定的 servlet(服务器端程序(。以下两个是相似的;一个有身体,另一个没有。

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


(2(表格:

要提交的所有输入(与表单相关(都将在该表单中定义 - 包括用户名文本输入提交按钮。更正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:

用户信息.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没有其他变化。部署的 Web 应用程序是使用 URL 调用的(在本例中部署在 Apache Tomcat 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>

相关内容

  • 没有找到相关文章

最新更新