servlet重定向详解(八)
本文实例为大家分享了servlet重定向的具体内容,供大家参考,具体内容如下
1.重定向是什么?
这里说的重定向是由http协议规定的一种机制。其工作流程如下所述。
(1)客户端发起http请求,访问服务器端组件。
(2)服务器端返回一个状态代码为302的响应结果。该代码的意思是让浏览器再访问另一个组件,响应结果中包含着访问新组件的url地址。新的访问组件可能在同一个应用中也可能不在同一个应用中。
(3)当浏览器接受到这种结果,会自动访问新的url.
(4)浏览器端接受新的url返回结果。
2.实现
重定向通过Servlet API 中HttpServletReponse接口提供的 sendRedirect(String location)方法完成。
3.重定向特点
3.1 servlet源组件的响应结果不会返回到客户端。
3.2 servlet源组件和目标组件不会共享同一个ServletRequest对象。
3.3 如果源组件在进行重定向前提前提交响应结果,会报异常。
3.4 重定向的地址不必是同一个服务器的应用。
4.案例
Check1Servlet 第一次请求的类
package com.learn;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* Created by Administrator on 2017/09/28.
*/
public class Check1Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String userName = req.getParameter("name");
String message = "";
if(userName == null){
message = "please input your name";
} else {
message = userName;
}
req.setAttribute("mess",message);
PrintWriter out = resp.getWriter();
out.print("before redirect ");
System.out.println("before redirect");
resp.sendRedirect("out1?mess="+message);
out.print("after redirect");
System.out.println("after redirect");
out.close();
}
}
Out1Servlet 重定向的类
package com.learn;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* Created by Administrator on 2017/09/28.
*/
public class Out1Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String mess = (String) req.getAttribute("mess");
System.out.println("请求范围内的数据:"+mess);
mess = req.getParameter("mess");
System.out.println("请求参数中的:"+mess);
PrintWriter out = resp.getWriter();
out.write(mess);
out.close();
}
}

控制台输出结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
SpringBoot使用TraceId进行日志链路追踪的实现步骤
有时候一个业务调用链场景,很长,调了各种各样的方法,看日志的时候,各个接口的日志穿插,确实让人头大,所以为了解决这个问题,本文给大家介绍了SpringBoot使用TraceId进行日志链路追踪的实现步骤,需要的朋友可以参考下2024-11-11
解决SpringMvc中普通类注入Service为null的问题
这篇文章主要介绍了解决SpringMvc中普通类注入Service为null的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07
利用ClasserLoader实现jar包加载并调用里面的方法
classloader即是类加载,虚拟机把描述类的数据从class字节码文件加载到内存,并对数据进行检验、转换解析和初始化,了解java的类加载机制,可以快速解决运行时的各种加载问题并快速定位其背后的本质原因,本文介绍了如何利用ClasserLoader来实现jar包加载并调用里面的方法2024-09-09


最新评论