javaweb02

7.

1.继承关系

servlet的继承关系一重点查看的是服务方法( service(())

  javax.servlet.servlet接口

javax.servlet.Genericservlet抽象类

  javax.servlet.http.Httpservlet抽象子类

2.相关方法

javax.servlet.servlet接口:

   void init (config)-初始化方法

     void seryice (request,response)-服务方法

void destory ( )-销毁方法

javax.servlet.cenericservlet抽象类∶

   void service (request, response)-仍然是抽象的

javax.servlet.http.Httpservlet抽象子类:

   void service (request, response) -不是抽象的

1). string method = req.getMethod( );获取请求的方式

2). 各种if判断,根据请求方式不同,决定去调用不同的do方法

3). 在Httpservlet这个抽象类中,do方法都差不多

3.小结:

1)继承关系:Httpservlet -> Genericservlet -> servlet

2) servlet中的核心方法: init () , service () , destroy ()

3) 服务方法:当有请求过来时,service方法会自动响应(其实是tomcat容器调用的)|

    在Httpservlet中我们会去分析请求的方式:到底是get、post、head还是delete等等

    然后再决定调用的是哪个do开头的方法

      那么在Httpservlet中这些do方法默认都是405

        -要我们子类去实现对应的方法,否则默认会报405错误

4)因此,我们在新建servlet时,我们才会去考虑请求方法,从而决定重写哪个do方法

3. servlet的生命周期

1)生命周期:从出生到死亡过程就是生命周期,对应生命周期的三个方法init () , service () , destroy ()

2)默认情况下:

 第一次接收请求时,这个servlet会进行实例化(调用构造方法)、初始化(调用init())、然后服务(调用service())

从第二次请求开始,每一次都是服务

当容器关闭时,其中的所有的servlet实例会被销毁,

3) 通过案例我们发现: servlet实例tomcat只会创建一个,所有的请求都是这个实例去请求

默认情况下,第一次请求时,tomcat才会去实例化,初始化,然后再服务。

优点:是提高系统的启动速度。

缺点:第一次用户等待时间长

结论:如果需要提高系统的启动速度,当前默认情况就是这样。如果需要提高响应速度,我们应该设置servlet的初始化时机

500:服务器内部错误

4)servlet的初始化时机:

-默认是第一次接收请求时,实例化,初始化

-我们可以通过我们可以通过<load-on-startup>来设置servlet启动的先后顺序

数字越小,启动越靠前,最小值0

5)servlet在容器中是:单例的、线程不安全的

-单例:所有的请求都是同一个实例去响应

-线程不安全:一个线程需要根据这个实例中的某个成员变量值去做逻辑判断。但是在中间某个时机,,另一个线程改变了这个成员变量的值,从而导致第一个线程的执行路径发生了变似

-我们已经知道了servelt是线程不安全的,给我们的启发是:尽量的不要在servlet中定义成员变量。如果不得不定义成员变量,那么

1)不要去修改成员变量的

2)根据成员变量的值做一些逻辑判断

4.HTTP协议

1.HTTP : Hyper Text Transfer Protocol超文本传输协议。HTTP最大的作用就是确定了请求和响应数据的格式。浏览器发送给服务器的数据∶请求报文;服务器返回给浏览器的数据∶响应报文。

2. 1 ) Http称之为超文本传输协议

2 ) Http是无状态的

3 )Http请求响应包含两个部分:请求和响应

请求: 请求包含三个部分:

1.请求行; 作用?展示当前请求的最基本信息:请求方式,访问地址(URL),HTTP协议的版本

2.请求消息头; 作用:通过具体的参数对本次请求进行详细的说明

格式∶键值对,键和值之间使用冒号隔开

请求消息头中包含了很多客户端需要告诉服务器的信息,比如:我的浏览器型号、版本、我能接收的内容的类型、我给你发的内容的类型、内容的长度等等

3.请求主体

作用:作为请求的主体,发送数据给服务器。具体来说其实就是POST请求方式下的请求参数。

1)get方式,没有请求体,,但是有一个queryString

2)post方式,有请求体,form data

3)json格式,有请求体,request payload

-响应

200 : 正常响应

404:找不到资源

405 :请求方式不支持

500 :服务器内部错误

1)响应状态行

1.协议2.响应状态码(200)3.响应状态(ok)

2)响应消息头

包含了服务器的信息;服务器发送给浏览器的信息(内容的媒体类型、编码、内容长度等)|

3)响应体,

:响应的实际内容(比如请求add.html页面时,响应的内容就是<html><head><body><form....)

5.会话

1) Http是无状态的

HTTP无状态∶服务器无法判断这两次请求是同一个客户端发过来的,还是不同的客户端发过来的

无状态带来的现实问题: 第一次请求是添加商品到购物车,第二次请求是结账;如果这两次请求服务器无法区分是同一个用户的,那么就会导致混乱

通过会话跟踪技术来解决无状态的问题

2)会话跟踪技术

客户端第一次发请求给服务器,服务器获取获取session,获取不到,则创建新的,然后响应给客户端

下次客户端给服务器发请求时,会把sessionID带给服务器,那么服务器就能获取到了,那么服务器就判断这一次请求和上次某次请求是同一个客户端,从而从而能够区分开客户端

常用API

request.getsession ->获取当前的会话,没有则创建一个新的会话

request.getsession(true) ->效果和不带参数相同

request.getsession(false)->获取当前会话,没有则返回null,不会创建新的

session.getId() ->获取sessionID

session.isNew() ->判断当前session是否是新的

session.getMaxInactiveInterval()->session的激活间隔时长,默认1800

session.setMaxInactiveInterval()

session.invalidate()->session强制性让会话立即失效

3) session保存作用域

session保存作用域是和具体的某一个session对应的

常用的API :

session.setAttribute(k, v)

object session.getAttribute (k)

void removeAttribute (k)

6.服务器内部转发以及客户端重定向

1)服务器内部转发:request.getRequestDispatcher(". . ." ). forward(request,response);

一次请求响应的过程,对于客户端而言,内部经过了多少次转发,客户端是不知道的

2)客户端重定向:response.sendRedirect (". . ..") ;

两次请求响应的过程。客户端肯定知道请求URL有变化

地址栏有变化

7.Thymeleaf-视图模板技术

在index.html页面上加载java内存中的fruitList教据这个过程我们称之为渲染(render)

thymeleaf是用来帮助我们做视图渲染的一个技术

  1. 添加thymeleaf的jar包

2)新建一个servlet类viewBaseservlet

3)在web. xml文件中添加配置

-配置前缀view-prefix

-配置后缀view-suffix

4)使得我们的servlet继承viewBaseservlet

/逻辑视图名称∶index

//物理视图名称∶view-prefix +逻辑视图名称+ view-suffix

5)根据逻辑视图名称得到物理视图名称

//此处的视图名称是index

//那么thymeleaf会将这个逻辑视图名称对应到物理视图名称上去

//逻辑视图名称:index

//物理视图名称: view-prefix +逻辑视图名称+ view-suffix

//所以真实的视图名称是∶ /   index       .html

super.processTemplate ( "index" , request,response) ;

6)使用thymeleaf的标签

th:if, th:unless, th:each,th:text

8.

  1. 保存作用域

原始情况下,保存作用域我们可以认为有四个∶page (页面级别现在几乎不用) , request (一次请求响应范围), session (一次会话范围), application(整个应用程序范围)

1 ) request :一次请求响应范围

2)session :一次会话范围有效

3 ) application :一次应用程序范围有效

'servletcontext : servlet上下文

2.路径问题

1)相对路径

2)绝对路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是秀秀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值