Servlet入门级资料

本文介绍了Servlet的核心知识,包括Web通信过程、HTTP协议、浏览器管理、HTTP服务器、Tomcat的使用以及Servlet的规范和生命周期。详细讲解了HTTP请求与响应的结构,以及如何在Servlet中处理请求和响应。此外,还探讨了会话管理和数据共享,如Cookie和HttpSession的使用。最后,讨论了Servlet之间的数据交互,包括重定向和请求转发的不同应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Servlet

Servlet 核心知识

什么是Web开发

Web通信,指的是两台计算机通过网络来进行资源文件共享的活动
Web开发确保本次通信顺利执行

Web通信过程中两台计算机之间角色

  1. 客户端计算机:用于发送请求
  2. 服务端计算机:提供共享资源文件

资源文件

  1. 理论上来说,计算机上所有的文件都是资源共享文件
  2. 分类:
    1)静态资源文件:
    【定义】:文件内容是固定的,不能随着请求变化而发生变化
    【例子】:图片、html、doc、xls
    【特点】:服务端计算机直接将【静态资源文件】推送给【客户端计算机】,所有被共享的【静态资源文件】最终是在客户端计算机运行
    2)动态资源文件:
    【定义】:文件内容可以根据用户提供需求变化而产生不同变化内容
    【例子】:Java文件(不定义了,不好定义~)
    【特点】:服务端计算机会调用执行【动态资源文件】。服务端计算机将【动态资源文件】的运行结果交给客户端计算机。

Web通信过程中,两台计算机如何进行通信

  1. C/S结构通信方式:
    C:client,客户端计算机安装特定【客户端程序】。可以帮助客户端计算机向指定的服务端计算机发送请求。
    S:server,在服务端计算机安装一种特定【资源调度软件】,接受特定客户端程序程序发送请求,将请求需要资源文件推送回客户端计算机上【客户端程序】。
    【例子】:微信,QQ,所有大型网络游戏
    【优缺点】:
    优点:1、可以有效的保护服务端计算机。2、可以分摊服务端计算机工作压力。
    缺点:1、增加客户获得服务的成本。2、增加服务端维护成本
    【针对客户群体】:个人用户
  2. B/S结构通信方式:
    B:browser:可以帮助客户端计算机向任意的服务端发送请求
    S:server:在服务端计算机安装一种特定【资源调度软件】,可以接收所有浏览器所发送的请求。将请求的资源文件推送客户端计算机浏览器上
    【优缺点】:
    优点:1、不会增加客户获得服务的成本。2、不会增加服务端维护的成本。
    缺点:1、无法有效保护服务端计算机。2、无法通过客户端计算机来分摊服务端计算机的压力
    【针对的客户群体】:企业用户

网络协议(包)

  1. 【定义】:用于包裹在网络中传输的【二进制数据】。网络协议包存在【固定空间】用于存放【特定数据】,便于接收方分析得到数据
  2. 【分类】:FTP网络协议 HTTP协议 file协议
  3. 【B/S通信方式中】:到目前为止B/S通信结构中,只使用HTTP网络协议包

HTTP网络协议包内部结构

  1. HTTP请求协议包:
    1)是浏览器在发送请求是负责创建的
    2)是浏览器负责将请求信息,写入到请求协议包
    3)HTTP请求协议包内部自上而下有四层结构:
    【请求行】{
    url:请求的资源文件地址
    method:浏览器采用的请求方式
    }
    【请求头】{
    浏览器希望获得资源文件类型【html/png】
    浏览器希望获得资源文件内容依赖字符集
    如果浏览器采用【get方式发送请求】,本次所关联的请求参数需要保存在请求头中
    }
    【空白行】{隔离作用}
    【请求体】{
    如果浏览器采用【POST方式发送请求】,本次关联请求参数需要保存在请求体
    }
  2. 响应协议包:
    1)在服务端计算机的【资源调度软件】准备推送文件时,负责创建的
    2)【相应协议包内容】可以由【资源调度软件】写入,也可以由Java命令(Response)写入
    3)HTTP请求协议包内部自上而下有四层结构:
    【状态行】{
    状态码(200/404/405/500等等)
    }
    【响应头】{
    返回文件内容类型(doc,text,htom,text/html)
    返回文件内容所依赖的字符集,浏览器需要使用这个字符集对接收的内容进行解码
    }
    【空白行】{隔离作用}
    【响应体】{
    静态资源文件也可能是动态资源文件的运行结果(二进制形式)
    }

客户端计算机上浏览器管理

如何命令浏览器向指定网站发送请求

  1. 通过form表单命令
  2. 通过超链接命令< a href=“http://www.baidu.com” >点击这里< /a >
  3. 浏览器的地址栏对象 window.location=“http://sina.com”

请求方式【POST/GET】

  1. GET方式:
    1)要求浏览器发送请求时,携带的请求参数数量不能超过4K
    2)要求浏览器将请求参数写入到【请求头】
    3)要求浏览器将请求参数信息在地址栏上显示出来
    4)要求浏览器对接收的资源文件必须缓存到内存中
    【静态资源推荐用GET】
  2. POST方式:
    1)不会限制浏览器发送请求时,携带请求参数数量
    2)要求浏览器将请求参数写入到【请求体】
    3)要求浏览器将请求参数信息在地址栏隐藏
    4)要求浏览器对所接收的文件不能保存到缓存中
    【动态变化内容推荐用POST】
  3. 如何控制浏览器采用的请求方式
    1)让浏览器发送请求时,采用【GET方式】
    1、超链接标签命令,一定会要求浏览器采用【GET方式】
    2、location对象,一定会要求浏览器采用【GET方式】
    3、FROM标签命令中的method属性,可以控制浏览器采用【GET方式】发送请求
<form action="www.baidu.com" method="GET">
	<input type="submit" value="提交">
</form>

2)让浏览器发送请求时,采用【POST方式】

<form action="www.baidu.com" method="POST">
	<input type="submit" value="提交">
</form>

如何命令浏览器在发送请求时,携带制定请求参数

  1. 超链接标签命令,可以命令浏览器携带请求参数
<a href="http://baidu.com?username=mike&age=23"></a>
  1. location对象可以命令浏览器携带请求参数
window.location="http://baidu.com?username=mike&age=23"

以上两种方式存在弊端,请求参数内容是固定的,无法根据客户具体要求来改变

3.表单域标签可以接受用户输入的内容,作为请求参数内容
1)【表单域标签 】分类:INPUT SELECT TEXTAREA
2)【表单域标签作为请求参数条件】:
第一个条件:表单域标签必须声明在当前form标签内部
第二个条件:表单域标签必须声明【name】属性,这个属性要作为【请求参数名】
第三个条件:针对checkbox和radio,只有被选中的情况下,才能作为请求参数

HTTP服务器

什么是HTTP服务器

  1. 安装在服务器计算机上一种软件
  2. 可以解析来自浏览器发送的【请求协议包】
  3. 调用服务端上的被请求的【资源共享文件】
  4. 负责生成一个【响应协议包】
  5. 负责将【文件内容】或者【文件运行结果】写入到【响应体】中
  6. 负责将【响应协议包】推送给【当前浏览器】

HTTP服务器分类

  1. 德国SAP:
  2. IBM:weblogic
  3. JBOSS:
  4. Apache:Tomcat

【Tomcat介绍】

  1. 是一个由Java应用程序编写的资源文件调度器
  2. 可以调用服务端静态资源文件和【动态资源文件】
  3. Tomcat负责生成响应协议包,负责将响应协议包推送到浏览器上
  4. Tomcat属于Apache

Tomcat端口号

1.Tomcat端口号存储位置:Tomcat安装目录下/conf/server.xml

<Connector port="8080" protocol="HTTP/1.1"
                    connectionTimeout="20000"
                    redirectPort="8443"/>
               

8080处修改

网站

  1. 全称:网络中的资源站点
  2. 作用:仓库,存储可以共享【静态资源文件】和【动态资源文件】
  3. 文件管理:由HTTP服务器来调用内部共享资源文件
  4. 本质:就是一个文件夹

网站分类

  1. 静态资源网站:存储都是静态资源文件
  2. 动态资源网站:存储是静态资源文件和动态资源文件

如何创建一个静态资源网站

  1. Tomcat安装目录/webapps/创建一个文件夹,这个文件夹就是【网站】
  2. 在【网站】存入【静态资源文件】
  3. 启动Tomcat

动态网站结构

  1. scr:存放Java文件
  2. web:静态资源文件和配置文件
    配置文件:WEB-INF/web.xml

指定Tomcat要管理的网站

run—> Edit Configuration —> tomcat管理通道 —> Deployment —> 添加需要被Tomcat管理的网站

Tomcat安装与配置

百度很多,不写了

Servlet规范

JAVASE与JAVAEE区别

  1. JAVASE:java开发基本规范
  2. JAVAEE:java企业级开发规范,指定了JVM管理系统与13类系统之间交流规则,因此JAVAEE规范有13种。JDBC就是JAVAEE规范中一种,用于设置JVM与所有的【关系型数据库管理系统】进行交流规则

Servlet规范

  1. Servlet是JAVAEE规范中的一种。
  2. Servlet规范中设置JVM与HTTP服务器之间的交流规则
  3. 交流规则:
    1)定义何种Java类可以被HTTP服务器来调用的(何种JAVA类可以作为动态资源文件)
    2)HTTP服务器应该如何管理【动态资源文件】

何种java类可以被Tomcat调用,可以作为网站的动态共享资源文件

  1. Servlet规范中,认为只有【Servlet接口实现类】有资格作为【动态共享资源文件】
  2. 【Servlet接口实现类】必须由开发人员负责创建
  3. 如何开发一个Servlet接口实现类
    1)创建一个实现类,需要继承于【HttpServlet】
    2)【HttpServlet】存在Tomcat中lib/servlet-api.jar : javax.servlet.http.HttpServlet
    3)根据来访的浏览器采用的请求方式,重写对应doGet\doPost方法
    4)在/WEB-INF/lib中web.xml 注册Servlet接口实现类,通知Tomcat当前网站存在了一个动态资源文件

Tomcat调用Servlet接口实现类的流程

  1. 浏览器向服务端发送了一次请求
    http://localhost:8080/myWeb/test
  2. Tomcat接收这个请求,首先将请求资源文件作为动态资源文件。到web.xml进行文件定位。如果有就调用,如果没有找到对应的动态资源文件,此时tomcaz认为本次请求的是一个静态资源文件,从web下进行定位。如果还没有此时返回404状态码
  3. Tomcat到web.xml根据< url-pattern >进行定位< servlet-name >
  4. < servlet-name >定位 < servlet-class >找到本次请求调用Servlet
  5. Tomcat根据浏览器采用的请求方式,调用servlet中doGet或者doPost方法
  6. 在doGet、doPost方法调用完毕后,Tomcat负责将响应包推送给浏览器

Servlet请求路径写法规则:4种

  1. 具体请求路径:如果浏览器请求的资源文件地址与当前Servlet中《url-pattern》内容完全一致,Tomcat才会调用当前Servlet
 <url-pattern>/abc.html</url-pattern>

注意: 具体请求路径,必须以“/”为开头

  1. 前置条件请求路径:如果浏览器请求的资源文件地址以当前Servlet中《url-pattern》的内容为开头的,Tomcat才会调用当前Servlet
 <url-pattern>/abc/*</url-pattern>

注意: 前置条件请求路径,必须以 “/” 为开头, “ * ” 为结尾

  1. 后置条件请求路径:如果浏览器请求的资源文件地址以当前Servlet中《url-pattern》的内容为结尾的,Tomcat才会调用当前Servlet
 <url-pattern>*.do</url-pattern>

注意:后置条件请求路径不能以 “/” 开头,必须以 “ * ” 为开头

  1. 通配符请求路径:当前Servlet可以接收对当前网站所有的请求
 <url-pattern>/*</url-pattern>

注意:通配符请求路径必须是/*

  1. 请求路径的优先级 :【具体请求路径】>【前置请求路径】>【通配符】>【后置请求路径】

Servlet实例对象的生命周期

  1. 项目中,所有Servlet的实例对象都是由Tomcat负责创建;开发人员没有权利创建Servlet的实例对象
  2. 创建的时机:
    1)【默认情况】:当第一个用户来访问这个Servlet时,Tomcat负责创建它的实例对象
    2)【人工干预】:要求Tomcat在启动的时候创建Servlet的实例对象
    3)在Tomcat运行期间,一个Servlet实现类只能被创建一个实例对象
    4)在Tomcat关闭时,由Tomcat负责销毁所有的Servlet实例对象
//人工干预情况下如何配置启动时候创建实例对象
<servlet>
        <servlet-name>Servlet2</servlet-name>
        <servlet-class>com.qwzhao.controller.Servlet2</servlet-class>
        <load-on-startup>2</load-on-startup>// 数字需要大于0 的任何整数
    </servlet>

Servlet开发时需要使用的物种工具对象

概述

  1. HttpServletResponse接口:负责将运行结果写入到响应包中

  2. HttpServletRequest接口:负责读取请求包相关信息的

  3. ServletContext接口:可以为当前网站中所有的Servlet提供共享数据

  4. Cookie:在一次回话过程中,存储浏览器在服务端所产生的私人数据

  5. HttpSession接口:在一次回话过程中,存储浏览器在服务端所产生的私人数据

HttpServletResponse接口

  1. 介绍:
    1)一个来自于Servlet规范中接口:由Tomcat负责提供这个接口实现类
    2)负责在Servlet运行完毕后,将相关数据写入到响应头和响应体
    3)开发人员习惯于将HttpServletResponse接口修饰对象,称为相应对象
  2. response.setCharacterEncoding()与 response.setContentType()
    1)response.setCharacterEncoding(“GBK”);
    2)response.setContentType(“text/html”);

HttpServletRequest接口

  1. 介绍:
    1)来自Servlet规范中一个接口,接口实现类由Tomcat负责提供的
    2)由HttpServletRequest接口修饰对象,可以帮助开发人员读取请求协议包信息
    3)习惯于将HttpServletRequest接口修饰对象称为请求对象
  2. 作用:
    1)读取请求行中的相关信息
    String url=request.getRequestURL();
    String method=request.getMethod();
    2)读取请求头或者请求体中所有的请求参数名
    3)读取请求头或者请求体中参数内容
    request.getParameter(“paramName”);
    request.getParameterValues(“paramName”);返回String数组

请求对象与响应对象生命周期

  1. 都是由Tomcat负责创建的
  2. 每当Tomcat收到请求协议包的时候,就会为这个请求协议包去创建请求对象和响应对象
  3. 一次请求,对应一对请求对象和响应对象
  4. 在Tomcat调用被请求的Servlet中服务方法(doGet、doPost)时,负责将本次请求对象和响应对象作为参数传入到服务方法
  5. 在服务方法工作完毕后,Tomcat销毁本次请求相关的request和response
  6. Tomcat负责将响应包推送到浏览器上

中文请求参数乱码问题

  1. 原因:跟浏览器采用的请求方式有关
getpost
如果浏览器以【get】方式发送请求,请求参数在请求头存放。在请求协议包到达服务端之后,请求头内容是由Tomcat负责解析。【Tomcat9.0版本】在解析数据时候,默认采用字符集是【utf-8】。所以如果浏览器以get方式发送中文参数,此时在服务端不会出现中文乱码如果浏览器以【post】方式发送请求,请求参数在请求体中存放。在请求协议包到达服务端之后,请求体内容是由请求对象request负责解码的,request对象默认使用【ISO-8859-1】字符集进行解码。所以如果浏览器以post方式发送中文参数,此时在服务端必须会出现中文乱码问题
  1. 解决方案:在request对象解析数据之前,重新设置request对象字符集utf-8即可。
    request.setCharacterEncoding(“utf-8”);

ServletContext接口

  1. 介绍:
    1)Servlet规范中一个接口,接口实现类由Tomcat负责提供
    2)ServletContext负责为当前工程中所有Servlet提供能共享数据
    3)开发人员习惯于将ServletContext接口修饰对象称为【全局作用域对象】
  2. 生命周期:
    1)全局作用于对象在Tomcat启动时,由Tomcat为当前网站来创建的。
    2)一个网站中只能有一个全局作用域对象
    3)从网站启动开始一直到网站关闭时,由Tomcat负责销毁当前网站的全局作用域对象
  3. 使用:
    1)如何得到当前工程中的全局作用于对象
    request.getServletContext();向Tomcat索要当前工程的全局作用域对象 返回ServletContext对象。即:ServletContext application=request.getServletContext();
  4. 共享数据来源方式一:
    在网站启动之前,开发人员可以将网站中绝大多数Servlet需要使用的数据添加到web.xml中
<context-param>
<param-name>名字</param-name>
<param-value>内容</param-value>
</context-param>

在网站启动时:Tomcat首先为当前网站创建一个全局作用域对象。tomcat然后将web.xml配置共享数据添加到全局作用域对向中
在网站运行时,当某一个Servlet需要使用共享数据时,可以从全局作用域对象中索要数据
application.getInitParameter(“名字”);
会取< param-value>内容< /param-value>中的值
此时共享数据只能读取,不能修改

  1. 共享数据来源方式二:
    1)在tomcat运行期间,可以将某一个Servlet所提供的数据保存到全局作用域对象中,供当前网站中其他的Servlet来使用
    application.setAttribute(“name”,value);
    application.getAttribute(“name”);
    由Servlet存入共享数据可以被修改

会话:

  1. 定义:
    一个浏览器与一个服务端的一次完整交流
  2. 特点:
    1)在一次会话过程中,经历多次的请求与响应
    2)在一次会话过程中,同一个浏览器往往会访问多个Servlet
  3. 需求:
    在一次会话过程中,在浏览器要访问的Servlet之间进行数据共享
  4. 解决方案:Cookie 和 HttpSession

Cookie

  1. 介绍:
    1)Cookie是Servlet规范提供一个工具类
    2)在参与一次会话过程中Servlet之间,进行数据共享
    3)Cookie存储在浏览器上,保存本次会话的共享数据

  2. 工作原理:
    1)cookie存放在响应头和请求头中
    2)在浏览器访问Servlet时,Servlet负责将当前浏览器所产生的私人数据保存到Cookie中。然后Servlet负责将Cookie推送到当前浏览器上
    3)在浏览器再次来访问当前网站其他Servlet时,需要无条件的将服务端之前所推送过来Cookie再推送回去。这样其他Servlet得到Servlet提供的共享数据

  3. Cookie使用:
    1)如何创建一个Cookie对象来保存共享数据:
    Cookie cookie=new Cookie(“key”,“共享数据”);
    注意:1、一个Cookie只能有一个键值对。2、cookie对象只能储存String类型共享数据
    2)如何将Cookie写入到响应包响应头去
    response.addCookie(cookie);
    3)如何从请求协议包的请求头中来读取浏览器所返还的Cookie
    Cookie array[]=request.getCookies();

  4. cookie的生命周期
    1)在声明时被创建,默认情况会被保存在浏览器内存中,当浏览器被关闭的时候,就会被Windows系统销毁
    2)人工干预销毁:要求将Cookie保存到客户端计算机的硬盘上,同时指定cookie在硬盘上的存活时间。在存货时间范围之内关闭浏览器甚至关闭计算机都不会导致Cookie被销毁。
    cookie.setMaxAge(以秒为单位的时间);

  5. Cookie的缺点
    1)一个cookie对象只能存放一个键值对,如果存储的数据较多,需要管理多个Cookie
    cookie只能存放String类型数据,无法存放高级类型Java数据,比如List,Map

HttpSession接口

  1. 介绍:
    1)来自于Servlet规范中的接口,接口实现类来自于Tomcat
    2)为参与同一个会话的Servlet之间提供共享数据
    3)习惯于将HttpSession接口修饰的对象称为会话作用域对象 也可以叫Session对象

  2. HttpSession与Cookie的区别:
    相同点:为参与同一个会话的Servlet之间提供共享数据
    不同点:
    1:存储位置:cookie存在客户端的内存或者硬盘上,HttpSession存储在服务端计算机的内存中
    2:存储内容:cookie只能存储String,HttpSession可以存储任意类型的数据
    3:存储数量:一个Cookie只可以存储一个键值对,一个HttpSession对象可以存储任意个数的键值对

  3. 使用:
    1)在浏览器来访时,Tomcat不会主动为当前浏览器创建对应的Session对象
    2)只有浏览器所访问的servlet向tomcat提出要求时,tomcat才会为当前浏览器创建一个HttpSession对象
    3)如何在Servlet中为当前的浏览器,申请一个HttpSession对象
    1:HttpSession session=request.getSession();
    2:HttpSession session=request.getSession(true);
    3:HttpSession session=request.getSession(false);

  4. getSession()与HttpSession getSession(true)与getSession(false)的区别
    1)getSession():如果当前浏览器在服务端中已经拥有了一个Session对象,此时Tomcat需要将这个SESSION对象进行返回。如果当前浏览器在服务端中尚未拥有SESSION对象,此时tomcat需要创建一个全新的session对象返回。
    2)request.getSession(true) 与request.getSession()完全一致
    3)如果当前浏览器在服务端已经有了一个session对象,此时tomcat需要将这个session返回。如果当前浏览器在服务端中尚未拥有session对象,此时则返回一个null。
    如果来访的用户身份已经确认合法了,此时可以使用getSession()或者getSession(true),如果来访的用户身份尚未确认,可以使用getSession(false)

  5. Tomcat是如何将浏览器与Session对象关联
    在Tomcat创建了一个Session对象时,为session对象生成一个唯一编号,然后将这个编号保存到cookie中,推送到当前的浏览器内存中
    等到浏览器再次发送请求时,Tomcat就可以通过读取浏览器返回的cookie来判断浏览器在服务端中是否有session对象

  6. 如何使用HttpSession对象
    在本次会话过程中,AServlet需要为本次会话中其他Servlet提供共享数据:session.setAttribute(“key-Name”,共享数据);
    在本次会话过程中,BServlet需要得到当前浏览器session的数据:session.getAttribute(“key-Name”);

Servlet开发过程中涉及的两个常用小点

Http状态码

  1. 介绍:
    1)HTTP状态码是由一个三位数字组成的符号
    2)Http状态码是由Tomcat负责创建生成
    3)HTTP状态码是由Tomcat写入到状态行中
    4)Http状态码通知浏览器在接收到响应包之后的行为
    HTTP状态码通知浏览器,服务端无法提供本次服务的原因
  2. 分类介绍:5类
    1)1XX:通知浏览器本次返回的资源文件并不完整,需要浏览器继续向服务端发送申请
    2)2XX: 通知浏览器服务端将一个完整的文件推送给浏览器 例:200:浏览器与服务端进行了一次完整通信
    3)3XX:服务端推送给浏览器的是一个网址,要求浏览器在接收到这个网址后,立刻自动向这个网址发送请求 例 302:request.sendRedirector(“地址”)
    4)4XX:通知浏览器,服务端本次未能提供服务的原因,是由于服务端没有对应的资源文件。
    例 404:服务端没有对应的资源文件
    405:服务端有本次请求对应的Servlet 但是Servlet不负责处理浏览器当前的请求方式(Get、Post)
    5)5XX:通知浏览器,服务端本次未能提供服务的原因,呗调用Servlet在运行时抛出了异常

默认欢迎资源文件:

  1. 定义:
    Http服务器在接收到一个默认请求时,返回的资源文件
  2. 默认请求:
    浏览器向某一个网站发送请求时,并没有制定索要的文件的情况
  3. 默认欢迎文件的配置:
    1)手动方式:在Web.xml中进行配置
    < welcom-file-list > < welcome-file>index.jsp< /welcome-file>< / welcom-file-list >
    2)由Tomcat自行确认
    如果Tomcat在当前网站中没有找到welcome-file标签,此时Tomcat会回到自己的config文件夹下面去寻找一个web.xml的文件,在这个web.xml文件中可以寻找到welcome-file-list标签,来获得默认资源文件地址
  4. 默认欢迎资源文件分类:
    1)首选 html文件或者JSP文件
    2)也可以是一个Servlet,但是这个Servlet应该是一个查询Servlet,并且在运行时,不需要得到浏览器发送的请求参数的

多个Servlet来处理同一次请求方案

前提:

  1. 一个Servlet只负责实现一个功能
  2. 浏览器在一次请求时,只能请求一个资源文件
  3. 如果浏览器的请求需要由多个Servlet协同完成,需要用户多次通过手动提交请求来完成任务,这样降低服务质量

方案分类

只需要用户手动通过浏览器发送一次请求,就可以将本次请求相关的Servlet来依次调用

  1. 重定向方案
  2. 请求转发方案
重定向原理:

在第一个Servlet工作完毕后,将第二个Servlet地址推送给用户浏览器,由用户浏览器根据这个地址来自动的向第二个Servlet发送请求

重定向涉及命令:

response.sendResirect(第二个Servlet地址);
将一个地址写入到响应头中的location属性上,浏览器在接收到响应包之后,自动根据location地址来发送第二次请求。这样的好出避免用户多次手动发送请求

重定向特征:
  1. 发生的位置:发生在客户端的浏览器上
  2. 浏览器发送的请求次数:多次
  3. 地址栏中的内容是否会发生改变?:会发生变化,而内容是浏览器第二次需要访问的资源地址
  4. 重定向时,浏览器采用的请求方式是是什么方式?:由于此时通过地址栏来命令浏览器发送请求,所以浏览器采用请求方式一定只能是GET
  5. 重定向时访问的资源文件范围:并未限制,但是内容需写项目名或者全网站名
重定向方案适用场景
  1. 添加功能Servlet 调用查询功能Servlet
  2. 删除功能Servlet 调用查询功能Servlet
  3. 更新功能Servlet 调用查询功能Servlet
请求转发的原理

在第一个Servlet工作完毕后,代替当前浏览器向Tomcat申请调用第二个Servlet。Tomcat在接收到申请之后,调用第二个Servlet来完成本次请求中剩余任务

请求转发涉及的命令

Servlet1和Servlet2

  1. 创建一个资源申请报告对象
    RequestDispatcher report = request.getRequestDispatcher(“第二个Servlet地址”)
  2. 将申请报告推送给Tomcat,同时将Servlet1拥有的【request和response】一并交给Tomcat
    report.forward(request,response);
  3. Tomcat在接收到报告之后就会调用第二个Servlet来完成剩余任务
请求转发时为什么将第一个Servlet中的request和response交给Tomcat
  1. Tomcat在接收到请求之后,需要调用第二个Servlet.
  2. Tomcat此时需要为第二个Servlet提供运行时需要的request和response
  3. 但是本次请求是由第一个Servlet发来的,没有对应的请求协议包,因此导致Tomcat在接收到请求后,不会创建request和response
  4. 为了解决这个问题,需要将第一个Servlet使用request和response通过Tomcat交给第二个Servlet来使用
请求转发特征
  1. 发生的位置:发生在服务端
  2. 浏览器发送请求的次数:浏览器只向服务端发送了一次请求
  3. 地址栏内容是否发生变化:由于请求转发发生在服务端,因此浏览器地址栏中的内容依然是保持在第一次请求的内容
  4. 调用资源文件范围:只能在项目内的资源
  5. 通过请求转发所调用的Servlet接收的请求方式:与我们浏览器第一次发送请求时,所使用的请求方式保持一致(或者说参与同一次请求转发的所有Servlet接收的请求方式是一样的)
  6. 参与同一次请求转发的所有Servlet之间如何进行数据共享
    1)可以使用全局作用于对象
    2)可以使用会话作用域对象
    3)可以使用请求作用域对象
请求转发不适合的场景
  1. 添加功能Servlet 调用查询功能Servlet
  2. 删除功能Servlet 调用查询功能Servlet
  3. 更新功能Servlet 调用查询功能Servlet
请求转发适合的场景

查询Servlet调用JSP时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值