Servlet技术:请求转发与重定向

请求转发

在java后台servlet中,请求转发和重定向可以实现由一个servlet跳转到另一个servlet/前端页面。

请求转发

Servlet将客户端请求直接将请求交给另一个Servlet或某个页面。

req.getRequestDispatcher(“新的请求路径”).forward(req,resp);

重定向:

重定向

Servlet设置客户端重新发送一个新请求到另一个Servlet或某个页面。

resp.sendRedirect(“新的请求路径”);

例:

继续利用https://www.tinstu.com//478.html

前端 login.html 中的 action 链接 Servler3_a.java

有Servlet3_a 转发到 Servlet3_b

Servlet3_a

package cn.xtnotes.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.xtnotes.pojo.User;
import cn.xtnotes.service.UserService;

public class Servlet3_a extends HttpServlet {
	UserService us=new UserService();
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("gbk"); //设置请求数据编码
		response.setCharacterEncoding("gbk");//设置响应数据编码
		String uname=request.getParameter("uname");
		String upwd=request.getParameter("upwd");
		PrintWriter pw=response.getWriter();
		if("123".equals(uname) && "123".equals(upwd)) {
			pw.print("登录成功");
		}else {
                       //请求转发到 Servlet3_b
			request.getRequestDispatcher("/Servlet3_b").forward(request, response);
                       //重定向到 Servlet3_b
                        response.sendRedirect("http://127.0.0.1:8080/U8/Servlet3_b");
		}
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		doGet(request, response);
	}
}

Servlet3_b.java

package cn.xtnotes.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.xtnotes.pojo.User;
import cn.xtnotes.service.UserService;

public class Servlet3_b extends HttpServlet {
	UserService us=new UserService();
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("gbk"); //设置请求数据编码
		response.setCharacterEncoding("gbk");//设置响应数据编码
		String uname=request.getParameter("uname");
		String upwd=request.getParameter("upwd");
		PrintWriter pw=response.getWriter();
                   
		pw.print("您属于的用户名和密码:"+uname+upwd);
		pw.print("用户名和密码为错误(_b)");
	
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		doGet(request, response);
	}
}

请求转发截图:

请求转发

重定向运行截图:

301

(路径,和是否获取  参数存在差异)

请求转发和重定向的区别:

请求转发是一次请求,重定向是两次请求;

请求转发可以共享请求参数 ,重定向之后,就获取不了共享参数了;

阅读剩余
THE END