Servlet的转发和重定向

在实际的网站开发中,页面的跳转是最常见的。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()方法不会转发请求,只是简单的页面跳转。

  • 11
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值