我有一个start.jsp
,一个UserInfo.java
servlet和一个view.jsp
。start.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.jsp
、web.xml
和view.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>