首页 > 编程语言 >JavaWeb之Servlet详解(以及浏览器调用 Servlet 流程分析图)

JavaWeb之Servlet详解(以及浏览器调用 Servlet 流程分析图)

时间:2023-04-12 19:46:04浏览次数:38  
标签:web 浏览器 JavaWeb 对象 Servlet ServletContext servlet 请求

Servlet

1.什么是Servlet

Servlet(java 服务器小程序)

  1. 他是由服务器端调用和执行的(一句话:是Tomcat解析和执行)

  2. 他是用java语言编写的, 本质就是Java类

  3. 他是按照Servlet规范开发的(除了tomcat->Servlet weblogic->Servlet)

  4. 功能强大,可以完成几乎所有的网站功能

2.开发方式

  1. 编写一个类去实现 Servlet 接口 / 编写一个类去继承 HttpServlet 类 (在实际项目中,继承 HttpServlet 类开发 Servlet 程序,更加方便)

  2. 根据业务需要重写 doGet 或 doPost 方法

  3. 在 web.xml/注解 中去配置 servlet 程序的访问地址

  4. 当然IDEA也可以直接右键create new servlet自动完成以上过程

3.浏览器调用 Servlet 流程分析

image-20230403165424099

image-20230403165951952

 

4.在web.xml定义一个servlet

<servlet>  
<servlet-name>t1</servlet-name>  
<servlet-class>类</servlet-class>  
<!-- 如果需要自动加载,加下面一句 -->  
<load-on-startup>1</load-on-startup>  
</servlet>  

<load-on-startup>标记web容器是否在启动的时候就加载这个servlet

当值为0或者大于0时,表示web容器在应用启动时就加载这个servlet;

当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载;

正数的值越小,启动该servlet的优先级越高。

5.Servlet 注意事项和细节

  1. Servlet 是一个供其他 Java 程序(Servlet 引擎)调用的 Java 类,不能独立运行

  2. 针对浏览器的多次 Servlet 请求,通常情况下,服务器只会创建一个 Servlet 实例对象, 也就是说 Servlet 实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至 web 容器退出/或者 redeploy 该 web 应用,servlet 实例对象才会销毁

  3. 在 Servlet 的整个生命周期内,init 方法只被调用一次。而对每次请求都导致 Servlet 引 擎调用一次 servlet 的 service 方法

  4. 对于每次访问请求,Servlet 引擎都会创建一个新的 HttpServletRequest 请求对象和一个 新的 HttpServletResponse 响应对象,然后将这两个对象作为参数传递给它调用的 Servlet 的 service()方法,service 方法再根据请求方式分别调用 doXXX 方法

  5. 如果在元素中配置了一个<load-on-startup>元素,那么 WEB 应用程序在启动时, 就会装载并创建 Servlet 的实例对象、以及调用 Servlet 实例对象的 init()方法

6.ServletConfig

基本介绍:

  1. ServletConfig 类是为 Servlet 程序的配置信息的类

  2. Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建

  3. Servlet 程序默认是第 1 次访问的时候创建,ServletConfig 在 Servlet 程序创建时,就创建一个对应的 ServletConfig 对象

ServletConfig 类能干什么:

  1. 获取 Servlet 程序的 servlet-name (下文中的DBServlet)

  2. 获取xml中配置好的初始化参数 init-param中的param-name和value

  3. 获取 ServletContext 对象

    一言以蔽之:获取在web.xml中配置好的信息和ServletContext

     <servlet>
            <servlet-name>DBServlet</servlet-name>
            <servlet-class>DBServlet</servlet-class>
            <init-param>
                <param-name>username</param-name>
                <param-value>root</param-value>
            </init-param>
            <init-param>
                <param-name>pwd</param-name>
                <param-value>20030515</param-value>
            </init-param>
     </servlet>
        <servlet-mapping>
            <servlet-name>DBServlet</servlet-name>
            <url-pattern>/dbservlet</url-pattern>
        </servlet-mapping>

7.ServletContext

基本介绍:

  1. ServletContext 是一个接口,它表示 Servlet 上下文对象

  2. 一个 web 工程,只有一个 ServletContext 对象实例

  3. ServletContext 对象 是在 web 工程启动的时候创建,在 web 工程停止的时销毁

  4. ServletContext 对象可以通过 ServletConfig.getServletContext 方法获得对 ServletContext 对象的引用,也可以通过 this.getServletContext()来获得其对象的引用。

  5. 由于一个 WEB 应用中的所有 Servlet 共享同一个 ServletContext 对象,因此 Servlet 对象 之间可以通过 ServletContext 对象来实现多个 Servlet 间通讯。ServletContext 对象通常也被 称之为域对象。

ServletContext 能干什么 :

  1. 获取 web.xml 中配置的上下文参数 context-param (信息和整个 web 应用相关,而不是属于某个Servlet)

  2. 获取当前的工程路径,( 比如 /servlet )

  3. 获取工程部署后在服务器硬盘上的绝对路径 注意是out目录下的,因为访问资源都是访问编译后的源文件

    ( 比 如 : D:\hspedu_javaweb\servlet\out\artifacts\servlet_war_exploded)

  4. 像 Map 一样存取数据, 多个 Servlet共享数据

image-20230405132628430

8.HttpServletRequest

基本介绍:

  1. HttpServletRequest 对象代表客户端的请求

  2. 当客户端/浏览器通过 HTTP 协议访问服务器时,HTTP 请求头中的所有信息都封装在这个对象中

  3. 通过这个对象的方法,可以获得客户端这些信息。

HttpServletRequest 能干什么:

获取封装好的 HTTP 请求消息中的各类元素(请求头、附带的数据等)

请求转发

请求转发指一个 web 资源收到客户端请求后,通知服务器去调用另外 一个 web 资源进行处理

请求转发注意事项和细节

  1. 浏览器地址不会变化(地址会保留在第 1 个 servlet 的 url)

  2. 在同一次 HTTP 请求中,进行多次转发,仍然是一次 HTTP 请求

  3. 在同一次 HTTP 请求中,进行多次转发,多个 Servlet 可以共享 request 域/对象的数据(因 为始终是同一个 request 对象)

  4. 可以转发到 WEB-INF 目录下(后面做项目使用)

  5. 不能访问当前 WEB 工程外的资源

标签:web,浏览器,JavaWeb,对象,Servlet,ServletContext,servlet,请求
From: https://www.cnblogs.com/hanlinyuan/p/17310990.html

相关文章

  • JavaWeb中Servlet、web应用和web站点的路径细节("/"究竟代表着什么)
    JavaWeb中Servlet、web应用和web站点的路径细节("/"究竟代表着什么) 1开门见山新建一个tomcatweb项目,配置tomcat的虚拟目录,取默认值(/项目名_war_exploded)那么如果你的tomcat的默认站点(即http://localhost:8080)没有更改的话,这个项目的两个重要的根目录就出来了web站点根目......
  • javaweb-学习创建servlet
    Servlet创建、声明、映射,利⽤ServletContext统计⼀个⽹站的访问总量。1)、创建一个servelet选择要用到的方法2)、编辑serveletpackagecom.cont;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletContext;importjavax.servlet.Ser......
  • 如何判断浏览器的请求头是不是结束
    \r\n\r\n好像是结束符packagecom.maple.detail3;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.io.Prin......
  • Javaweb-登录界面-filter配合案例-2023-04-11
    1、新建login.jsp登录界面响应的路径<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>Login</title></head><body><h1>登录界面</h1><hr><form......
  • Chrome模拟手机浏览器(iOS/Android)的方法
    1、在chrome的开发者工具模式下,点击左上角的手机图标切换成手机模式(或者F12然后Ctrl+Shift+M),一般这个方法访问绝大多数设限的网站。2、第一种方法不行,则安装Google插件User-AgentSwitcherforGoogleChrome3、https://blog.csdn.net/gb4215287/article/details/64438603......
  • linux CentOS 7上安装Chrome浏览器
    目录linuxCentOS7上安装Chrome浏览器添加Chrome浏览器的官方存储库,使用以下命令:安装Chrome浏览器:确认Chrome浏览器是否安装成功:linuxCentOS7上安装Chrome浏览器在CentOS7上安装Chrome浏览器可以按照以下步骤操作:添加Chrome浏览器的官方存储库,使用以下命令:$sudotee/etc......
  • vscode 使用浏览器调试
    launch.json{"version":"0.2.0","configurations":[{"type":"node","request":"launch","name":"node",......
  • Springboot报错:Could not resolve view with name 'index' in servlet with name 'dis
    该异常是因为用定义了带@EnableWebMvc注解的配置类后发生的,在带该注解的配置类中加入下面的代码就可以了:@BeanpublicInternalResourceViewResolverviewResolver(){InternalResourceViewResolverviewResolver=newInternalResourceViewResolver();viewResolver.......
  • 在浏览器和node中使用 GitHub的js-xlsx库进行Excel文件处理(一)
    1.简介js-xlsx库是目前Github上star数量最多的处理Excel的库,功能强大,提供了各种对表格的操作,但是这个项目文档有些乱,提供的demo也只具备最基本的功能。Demo地址:http://oss.sheetjs.com/js-xlsxGithub上源码地址:http://git.io/xlsx支持解析的格式有:Excel2007+XML......
  • Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目
    Servlet注解的使用,简化配置以及,使用模板方法设计模式优化oa项目每博一文案有句谚语说:“一怒之下踢石头,只有痛着脚趾头。”比一件糟糕的事情更可拍的,是你用糟糕的态度去面对它。看过一个很有意思的故事:有个男人清早洗漱的时候,把自己的手表放在了桌子上。他的儿子不小心把手表......