首页 > 其他分享 >Servlet知识总结

Servlet知识总结

时间:2022-11-25 18:13:47浏览次数:45  
标签:总结 web 路径 请求 知识 服务器 Servlet 客户端

Servlet的相关知识:

Servlet中的service方法:
这个方法的作用是对客户端的请求做出相应的相应

一个Servlet程序的编写过程:
1、先写一个类,这个类实现Servlet,实现相应的方法

2、在service方法中编写对应的代码

3、在web.xml中编写相应的Servlet程序配置

Servlet的生命周期:

  1. 执行Servlet构造方法
  2. 执行init初始化方法

第一二步都是在第一次进行执行的时候执行的,如果重复访问Servlet网页,第一二步不会再次执行

  1. 执行service方法

第三步,每访问一次Servlet网页都会进行执行

  1. 执行destroy销毁方法

第四步,在web工程停止的时候进行调用

(上述的都是在实现Servlet类中都应该实现的类)

在一般的实际项目开发中,都是使用继承Servlet的HttpServlet类的方法取实现Servlet程序的

步骤:

  1. 编写一个类去继承HttpServlet类
  2. 根据业务需要重写doGet和doPost方法
  3. 到web.xml文件中配置Servlet程序的访问地址

ServletConfig是Servlet程序的配置信息类

ServletCofig和Servlet程序都是Tomcat服务器负责创建,我们负责使用。

Servlet程序默认是在第一次访问的时候进行创建,ServletConfig是在每个Servlet程序创建的时候,就创建一个相应的ServletConfig对象(每一个ServletConifg对象那个对应一个Servlet程序,他只能获取到他自己对应的Servlet对象在web.xml文件中的标签的值)

我们在重写init()方法的时候,一定要加上一句super.init(ServletConfig对象),不然就会出现空指针异常,为什么呢?

原因是我们重写的init方法中的参数中的ServletConfig这个参数是一个在GenericServlet抽象类中的参数,在GenericServlet抽象类中也具有init方法,在这个init方法中,他将传入的ServletConfig参数进行保存起来了,如果我们再重写init方法的时候没有加上super.init(ServletConfig对象)这段代码的话,我们就不能将ServletConfig进行保存起来,就会出现异常

ServletContext类他是一个接口。

ServletContext对象:(Servlet上下文对象)
ServletContext对象在每一个web工程只存在一个,不管使用多少次getServletContext()方法,返回的都是同一个ServletContext对象

ServletContext对象是一个域对象,在工程进行部署的时候进行创建,在web工程停止的时候销毁,一个工程在部署的时候都只能创建一个ServletContext对象

什么是域对象?

域对象,是可以和map集合一样的可以存取数据的对象,叫做域对象

这里的域指的是存储数据的操作范围

添加数据: 获取数据: 删除数据

域对象:setAttribute() getAttribute()removeAttribute()

Map:put() get() remove()

ServletContext类的四个作用:
1、获取在web.xml文件中的context-param标签中的上下文参数

2、获取当前工程的路径:格式:/工程路径

3、获取当前工程部署后在服务器硬盘上的绝对路径

4、像map集合一样存取数据

第一种工程部署的方式:

直接将文件拷贝到Tomcat中的webapps中(webapps中的每一个文件夹都是一个工程,也就是网页)

部署好之后,如果想要进行访问,需要将html文件的路径从webapps中这个工程为起始文件进行添加路径进行访问

工程部署的第二种方法

在conf这个配置文件夹中的Catalina\localhost中添加一个xml文件,我举例为kkk.xml文件,在xml文件中进行编写以下代码:

<Context path="/kkk" docBase="E:\IdeaProjects\JavaWeb\out\artifacts\web03_war_exploded" />

代码解释:

Context表示是一个工程上下文

path表示工程的访问路径为/kkk(这个kkk是和xml文件名相同的)

docBade表示的是你的工程目录在哪里(也就是第一种方法中的在webapps中添加的文件夹的位置)

使用这种方式,就不需要再将工程目录存放在webapps目录下了,可以存放在任意位置,前提是docBase后面的值等于工程目录的位置

在进行访问的时候,会从配置文件中加载进行工程的位置,在进行访问

客户端向服务器发送数据叫做请求,服务器向客户端发送数据叫做相应

请求又分为两种:(get请求和post请求)

  1. get请求
  2. 请求行
  3. 请求的方式 get
  4. 请求的资源路径[ +?+请求参数](这里的请求参数就是标签中的name属性)
  5. 请求的协议版本号 Http/1.1
  6. 请求头

1)key:value 组成 不同的键值对表示不同的涵义

请求头中常见的key:

Accept:告诉服务器,客户端可以接受的数据类型

Accept-Language:告诉服务器,客户端接受的语言类型

Zh_CN 中文

En_US 英文

User-Agent:里面就是浏览器的信息(Agent表示代理, 代替用户替我们发送信息的东是是服务器)

Accept-Encoding:告诉服务器客户端可以接受的数据编码(压缩)格式

Host:表示请求的服务器ip和端口号

Connection:告诉服务器请求的连接如何

Keep-Alive 告诉服务器回传数据不要马上关闭,保持一段时间的连接

Closed 马上关闭

Poet请求:

  1. 请求行

1)请求方法 post

2)请求的资源路径[+?+参数]

3)请求的协议的版本号 Http/1.1

  1. 请求头

1)key:value 不同的键值对有不同的含义

空行(这里有一个空行将数据进行分开)

Post请求常见的key:

1、 Accept:客户端支持什么数据类型的数据

2、Accept-Language:客户端接受的语言类型

3、Referer:表示发送请求时,浏览器地址栏中当前的地址(从哪儿来)

4、User-Agent:表示浏览器的信息

5、Content-Type:表示发送的数据类型

Application/x-www-form-url lencoded

表示提交的数据格式是:

Key=value&key=value,然后在对其进行url编码,url编码是把非英文的内容转为%xx&xx的形式

Multipart/form-data

表是以多短的形式提交数据给服务器(以流的方式进行提交,用于上传)

    1. content-length:表示发送的数据的长度
    2. cache-control:表示如何控制缓存 no-cache表示不缓存
  1. 请求体—>>>给服务器的请求

常见的get请求:

  1. form标签 method=get
  2. a标签
  3. link标签引入css文件
  4. script标签引入js文件
  5. img标签引入图片
  6. iframe引入html页面
  7. 在浏览器地址栏中输入地址后敲回车

常见的post请求:

  1. form标签 method=post

响应的Http协议格式:
1、响应行

1)响应的协议和版本号

2)响应状态码

3)响应状态描述符

2、响应头

1)key:value 不同的响应头有不同的含义

空行

3、响应体

标签:总结,web,路径,请求,知识,服务器,Servlet,客户端
From: https://www.cnblogs.com/just1t/p/16925948.html

相关文章

  • 【专项知识零碎】
    序列化与反序列化:https://tech.meituan.com/2015/02/26/serialization-vs-deserialization.html  // JSON(REST)/Avro(Kafka支持)/Protobuf(GooglegRpc)/XML(SOAP)/Thrift等,......
  • P2项目答辩总结
    1、登录1.1登录的时候做vip的判断;1.2使用JWT(JavaWebtoken),验证登录,更加安全2、连续签到2.1判断是否断签:​ 通过判断昨天是否登录,可以判断;2.2判断连续签到多少......
  • go源码学习(零):前置知识-编译过程
    编译原理-从源码到机器码任何一门高级语言,要想最终能够在机器上执行那么就一定要从源码生成机器码,因为对于机器来说,它只认同由0和1组成的二进制程序。从人类可读的源码到......
  • 2. redis扩展知识
    管道(pipeline)比如说客户端连接到redis服务端以后,要进行很多命令的操作,每次执行命令都会经过网络io然后调用到redis服务端,管道的技术可以把多个命令进行压缩,这样一次调用就......
  • 最全的PyInputPlus模块方法总结
    安装第三方模块    在Windows和macOS中,pip会随着Python自动安装。可以通过命令行窗口输入pip检查是否已经安装。但在Linux中,必须由你单独安装。在UbuntuLi......
  • 【iOS-Cocos2d游戏开发之二十】精灵的基础知识点总汇(位图操作/贴图更换/重排z轴等)以
    ​​ 李华明Himi ​​​原创,转载务必在明显处注明  最近写了不少Cocos2d的博文了,那么由于Himi介绍的一般都是比较容易出错的问题或者比较受到关注的知识点,所以不少......
  • 最全的Python海龟绘图总结
    在Python中使用海龟绘图,需要导入相应的模块,那么什么是模块呢?逻辑上来说模块就是一组功能的组合;实质上一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上......
  • servlet开发步骤及web欢迎页面
    servlet类开发步骤1.编写一个servlet类直接继承httpservlet2.重写httpservlet类中的doGet或doPost方法,具体重写谁,由后端决定3.将servlet配置到web.xml文件中4.配置......
  • Tomcat常见问题总结,无法启动服务,无法访问,控制台乱码问题
    Tomcat无法启动,无法访问新下载的Tomcat,运行startup.bat后一闪而过,无法启动Tomcat服务。可能会有这样的效果可以在CMD窗口下进入Tomcat安装目录,运行startup可以看到报错......
  • Go语言错误总结(三)
    15、Strings无法修改尝试使用索引操作来更新字符串变量中的单个字符将会失败。string是只读的byteslice(和一些额外的属性)。如果你确实需要更新一个字符串,那么使用byteslic......