Servlet

作者: 哓晓的故事 | 来源:发表于2019-01-14 14:47 被阅读0次
  1. Web容器(web container)和Web服务器(web server)的区别
    web server:接受客户端的http请求/响应,处理或者转发请求,所有的资源都是静态的(如果react一个文件8个分支,就会生成8个静态html文件,但是在java就还是一个文件
    nginx、apache、squid
    web container:是一种架构/框架上的概念,隔离了servlet和通信协议层面
    tomcat(运行在apache上)、weblogic、jetty

如果客户端请求动态页面,则是Tomcat服务器响应请求,将解析的JSP等网页代码解析后回传给Apache服务器,再经Apache返回给浏览器端
这是因为jsp是服务器端解释代码的,Tomcat只做动态代码解析Apache回传解析好的静态代码,Apache+Tomcat这样整合就可以减少Tomcat的服务开销
Tomcat只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行
当客户端需要请求静态资源,只需要Apache服务器响应请求
当客户端需要动态资源,如JSP,需要Tomcat服务容器(Tomcat可以将JSP解析为Servlet)

  1. Servlet的生命周期
    每个servlet在web容器中只会有一个实例,且只会initdestroy一次
初始化(init)->执行(service)->销亡(destroy)
请求调用.png
每个init的servlet都会获取一个ServletConfig,从中可以获取ServletContextinitParameters
整个Web应用中只有一个ServletContext
  1. 一次http请求的流程
web服务器 -> web容器 -> servlet(ServletRequest/ServletResponse) -> business
  1. 每个请求,在web容器都会生成一个线程去处理,而每个线程都需要绑定一个localPort
  2. forward请求分派(不会改变URL,在服务器发生),sendRedirect重定向(会改变URL,在客户端发生)
  3. 上下文context,会话session,请求request
在一个分布式web应用中
context和config是复制在每个节点
session是通过钝化平移来实现的

会话session:web容器在接收到用户的第一个请求时,会生成一个会话session及唯一的sessionId,后续每次客户端请求都会带上sessionId,容器就能找到对应的session。以上的逻辑都封装在request.getSession()方法里

通过cookie进行传递,Cookie: JSESSIONID=XXXX,cookie是服务端和客户端交换的一小段数据,用户不需要介入自动交换,一般cookie存活的时间和session一样长久

session-timeout全局设置会话的超时时间(可以针对每个session设置自定义的超时时间),在指定时间内会话没有任何请求,会自动消亡

不过有时候浏览器会禁止cookieresponse.encodeURL(/xx.do)或者response.encodeRedirectURL(/xx.do)这时候重新URL最尾部加上;jsessionId=XXXX来传递

  1. 安全 = 认证 + 授权 + 机密性 + 数据完整性

认证:
BASIC 基础认证 -> Base64安全性弱,HTTP规范
DIGEST 摘要认证 -> 非SSL安全性强一点,HTTP/J2EE规范
FORM 表单认证 -> 自定义登录窗口,安全性弱,J2EE规范(启用了cookie或者SSL会话跟踪使用)
CLIENT-CERT 证书认证 -> 公钥(PKC)安全性强,J2EE规范
授权:
机密性/安全性:
使用TCP + SSL = HTTPS在传输层上加上安全通道,保证传输过程中的数据不会被窃听和修改(机密性

  1. 过滤器
    client -> web服务器 -> web容器 -> 过滤器filter -> servlet
    request请求过滤器:
  • 认证/授权
  • 追加/修改请求流header和body
  • 建立审计或者日志
    response响应过滤器:
  • 压缩
  • 追加/修改响应流header和body
FilterChain 中 doFilter() 是明确调用下一个谁的filter.doFilter(FilterChain)
Filter 中 doFilter(FilterChain) 是进行过滤后调用filterChain.doFilter()
-- 同理
ProxyChain 中 doProxy() 是明确调用下一个谁的proxy.doProxy(ProxyChain)
Proxy 中 doProxy(ProxyChain) 是进行过滤后调用proxyChain.doProxy()
  1. 包装器 Wrapper
    使用装饰器模式ServletRequestWrapperHttpServletRequestWrapperServletResponseWrapperHttpServletResponseWrapper 提供装饰,而满足压缩等功能

相关文章

  • servlet 笔记

    servlet servlet 声明周期 Servlet 的线程安全 Servlet 获取配置信息 Servlet...

  • Servlet

    Servlet介绍 Servlet开发步骤 创建Servlet 配置Servlet 配置Servlet中设置初始化...

  • 深入理解Servlet技术

    1. 什么是servlet servlet Servlet是javax.servlet.Servlet包中定义的一...

  • Servlet与Jsp(1)

    Servlet 实现原理Servlet接口使Servlet容器能将Servlet类载入内存,并在Servlet实例...

  • web.xml不同版本之间头信息的区别

    一、Servlet 2.3 二、Servlet 2.4 三、Servlet 2.5 四、Servlet 3.0 五...

  • Servlet入门

    Servlet简介 Servlet(Servlet Applet)是Java Servlet的简称,称为小服务程序...

  • Servlet 实例

    Servlet 实例 Servlet 是服务 HTTP 请求并实现 javax.servlet.Servlet 接...

  • Java Servlet API

    Servlet 支持的版本 Servlet 3.0 新特性详解 Servlet 3.0 新特性概述Servlet ...

  • 简单认识Servlet

    Servlet与JSP的关系 初识Servlet Servlet层级关系 顶层Servlet接口 GenericS...

  • 2019-10-14 SpringMVC与Servlet接口 S

    SpringMVC与Servlet接口 Servlet接口规范 Servlet 接口 定义servlet接口规范i...

网友评论

      本文标题:Servlet

      本文链接:https://www.haomeiwen.com/subject/qpoddqtx.html