我有一个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
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>
答案 0 :(得分:2)
关于发布的示例,有几点需要注意:
(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)表单:
所有要提交的输入(与表单相关)都将在该表单中定义-包括用户名文本输入和提交按钮。 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调用了已部署的Web应用程序(在本例中为部署在Apache Tomcat Web服务器上):http://localhost:8080/servlet-1/start.jsp
。
这将在浏览器中显示start.jsp
。输入文本“用户名”,然后单击“获取信息”按钮。结果将显示在view.jsp
中(我想这是预期的结果)。
最后,如前所述,RequestDispatcher用于转发到另一个资源或 include 来自另一个资源的内容-它不是重定向。注意:可以从ServletContext或ServletRequest获取请求分派器。请注意获得调度程序的两种方法之间的区别。
答案 1 :(得分:1)
好吧,你不说会怎样。
PIL
是否有效?即是否出现新页面?因为imgOut = Image.open('sample-out.jpg')
new_img = imgOut.resize((640,384), Image.ANTIALIAS)
new_img.save("small-out.jpg", "JPEG", optimize=True)
不是重定向。
重定向将明确的响应发送到浏览器,然后加载新页面,并且在浏览器中URL发生更改的情况下最明显。
但是forward
不能这样做。而是,它仅更改当前发送的请求的输出页面。因此,您并没有真正详细地说明此处正在发生(或未发生)的情况。
但是,从表面上看,您的问题不会得到重定向,因为forward
根本不会重定向。
答案 2 :(得分:1)
将按钮保留在表单内。
<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>