关于servlet中的请求转发与重定向的区别
来源:互联网 发布:电子版通讯录制作软件 编辑:程序博客网 时间:2024/05/22 08:19
/*关于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>再看处理请求的servletpackage 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但是当打开重定向,关闭转发,你这程序会崩溃转发界面找不到属性。*/
阅读全文