转发和重定向又是什么“垃圾”——教你再分类
转发与重定向的区别
前言:之前写了几篇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
转发和重定向又是什么“垃圾”——教你再分类相关推荐
- 哆啦a梦教你页面的转发与重定向
大家好,我是郭尕~ spring MVC视图 1. 简单实例 2. forward请求转发视图 3. redirect重定向视图 4. 重定向和转发的区别 4.1 转发 4.2 重定向 4.3 对比 ...
- 转发与重定向的使用详解
原文地址:http://www.2cto.com/kf/201107/97118.html 区别一: 重定向时浏览器上的网址改变 转发是浏览器上的网址不变 区别二: 重定向实际上产生了两次请求 转发只 ...
- 小汤学编程之JavaEE学习day02——Servlet使用步骤、生命周期、接收与返回数据、GET与POST、转发与重定向
一.Servlet使用步骤 二.Servlet生命周期 三.Servlet接收与返回数据 四.GET请求与POST请求的区别 五.转发与重定向 一.Servlet使用步骤 servlet是运行在服务器 ...
- javaweb_笔记2(Servlet源码分析;request详解;请求域;转发和重定向;WebServlet注解;jsp基础语法,JavaBean。)
1.HttpServlet源码分析 HttpServlet类是专门为HTTP协议准备的.比GenericServlet更加适合HTTP协议下的开发. HttpServlet在哪个包下? jakarta ...
- 转发和重定向的区别?
实际发生位置不同,地址栏不同 转发是发生在服务器的 转发是由服务器进行跳转的,细心的朋友会发现,在转发的时候,浏览器的地址栏是没有发生变化的,在我访问Servlet111的时候,即使跳转到了Servl ...
- 接口转发和重定向区别(二)
转发与重定向的区别如下: 转发是服务器行为,重定向是客户端行为 1.转发在服务器端完成的;重定向是在客户端完成的 2.转发的速度快;重定向速度慢 3.转发的是同一次请求;重定向是两次不同请求 4.转发 ...
- SpringMVC框架 学习DAY_02 : 接收请求参数/向模板页面转发数据/重定向与转发 /Session
1. 接收客户端提交的请求参数 1.1. 使用HttpServletRequest接收请求参数 在处理请求的方法的参数列表中,添加HttpServletRequest类型的参数,在处理请求的过程中,调 ...
- jsp:请求转发和重定向
HttpServletResponse对象的sendRedirect(String location)方法称作重定向, 如果location地址前面加上"/",则表示相对于Serv ...
- 015_请求转发和重定向
一. 重定向和转发工程 1. 新建一个SendRedirectForward的Web工程 2. 在WebContent下新建index.html和success.html 3. 编写index.htm ...
最新文章
- 专题 18 Inline Assembly(在C语言中嵌套使用汇编)
- openssh相关文件传输功能
- Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五)...
- 多文件目录下makefile文件递归执行编译所有c文件 很不错
- 文字转wav_这6款超良心语音转文字工具,真让人省心!
- 201128阶段二MVC框架模式、FFmpeg
- 设计模式之组合模式(Composite 模式)
- ML.NET 示例:将ML.NET模型导出到ONNX
- Java调用exe阻塞
- python构建字典查大写英文字母ascii编码_python – 字典中ISO短代码的国家名称,如何处理非ascii字符...
- mysql将最大金额加1000_Mysql数据库笔记
- mysql carnation_RDS mysql5.6 数据库还原到本地
- 1-2月热点:度目发布煤矿电子封条解决方案,AI助力生产安全,推进煤矿智能化建设
- 源码编译CWM Recovery
- java Date时间工具类
- IADS Revision Note: Asymptotic Notations
- LoRa开发|LoRa无线传输技术介绍
- ios开发学习--按钮(Button)效果源码分享
- Mac 安装 idb 和 idb_companion
- 为什么要学习HashMap的底层原理?
热门文章
- 【codevs1163】访问艺术馆
- vs无法启动程序 系统找不到指定文件_进不了系统时要做的事情
- windows通信端口初始化失败_STM32实例——USART串口通信实验(二)
- java--类型擦除
- C#基础13:预编译指令
- bzoj 3356: [Usaco2004 Jan]禁闭围栏(扫描线+树状数组)
- bzoj 1057: 棋盘制作(悬线法)
- 基于字典的超分辨率实现的各种方法
- javascript手机号码、电子邮件正则表达式 一种解决方案
- airflow+k8s 多用户-分布式-跨集群-容器化调度