转发与重定向的区别

前言:之前写了几篇JSP的博客,现在又回过头来看Servlet,温故而知新,再回顾回顾,总会有收获的。以前学习Servlet感觉内容很多,现在看的时候,其实也没多少东西,只需知道Servlet的生命周期,Servlet的实现方式,ServletContext作用域,接收和响应,转发和重定向,我觉得差不多够用了。当然,要是细究的话也不止这些,我针对的是新手。

转发与重定向简介

转发和重定向都是实现页面跳转,也就是说,当我们访问一个Servlet 的时候,Servlet帮我们跳转到另一个界面。

转发与重定向的区别

实现转发调用的是HttpServletRequest对象中的方法

实现重定向调用的是HttpServletResponse对象中的方法

转发时浏览器中的url地址不会发生改变

重定向时浏览器中的url地址会发生改变

转发时浏览器只请求一次服务器

重定向时浏览器请求两次服务器

转发能使用request带数据到跳转的页面

重定向能使用ServletContext带数据到跳转的页面

代码演示转发和重定向

package servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/login")
public class ServletDemo extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取表单提交过来的数据//getParameter()方法可以获取请求的参数信息String name = req.getParameter("name");String password = req.getParameter("password");//打印获取到的参数信息System.out.println("name:"+name);System.out.println("password:"+password);//如果name=admin,password=123,则跳转到succee.jsp,否则跳转到fail.jspif("admin".equals(name)&&"123".equals(password)){//通过转发实现跳转req.getRequestDispatcher("/success.jsp").forward(req,resp);}else {//通过重定向实现跳转resp.sendRedirect("/fail.jsp");}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

  

JSP代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>登录</title></head><body><form action="/login"><table align="center"><tr><td>账号:</td><td><input type="text" name="name"></td></tr><tr><td>密码:</td><td><input type="text" name="password"></td></tr><tr><td><input type="submit" value="登录"></td><td><input type="reset" value="重置"></td></tr></table></form></body></html>

  

转发和重定向如何带数据到某个页面

package servlet;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/login")public class ServletDemo extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//通过转发带数据req.setAttribute("name","张三");req.getRequestDispatcher("/send.jsp").forward(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}}

  

send.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>转发和重定向传代数据练习</title></head><body><%//1、接收转发传代的数据String name =  (String) request.getAttribute("name");out.println("转发传代的数据:"+name);%></body></html>

  

package servlet;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/login")public class ServletDemo extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//通过重定向带数据ServletContext servletContext = this.getServletContext();servletContext.setAttribute("name","王二麻子");resp.sendRedirect("/send2.jsp");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}}

  

send2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>转发和重定向传代数据练习</title></head><body><%//1、接收重定向传代的数据String name1 = (String)application.getAttribute("name");out.println("重定向传代的数据:"+name1);%></body></html>

  

练习

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><form action="CountServlet" method="post"><h3>加法计算器</h3>加数1:<input type="number" name="one">加数2:<input type="number" name="two"><input type="submit" value="计算"></form></body></html>

  

count.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body>计算结果:<%=request.getAttribute("count")%><!--计算结果:<%=application.getAttribute("count")%>--></body></html>

  

Servlet

package servlet;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/CountServlet")
public class CountServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String one=request.getParameter("one");int o=Integer.parseInt(one);//强制转换,将String类型的数据转换成int类型String two=request.getParameter("two");int t=Integer.parseInt(two);//强制转换,将String类型的数据转换成int类型System.out.println(one+"   "+two);int c=o+t;String co=String.valueOf(c);//将int类型的数据转换成String类型//转发,可以携带数据request.setAttribute("count",co);request.getRequestDispatcher("count.jsp").forward(request,response);//用于存放数据//        ServletContext s=this.getServletContext();//        s.setAttribute("count",co);//重定向只能依靠ServletContext获取数据//  response.sendRedirect("count.jsp");System.out.println(co);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}}

  

结束语

Servlet分享到此结束,想了解更多的朋友可以看之前总结过的博客《Servlet》https://www.cnblogs.com/zyx110/p/10771172.html,和《JSP》https://www.cnblogs.com/zyx110/p/10926587.html ,更多精彩等你来学习。

*****************************************************************************************************

我的博客园地址:https://www.cnblogs.com/zyx110/

转载请说明出处

我不能保证我所说的都是对的,但我能保证每一篇都是用心去写的,我始终认同“分享的越多,你的价值增值越大”,欢迎大家关注我的技术分享“Java匹马行天下”和学习心得分享“匹马行天下”,在分享中进步,越努力越幸运,期待我们都有美好的明天!

支持我的朋友们记得点波推荐哦,您的肯定就是我进步的动力。

转载于:https://www.cnblogs.com/zyx110/p/11229865.html

转发和重定向又是什么“垃圾”——教你再分类相关推荐

  1. 哆啦a梦教你页面的转发与重定向

    大家好,我是郭尕~ spring MVC视图 1. 简单实例 2. forward请求转发视图 3. redirect重定向视图 4. 重定向和转发的区别 4.1 转发 4.2 重定向 4.3 对比 ...

  2. 转发与重定向的使用详解

    原文地址:http://www.2cto.com/kf/201107/97118.html 区别一: 重定向时浏览器上的网址改变 转发是浏览器上的网址不变 区别二: 重定向实际上产生了两次请求 转发只 ...

  3. 小汤学编程之JavaEE学习day02——Servlet使用步骤、生命周期、接收与返回数据、GET与POST、转发与重定向

    一.Servlet使用步骤 二.Servlet生命周期 三.Servlet接收与返回数据 四.GET请求与POST请求的区别 五.转发与重定向 一.Servlet使用步骤 servlet是运行在服务器 ...

  4. javaweb_笔记2(Servlet源码分析;request详解;请求域;转发和重定向;WebServlet注解;jsp基础语法,JavaBean。)

    1.HttpServlet源码分析 HttpServlet类是专门为HTTP协议准备的.比GenericServlet更加适合HTTP协议下的开发. HttpServlet在哪个包下? jakarta ...

  5. 转发和重定向的区别?

    实际发生位置不同,地址栏不同 转发是发生在服务器的 转发是由服务器进行跳转的,细心的朋友会发现,在转发的时候,浏览器的地址栏是没有发生变化的,在我访问Servlet111的时候,即使跳转到了Servl ...

  6. 接口转发和重定向区别(二)

    转发与重定向的区别如下: 转发是服务器行为,重定向是客户端行为 1.转发在服务器端完成的;重定向是在客户端完成的 2.转发的速度快;重定向速度慢 3.转发的是同一次请求;重定向是两次不同请求 4.转发 ...

  7. SpringMVC框架 学习DAY_02 : 接收请求参数/向模板页面转发数据/重定向与转发 /Session

    1. 接收客户端提交的请求参数 1.1. 使用HttpServletRequest接收请求参数 在处理请求的方法的参数列表中,添加HttpServletRequest类型的参数,在处理请求的过程中,调 ...

  8. jsp:请求转发和重定向

    HttpServletResponse对象的sendRedirect(String location)方法称作重定向, 如果location地址前面加上"/",则表示相对于Serv ...

  9. 015_请求转发和重定向

    一. 重定向和转发工程 1. 新建一个SendRedirectForward的Web工程 2. 在WebContent下新建index.html和success.html 3. 编写index.htm ...

最新文章

  1. 专题 18 Inline Assembly(在C语言中嵌套使用汇编)
  2. openssh相关文件传输功能
  3. Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五)...
  4. 多文件目录下makefile文件递归执行编译所有c文件 很不错
  5. 文字转wav_这6款超良心语音转文字工具,真让人省心!
  6. 201128阶段二MVC框架模式、FFmpeg
  7. 设计模式之组合模式(Composite 模式)
  8. ML.NET 示例:将ML.NET模型导出到ONNX
  9. Java调用exe阻塞
  10. python构建字典查大写英文字母ascii编码_python – 字典中ISO短代码的国家名称,如何处理非ascii字符...
  11. mysql将最大金额加1000_Mysql数据库笔记
  12. mysql carnation_RDS mysql5.6 数据库还原到本地
  13. 1-2月热点:度目发布煤矿电子封条解决方案,AI助力生产安全,推进煤矿智能化建设
  14. 源码编译CWM Recovery
  15. java Date时间工具类
  16. IADS Revision Note: Asymptotic Notations
  17. LoRa开发|LoRa无线传输技术介绍
  18. ios开发学习--按钮(Button)效果源码分享
  19. Mac 安装 idb 和 idb_companion
  20. 为什么要学习HashMap的底层原理?

热门文章

  1. 【codevs1163】访问艺术馆
  2. vs无法启动程序 系统找不到指定文件_进不了系统时要做的事情
  3. windows通信端口初始化失败_STM32实例——USART串口通信实验(二)
  4. java--类型擦除
  5. C#基础13:预编译指令
  6. bzoj 3356: [Usaco2004 Jan]禁闭围栏(扫描线+树状数组)
  7. bzoj 1057: 棋盘制作(悬线法)
  8. 基于字典的超分辨率实现的各种方法
  9. javascript手机号码、电子邮件正则表达式 一种解决方案
  10. airflow+k8s 多用户-分布式-跨集群-容器化调度