WEB项目-使用重定向完成登录功能(转发和重定向的区别)

使用重定向

使用状态码302和location头完成重定向

代码:

@WebServlet("/demo3")
public class ServletDemo3 extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//向班长借钱
		System.out.println("去找富班长");
		//返回没钱
		response.setStatus(302);
		//找富班长 重定向地址:客户端的绝对路径(包含项目名称)
		response.setHeader("location", "/Servlet/demo4");
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
@WebServlet("/demo4")
public class ServletDemo4 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//找到富班长
		System.out.println("富班长:借钱");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

特点:访问的是demo3,但是最终地址栏变成了demo4。所以这是一次重定向是两次请求和两次响应。

使用重定向完成登陆页面

需求:判断登录的html页面的用户名和密码是否都是admin,如果是,登录成功,如果不是,登陆失败(重定向到登录页面)

/**
 * 处理登陆功能(重定向)
 * @author 58351
 *
 */
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//先从客户端接收用户床过来的数据
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		//判断用户名和密码是否都是admin
		//如果都是admin,登录成功 否则登录失败,重定向到登录页面
		if("admin".equals(username)&&"admin".equals(password)){
			//登录成功
			response.setStatus(302);
			response.setHeader("location", "/Servlet/html/success.html");
		}
		else{
			//登录失败
			//重定向
			response.setStatus(302);
			response.setHeader("location", "/Servlet/html/login.html");
		}
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

response对象提供了一个方法直接完成重定向功能:sendRedirect(String location);

使用转发

使用转发从一个Servlet转发到另一个Servlet

RequestServlet1

package com.request;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class RequsetDemo1
 */
@WebServlet("/request1")
public class RequsetDemo1 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//访问request1,转发到request2
		
		//获取RequestDispatcher对象
		RequestDispatcher dispatcher = request.getRequestDispatcher("/request2");
		//使用forward方法转发
		dispatcher.forward(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

RequestDemo2

package com.request;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class RequestDemo2
 */
@WebServlet("/request2")
public class RequestDemo2 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//向页面输出内容
		response.setContentType("text/html;charset=utf-8");
		response.getWriter().write("转发成功");
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

重定向和转发的区别

1、重定向时地址栏会发生变化,转发的地址栏不会发生变化

2、重定向是两次请求和两次响应,转发是一次请求和一次响应

3、重定向不能使用request域传递值,转发可以,因为一次请求会创建一个新的request对象,而重定向中有两次请求,会生成新的request对象

4、重定向的路径中有项目名(/Servlet/request2),转发的路径中没有项目名(/request)

5、重定向可以定向到任何页面(网络上的资源),转发只能在Web应用内部

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值