/*关于servlet中的请求转发与重定向
请求转发是在一个Servlet需要请求其他servlet时,会将请求转发给其他的Servlet去处理
在Servlet中使用request.getRequestDispatcher(url)来处理的
所以就理解定义而言,是将请求转发,,将请求,在这里我们需要注意
所以他是在一个请求中的,当我们使用request.setAttribute();
在转发的servlet是可以通过request.getAttribute()来拿到的
但是如果使用重定向,就是通过对客户端进行相应,要求客户端重新定向新的地址
这是会生成新的request对象。http是没有记忆能力的,不会记得上一个请求有属性,如果再上一个界面
setAttribute(),你以为你会在下个界面通过request.getAttribute(),会发现什么也没有。
写个例子
先来客户端*/
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/test1/TestResponse?user=admin&password=123456">点击</a>
</body>
</html>
再看处理请求的servlet
package com.test1;
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 TestResponse
*/
@WebServlet("/TestResponse")
public class TestResponse extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public TestResponse() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String userString=request.getParameter("user");
String passwordString=request.getParameter("password");
System.out.println("转发前"+userString);
System.out.println("转发前"+passwordString);
request.setAttribute("user",userString);
request.setAttribute("password",passwordString);
//response.sendRedirect("/test1/Redirect");
request.getRequestDispatcher("/Redirect").forward(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
/*
注意一下文章的注释部分,转发可以使用相对路径,不需要使用环境路径,因为就在服务器里面进行的
重定向就要写环境路径了,是对客户端进行相应,要求客户端进行重定向
接下来是转发或重定向的servlet
*/
package com.test1;
import java.io.IOException;
import java.io.OutputStream;
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 Redirect
*/
@WebServlet("/Redirect")
public class Redirect extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Redirect() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String userString=(String) request.getAttribute("user");
String passwordString=(String) request.getAttribute("password");
System.out.println(userString);
System.out.println(passwordString);
response.setCharacterEncoding("utf-8");
OutputStream outputStream=response.getOutputStream();
outputStream.write(userString.getBytes());
outputStream.write(passwordString.getBytes());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
/*
测试结果是会在浏览器输出admin和123456
但是当打开重定向,关闭转发,你这程序会崩溃
转发界面找不到属性。
*/
关于servlet中的请求转发与重定向的区别
猜你喜欢
转载自blog.csdn.net/qq_37657081/article/details/78891098
今日推荐
周排行