在实际的网站开发中,页面的跳转是最常见的。Servlet
中的页面跳转可以通过转发或者重定向来实现。
使用response
对象提供的sendRedirect()
方法,可以将网页重定向到另一个页面。SendRedirect()
方法的语法格式:response.sendRedirect(String path)
。参数path指的是目标的路径,这个路径可以是相对的,也可以是不同主机的其他URL地址。
接下来使用response.sendRedirect(String path)
来进行页面的重定向:
创建login.jsp,编写一个简单的登录表单
<form action="<%=basePath%>servlet/LoginServlet" method="post" id="form">
<table>
<tr>
<th>用户名:</th>
<td><input name="UserNuber" type="text" />
</td>
</tr>
<tr>
<th>密码:</th>
<td><input name="password" type="password" />
</td>
</tr>
<tr>
<th></th>
<td>
<button type="button" id="login">登录</button>
</td>
</tr>
<tr>
<th></th>
<td>
<a href="jsp/register.jsp">没有账号?去注册--></a>
</td>
</tr>
</table>
</form>
<script type="text/javascript">
$("#login").click(function() {
var name = $("#form input[name='UserNuber']").val();
var password = $("#form input[name='password']").val();
//以下是判断表单数据完整性的js代码,此处略.....
接下来在LoginServlet中接收参数
public void doPost(HttpServletRequest request, HttpServletResponse response) {
response.setCharacterEncoding("utf-8");
String UserNuber = request.getParameter("UserNuber");//接收页面参数
String password = request.getParameter("password");
try {
UserVo userVo = userImpl.selectUserByUser(UserNuber);
if (userVo.getUserNuber() != null) {
//判断用户名和密码
if (password.equals(userVo.getPassword())) {
//验证成功,页面重定向到index.jsp
response.sendRedirect("/myDemo2/jsp/index.jsp");
} else {
response.getWriter().write("密码错误!请注意大小写!");
}
} else {
response.getWriter().write("该用户不存在!");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
返回浏览器可以看到页面已经跳转到了index.jsp页面
注意看页面的URL,在登录界面的时候的URL是http://127.0.0.1:8080/myDemo2/login.jsp
而登录成功后的index.jsp页面的URL是http://127.0.0.1:8080/myDemo2/jsp/index.jsp
这里就可以知道重定向和转发的不同点之一,我们可以看一下转发的效果:
if (password.equals(userVo.getPassword())) {
//可以将要发送的值写入request中
request.setAttribute("UserNuber", UserNuber);
//指定转发地址,然后将request和response发送过去
request.getRequestDispatcher("/jsp/index.jsp").forward(request, response);
} else {
response.getWriter().write("密码错误!请注意大小写!");
}
在index.jsp中接收request:
<h3><%=request.getAttribute("UserNuber", UserNuber)%></h3>
<p>欢迎来到主页面!</p>
可以看到页面接收到了从LoginServlet发送过来的UserNuber,下面我们在看看页面的URL
http://127.0.0.1:8080/myDemo2/servlet/LoginServlet
竟然是LoginServlet的URL。
也就是说,从login.jsp请求到LoginServlet,再从LoginServlet重定向到index.jsp的时候,URL是会随之改变的,而转发跳转页面却还是LoginServlet的URL。
在Servlet中实现页面转发,使用的是RequestDispatcher对象的forward()方法,而重定向主要应用的是HttpServletResponse对象的sendRedirect()方法,该方法与forward()有着本质的区别。使用forward()方法时,会将当前的请求转发到其他Web组件,如Servlet、jsp、HTML。被请求的页面可以通过request内置对象来得到该请求。而sendRedirect()方法不会转发请求,只是简单的页面跳转。