JavaWeb学习笔记

目录

一、后端接收请求的本质

二、Servlet的生命周期

三、Session会话

1、Session的作用就是用于标识不同的客户端,避免请求混淆。

2、session保存作用域和session实例是相互绑定的

四、服务器内部转发和客户端重定向

服务器内部转发

客户端重定向

五、Thymeleaf:网页中渲染数据的Java模板引擎

thymeleaf与前后端分离的异曲同工之处

六、从Servlet底层到框架

总体概述

各阶段详细过程


一、后端接收请求的本质

servlet接口中定义了service方法,它可以自动根据不同的请求方法(GET/POST等)调用doGet、doPost等方法。

具体过程:

1)客户端发送HTTP请求,这个请求会被Tomcat等的容器接收

2)容器根据请求的URL寻找对应的servlet并通过反射的方法实例化servlet,举例:接收/add请求,通过反射找到servlet中的AddServlet,由此找到AddServlet类对象

    <servlet>
        <servlet-name>AddServlet</servlet-name>
        <servlet-class>com.xubx.servlet.AddServlet</servlet-class>
    </servlet>
    <!--反射:mapping -->
    <servlet-mapping>    
        <servlet-name>AddServlet</servlet-name>
        <url-pattern>/add</url-pattern>
    </servlet-mapping>

3)tomcat容器调用Servlet的service()方法,service会调用对应的doGet、doPost方法

4)处理结束后,需要通过响应对象设置响应状态码、响应头、响应体等信息

5)tomcat容器获取到响应信息,将其打包成HTTP响应报文返回给客户端

二、Servlet的生命周期

Servlet的生命周期有三个:初始化阶段(init)-->服务阶段(service)-->销毁阶段(destroy)

其中服务阶段可以重复进行多次,初始化和销毁只执行一次。

单例中线程不安全:

三、Session会话

1、Session的作用就是用于标识不同的客户端,避免请求混淆。

HTTP协议本身是无状态的,每次请求对服务器独立,无法区分不同客户端。

服务器需要一种机制识别不同客户端,以保证各客户端请求不混淆。

当客户端第一次请求时,服务器会创建一个唯一标识的session对象给客户端,客户端之后的每次请求都会带上这个session,服务器通过Session ID来判断请求属于哪个客户端,这样就能防止请求混乱。

2、session保存作用域和session实例是相互绑定的

session保存作用域与每个session绑定,不同浏览器访问的session区域是隔离的

即每个浏览器只能访问对应自己那个session的存储数据,它们之间是隔离的,确保了数据只在指定的客户端中可见,不会互相影响。

四、服务器内部转发和客户端重定向

服务器内部转发

只有一次响应的过程,对于客户端而言,内部经过了多少次转发,客户端是不知道的,并且url不会改变。

客户端重定向

两次请求响应的过程,即客户端重新向另一个接口发送请求

五、Thymeleaf:网页中渲染数据的Java模板引擎

Tymeleaf是用于渲染页面的,即 将后端数据显示在前端页面上,实现了前后端的解耦后端只需要传入数据模型,页面渲染的工作完全交给Thymeleaf来完成。

thymeleaf与前后端分离的异曲同工之处

1. Thymeleaf仍属于后端渲染页面的一种实现,需要后端服务器支持。纯前后端分离是前端直接请求后端接口,不依赖服务器渲染。

2. Thymeleaf通过模板使前端代码更少,开发效率更高。纯分离前端需要自行处理渲染逻辑。

3. Thymeleaf可以避免前端直接操作后端接口的安全隐患。

4. 但Thymeleaf也依赖后端部署,不如纯前后端分离对前后端代码解耦度高。

六、从Servlet底层到框架

总体概述

1. 最初阶段,一个请求对应一个Servlet类,类数量爆炸。

2. 后期阶段,合并请求到一个总Servlet类中,通过operate参数区分请求,使用switch-case选择方法,代码混乱。

3. 再后期阶段,使用反射技术,operate的值直接映射到方法名,简化代码。

4. 最后阶段,引入中央控制器DispatcherServlet,根据url找Controller,operate映射方法,实现请求转发和业务解耦。

Controller的处理也分为获取参数、执行方法、视图处理等步骤。

整个过程体现了软件开发从单一到复杂再到简洁抽象的过程,逐步降低耦合,提高内聚和扩展性。

各阶段详细过程

最初阶段:一个请求对应一个IndexServlet,AddServlet等类,

Url请求为:index.do,add.do,edit.do等等


下一阶段,全部集中在一个中心FruiltServlet接收请求的类中,(根据url中携带的operate的值来选择调用方法)请求为统一的:fruilt.do再加一个同意参数operate=add,edit等等

总结:将各AddServlet等类抽离到一个中心FruiltServlet服务类中,由中心服务类进行各功能的调用,各方法只执行对应的功能。


下一阶段,将中心类改为控制类FruiltController不再接受请求,由统一接收请求的DispathcherServlet类中央控制器进行管理。此中央控制器接受的请求为:fruilt.do,hello.do等等,再通过xml配置文件找到对应的控制类FruiltController,HelloController。

总结(抽离controller组件中的方法调用):将fruiltServlet服务类改成控制类并抽离到DispathcherServlet服务类中,抽离了调用方法的功能,直接在中央控制器中进行调用控制类中的方法,控制类中只保存方法,进一步完善各方法中只进行业务的处理。


下一阶段,将Controller中的视图处理和获取参数抽离出来,即不在Controller中进行页面的跳转、重定向和参数的获取,在中央控制器中进行视图处理和参数获取,此时已经完成在各方法中只进行业务的处理。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Xubx

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

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

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

打赏作者

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

抵扣说明:

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

余额充值