通过jetty 重新理解 web服务器工作原理

背景

只有真正明白了java web 服务器运行机理 ,才能 对各种web服务器 的问题处理得心应手. python java 的web服务器工作原理是一样的.

关键三点:

  1. web项目所需的对象:

    1)servlet程序 ,被java编译后的可被jvm调用的 类 *.class
    通常servlet filter listener 都是被编译成了.class 文件
    注意:java 编译文件的输出目录是可以配置的(build path)

    2)web项目路径 包含了静态文件,和类文件
    静态文件和目录:
    包含 .css .html .js .txt文件 .xml.json.配置文件/上传下载文件和图片,.jsp文件等
    注意:
    静态资源文件无须java编译, 而交给web服务程序动态调用
    jsp 文件要交给web程序编译成.class 后才能被javajvm调用

     类文件:
     1) 是预先编译的servlet.class文件 ;
     2) web服务器启动以后, 有web服务程序动态编译的 xxxx_jsp.class文件 
    

    3)web服务程序(tomcat netty jetty )
    主要负责监听新连接,解析请求,路由到指定的处理程序文件或资源文件;

  2. web服务器工作机制

    1)[必须]专有核心配置文件加载
    设置web工程绝对路径
    设置web工程的类文件绝对路径
    (类文件:.class结尾的文件,以及后期动态编译jsp后生成的.class文件存放的目录)
    设置web工程的虚拟目录

    2)[必须]开启网络监听程序
    监听不同的ip地址和端口

    3)[可选]到指定目录加载web.xml

    4)[可选]class反射加载,注解解析
    加载 .class文件
    解析注释,实例化后依次加载到内存池

    5)[可选]jsp文件加载动态编译
    当客户端访问.jsp文件路径时,如果相关的_jsp.class文件不存在,就动态编译jsp文件生成.class文件

    6)[可选]访问静态文件
    所有文件原则上都可以被直接访问,
    但是 不同的子程序(handler) 会对不同的目录和后缀名文件进行处理
    普通的资源,按照default程序,会被放过
    一般只会对 .class jsp等后缀文件被解析和处理
    但也有对静态文件进行保护的情况,就要单独写过滤程序

    注意:web服务程序是独立的程序 .可以加载servlet和 web目录

  3. 多线程 socket工作的意义

    1. 多线程监听 指定ip和端口,连接
    2. 解析请求数据
    3. 应答
    4. 断开连接
  4. web程序编译执行过程的 虚拟路径、源文件绝对路径和编译路径

    1)以jsp为例
    虚拟路径: http://xxxx.xx.com:8080/jsp/kk.jsp
    源文件绝对路径: d:/web/webapp/jsp/kk1.jsp
    动态编译路径:d:/web/webapp/web-inf/classes/jsp/kk1_jsp.class
    访问上述的虚拟路径实际指向编译路径

    2)不仅仅是jsp文件,java文件也是这样玩
    虚拟路径: http://xxxx.xx.com:8080/jsp/kk
    源文件绝对路径: e:/某某项目/src/main/java/org/control/kkcc.java
    编译后放置路径: d:/web/webapp/web-inf/classes/cc/kkcc.class
    上述两种情况都是: 虚拟路径 被web程序 路由到了编译路径
    ,访问的不是绝对路径的文件 而是编译路径的文件.

    3)还有资源文件也可以这样玩
    虚拟路径: http://xxxx.xx.com:8080/jsp/pp.css?tm=219850320030
    源文件绝对路径: d:/web/webapp/jsp/pp.css
    编译路径: 无

    这里不访问编译路径了
    但是可以通过程序在访问前进行拦截, 允许或禁止访问,或者跳转到登录页面.
    所以在浏览器访问的虚拟路径,实际被web程序路由到了各个地方进行处理.

如何看懂jetty

  1. 关键字 : servletContext 加载web服务程序核心配置有关
  2. 关键字 : handler 监听后的处理子程序后缀
  3. 关键字: ClassLoader|Resource| path 与路径设置有关
  4. 关键字: xml 与配置有关
  5. 关键字: Scanner 与注解有关
  6. 关键字: connector 与socket网络服务有关
  7. 关键字: jsp|Servlet 与servlet 有关
  8. 关键字: InitParameter 与servlet参数有关

总结

通过netty 明白了 网络监听程序和 连通后的分布处理程序 handler
一般 分布处理子程序,在主程序预先配置好,
等待连接成功后,分别调用.

通过tomcat 认识到了servlet 的生命周期, jsp工作原理和生命周期

通过jetty 认识到 分布程序如何调用 jsp解析程序 和servlet组件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值