java servlet 和http_【JavaWeb】Servlet和HTTP请求协议

servlet:server applet

概念:运行在服务器端的小程序

Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则

将来我们自定义一个类,实现Servlet接口,复写方法

快速入门:

1.创建Java EE项目

2.定义一个类,实现Servlet接口

public class ServletDemo01 implements Servlet

3.实现接口中的抽象方法

4.配置Servlet

demo1

cn.sytest.web.servlet.ServletDemo01

demo1

/demo1

执行原理:

1.当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径。

2.查找web.xml文件,是否有对应的标签体内容

3.如果有,则在找到对象的全类名

4.tomcat会将字节码文件加载进内存,并且创建其对象

5.调用其方法

Servlet中的生命周期:

1.被创建:执行init方法,只执行一次

Servlet什么时候被创建?

默认情况下,第一次被访问时,Servlet被创建

可以配置执行Servlet的创建时机。

在标签下配置

1.第一次被访问时,创建

的值为负数

2.服务器启动时,创建

的值为0或正整数

Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的

多个用户同时访问时,可能存在线程安全问题

解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要修改值

2.提供服务:执行service方法,执行多次

每次访问Servlet时,service方法都会被调用一次

3.被销毁:执行destroy方法,执行一次

Servlet被销毁时执行。服务器关闭时,Servlet被销毁

只有服务器正常关闭时,才会执行destroy方法。

destroy方法在Servlet被销毁之前执行,一般用于资源释放

Servlet3.0

好处:支持注解配置。可以不需要web.xml了。

步骤:

1.创建javaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml

2.定义一个类,实现servlet接口

3.复写方法

4.在类上使用@WebServlet注解,进行配置

@WebServlet("资源路径")

import java.lang.annotation.Documented;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Target({ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface WebServlet {

String name() default "";

String[] value() default {};

String[] urlPatterns() default {};

int loadOnStartup() default -1;

WebInitParam[] initParams() default {};

boolean asyncSupported() default false;

String smallIcon() default "";

String largeIcon() default "";

String description() default "";

String displayName() default "";

}

IDEA与tomcat的相关配置

1.IDEA会为每一个tomcat部署的项目单独建立一份配置文件

查看控制台的log:Using CATALINA_BASE:

2.工作空间项目 和 tomcat部署的web项目

tomcat真正访问的是“tomcat部署的web项目”,“tomcat部署的web项目”对应着“工作空间项目”的web目录下的所有资源

WEB-INF目录下的资源不能被浏览器直接访问

3.断点调试:使用“小虫子”启动debug

Servlet的体系结构

Servlet -- 接口

|

GenericSevlet -- 抽象类

|

HttpServlet -- 抽象类

GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象

将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可

HttpServlet:对http协议的一种封装,简化操作

1.定义类继承HTTP Servlet

2.复写doGet/doPost方法

Servlet相关配置

1.urlpartten:Servlet访问路径

1.一个Servlet可以定义多个访问路径:@WebServlet({"/d4","dd4","ddd4"})

2.路径定义规则

1./xxx

2./xxx/xxx

3.*.do

HTTP

概念:

传输协议:定义了客户端和服务器端通信时,发送数据的格式

特点:

1.基于TCP/IP的高级协议

2.默认端口号:80

3.基于请求/响应模型:一次请求对应一次响应

4.无状态的:每次请求之间相互独立,不能交互数据

历史版本:

1.0:每次请求响应都会建立新的连接

1.1:复用连接

请求消息的数据格式

1.请求行

请求方式 请求url 请求协议/版本

GET login.html http/1.1

请求方式:

GET:

1.请求参数在请求行中,在url后。

2.请求的url长度有限制

3.不太安全

POST:

1.请求参数在请求体中

2.请求的url长度没有限制

3.相对安全

2.请求头

请求头名称:请求头值

常见的请求头:

1.User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息

可以在服务器端获取该头的信息,解决浏览器的兼容性问题

2.Referer:

告诉服务器,当前请求从那里来

作用:

1.防盗链

2.统计工作

3.请求空行

空行

4.请求体(正文)

封装POST请求消息的请求参数的

字符串格式:

GET /day06_servlet_war_exploded/login.html HTTP/1.1

Host: localhost:8080

Connection: keep-alive

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值