Java Servlet 总结

Servlet 简介

Servlet 是什么?

运行在Web服务器上的应用程序,作为浏览器和服务器之间的中间层。
与CGI功能类似,优点在于

性能更好
在Web服务器的地址空间中运行,不会为每个客户端请求创建一个新的进程
*平台独立,可用Java类库

Servlet 架构

Servlet 任务

  • 读取客户端发送的显式数据。(http表单等)
  • 读取隐式数据, 比如cookies
  • 处理数据产生结果
  • 发送显式 隐式数据

Servlet 生命周期

  • 通过init() 初始化
  • service() 处理用户请求

    收到请求检查方法类型,调用对应的方法。

  • destroy() 终止
  • 垃圾回收器回收

注意desroy() 销毁之后并不会立即被垃圾回收。

Servlet 编写过滤器

Servlet过滤器可以动态地拦截请求和响应,可以在拦截客户端和服务器端之间交互的信息。通过urlpattern来指定拦截的服务。过滤器中我们可以根据 doFilte() 方法中的 request 对象获取表单参数信息,例如我们可以获取到请求的用户名和密码进行逻辑处理,也可以通过 response 对用户做出回应。比如如果验证用户名不正确,禁止用户访问 web 资源,并且向浏览器输出提示,告诉用户用户名或者密码不正确等等。

Servlet 异常

Servlet Session

Servlet Cookie

Servlet 工作原理解析

从Servlet 容器说起

Servlet 和 Servlet 容器密不分可,通过接口进行连接。在Tomcat的容器等级中,Context 容器直接管理Servet 在 容器中的包装类wrapper,一个Context 对应一个web app。

Servlet 容器的启动过程

将Servlet包装后作为自容器添加到Context 中,其他的web.xml 属性解析到Context 容器中,
初始化 Servlet 调用其init 方法,

Servlet 体系结构

Tomcat 创建的 response 和 request 都是轻量级对象易于回收,接下去当交给一个用户线程去处理这个请求时又创建 Request 和 Response 对象。这两个对象一直穿越整个 Servlet 容器直到要传给 Servlet,传给 Servlet 的是 Request 和 Response 的门面类 RequestFacade 和 RequestFacade,这里使用门面模式与前面一样都是基于同样的目的——封装容器中的数据。

Servlet 如何工作

当用户从浏览器发起一个请求,通过tomcat 的 Mapper 找到对应的 Wrapper, 通过Filter 调用对应的service()。

Session/Cookie 的区别

Session 是服务器端保存的一个数据结构,用来跟踪用户的状态。
Cookie 是客户端保存用户信息的机制,也是实现Session的一种方式,服务器端将Session保存后给一个Session ID 让客户端存在cookie 里面。

Session 和 Cookie

Servlet 能够提供的信息

  • 初始化调用init的时候设置的ServletConfig
  • 通过RequestFacade 获取请求中的HTTP信息。

Cookie 和 Session 的作用都是为了保持前后端的交互状态。

JAVA JSP 总结

JSP 技术是以 Java 语言作为脚本语言的,JSP 网页为整个服务器端的 Java 库单元提供了一个接口来服务于HTTP的应用程序。

JSP 简介

什么是 JSP

使用jsp标签 在HTML 中插入java 代码,主要负责MVC 中的View层。

JSP 处理

服务器识别出队jsp 的请求,将请求传递给JSP引擎
载入jsp 文件 ,然后转化为Servlet
将Servlet 编译成可执行类
Web服务器的组件调用Servlet引擎,载入并且执行对应的Servlet类。
返回动态产生的HTML

JSP 生命周期

  • 编译阶段 产生Servlet类
  • 初始化阶段 创建实例 调用初始化方法
  • 执行阶段 调用Servlet的服务方法
  • 销毁阶段

JSP 编译

如果没有被编译过,那么解析->转化->编译

Java Web 总结的更多相关文章

  1. 高效 Java Web 开发框架 JessMA v3.5.1

    JessMA 是功能完备的高性能 Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和 DAO 数据库访问组件(内部已提供了 Hibernate.MyBatis 与 J ...

  2. 高效 Java Web 开发框架 JessMA v3.4.1

    JessMA 是功能完备的高性能 Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和 DAO 数据库访问组件(内部已提供了 Hibernate.MyBatis 与 J ...

  3. java web 之客户关系管理系统

    这个周末真的是觉得自己学会了一个比较高大上的本领,为什么这么觉得呢?那是因为星期六的时候觉得自己可以看看源码能做出来,可是让我头疼的是花费了一上午的时间还是没有弄出来,还好上天给了我机会,要是没有老师 ...

  4. Java Web中的中文编码

    Java Web开发中经常会遇到中文编码问题,那么为什么需要编码呢?因为人类需要表示的符号太多,无法用1个字节来表示,而计算机中存储信息最小单元为1个字节.所以必须指定char与byte之间的编码规则 ...

  5. java web后台开发SSM框架(Spring+SpringMVC+MyBaitis)搭建与优化

    一.ssm框架搭建 1.1创建项目 新建项目后规划好各层的包. 1.2导入包 搭建SSM框架所需包百度云链接:http://pan.baidu.com/s/1cvKjL0 1.3整合spring与my ...

  6. JAVA WEB项目中各种路径的获取

    JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报  分类: JAVA开发(41)  1.可以在s ...

  7. JAVA WEB WITH IDEA

    本文主要介绍使用IDEA开发环境,创建JAVA WEB 工程,并介绍war包的制作过程. 1 创建MAVEN工程

  8. java WEB开发入门

    WEB开发入门 1 进入web JAVASE:标准- standard   JAVA桌面程序 GUI    SOCKET JAVAEE:企业-浏览器控制  web 2 软件结构 C/S :client ...

  9. Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用

    问题:Jenkins 2.16.3默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的. 如何设置才能让出来呢? 打开&quo ...

  10. 5款强大的Java Web开发工具

    1.WebBuilder这是一款开源的可视化Web应用开发和运行平台.基于浏览器的集成开发环境,采用可视化的设计模式,支持控件的拖拽操作,能轻松完成前后台应用开发:高效.稳定和可扩展的特点,适合复杂企 ...

随机推荐

  1. jquery 实现 点击把数据移动右侧 点击再次移回到左侧

    2018年第一发  希望新的一年和大家一下学习更多知识    JS://把数据左边挪到了右边,再从右边移动回来function moveOption(e1, e2){   $("#" ...

  2. css中border制作各种形状

    css利用border制作各种形状的原理如图: 使用border绘制三角形是什么原理?事实上,宽度相等的border是以45度对接的,如下图: 没有了上border如图所示: 再设置border的宽度 ...

  3. Thinkphp删除缓存

    控制器代码   public function delcache(){ //当找到有Runtime的文件夹时,进入if if(is_dir(RUNTIME_PATH)){ delDir(RUNTIME ...

  4. es6核心特性-数组扩展

    1. Array.from() : 将伪数组对象或可遍历对象转换为真数组 如果一个对象的所有键名都是正整数或零,并且有length属性,那么这个对象就很像数组,称为伪数组.典型的伪数组有函数的argu ...

  5. git ---匿名分支和checkout命令

    git checkout -b   //创建一个匿名分支

  6. 掌握Spark机器学习库-06-基础统计部分

    说明 本章主要讲解基础统计部分,包括基本统计.假设检验.相关系数等 数据集 数据集有两个文件,分别是: beijing.txt 北京历年降水量,不带年份 beijing2.txt 北京历年降水量,带年 ...

  7. ES6语法糖集锦

    sublime3安装Es6插件 javascriptNext,然后安装即可 Java​Script​Next - ES6 Syntax()高亮插件 -------------------------- ...

  8. leetcode_894. All Possible Full Binary Trees

    https://leetcode.com/problems/all-possible-full-binary-trees/ 给定节点个数,求所有可能二叉树,该二叉树所有节点要么有0个子节点要么有两个子 ...

  9. ALTER DATABASE 修改一个数据库

    SYNOPSIS ALTER DATABASE name SET parameter { TO | = } { value | DEFAULT } ALTER DATABASE name RESET ...

  10. php 阿里云短信验证码

    阿里云短信服务:https://dysms.console.aliyun.com 1.准备 1.1.创建签名.模板 1.2.创建.使用阿里云秘钥 地址:https://usercenter.conso ...