今天给内部做了个培训,貌似搞错了对象,不该对新人讲这么原理性的东西。

anyway,还是放上来吧,不知道有没有人能理清其中的逻辑 ^ _ ^


问题:为什么要用tomcat
tomcat: servlet container
servlet + container

web的基础是什么?
网络编程:链接、数据
  链接:Socket/ServerSocket
  数据:InputStream/OutputStream Stream
数据是什么?网络中传输的Bits!
但是,Bits不是我们想要的,我们想要的是信息Information!
  Information是什么?Bits + Context! CSAPP
web编程的Context是什么?
  TCP、UDP...
但是,这只是最底层面的!
  TCP、UDP等协议本身是为了传输数据
怎么解读?还是Context!
  HTTP!

所以,java web 网络编程就是:创建链接,然后按照HTTP协议格式来解析那些由用TCP协议传输的数据!务必理解这个。
所以,必须熟悉HTTP协议的格式!

  是<html>...</html>吗?
  NO!
这只是HTTP协议中的body部分!务必理解这个。

问题来了:每次都要自己负责链接,累不累?还得考虑并发负载等优化,需要足够专业的知识才行。
Java编程的特点是什么?让专业的人负责专业的事!
于是JavaEE社区提出了Servlet + Servlet Container的概念。
Servlet负责业务逻辑,而Servlet Container负责资源的申请、释放,请求的路由等功能!分工明确,可以更专注于自己的部分。

此外,还有Filter、Listener的概念,这是因为容器的特性而出现的!

容器服务器、app server、web server       APACHE cgi

ServletContextLoaderListener、RequestAttributeListener

既然容器负责了链接、路由等功能,那完全可以在项目加载之前或之后、Servlet加载之前或之后、链接创建之后、路由之前或之后等生命周期的不同阶段进行不同的处理。这非常有用,可以更简洁的实现一些需求 - 类似于创建对象时执行的构造方法、静态代码块、动态代码块等情况。另外,Spring的bean也有类似的生命周期。

对了,还有JSP,为什么还需要这个呢?
因为Servlet中要返回什么页面是很麻烦的,使用字符串来拼接html语句。
JSP就简单的多,但实际上,最后它还是被转成servlet的class文件,不同的是,里面要输出的内容都已经由容器帮你转成了字符串。
就是说,这是一种帮你简化Servlet返回html内容的技术。

问题又来了:既然有了Servlet、Servlet Container,为什么还有Struts、Spring MVC等框架?
这是因为Servlet只有最基础的功能,更深层次的需求就需要用户自己去实现,包括同步异步处理、编解码、参数/实体类对象之间的转换、国际化等功能。

Struts的核心类是什么?web.xml PreparexxxxFilter Action 多例
Spring MVC的核心类是什么?web.xml DispatcherServlet url-mapping /** 单例

为什么要有自己的核心类?
为什么二者是不同的? - Struts的核心类能否换成类似SpringMVC的?

Java Web知识梳理的更多相关文章

  1. java基础知识梳理

    java基础知识梳理 1 基本数据类型

  2. 新手上路---Java学习知识梳理

    我随笔 我相信也有那么一些人跟我一样,脱下军装后对未来感到迷茫,不知所措甚至怀疑起自己的能力,自身体会的经历过才能明白其中的辛酸!归咎一切:心态,信心,自信!再穷不过乞讨,不死终将出头.好了,闲言碎语 ...

  3. 《面试补习》- Java集合知识梳理

    一.ArrayList ArrayList 底层数据结构为 动态数组 ,所以我们可以将之称为数组队列. ArrayList 的依赖关系: public class ArrayList<E> ...

  4. Java基础知识梳理《一》

    一.Java数据类型(简单称之为“四类八种”) java 基本的数据类型长度都是固定的,好处是在实现跨平台时就统一了. 1.整型 byte short int long (分别是1,2,4,8个字节) ...

  5. Java简单知识梳理

    1. Java是单根继承结构:每个类都继承于Object类 ,这也就保证了每个对象都具备某些功能 2. Java类权限关键字: public -> protected -> default ...

  6. 02 CTF WEB 知识梳理

    1. 工具集 基础工具 Burpsuit, Python, FireFox(Hackbar, FoxyProxy, User-Agent Swither .etc) Burpsuit 代理工具,攻击w ...

  7. Java web MVC开发模式入门感悟

    当我进行第一个完整的java web项目的开发时,对以前所学的Java web知识体系有了一个清晰的进阶认识.我觉得非常有必要对此进行必要的总结. MVC,意指model(数据持久层)+viewer( ...

  8. java web开发必备知识

    从各种招聘网站的要求上筛选出了一些java开发的一些基本的要求,对照自身看看有哪些缺陷. java基础 既然是java web开发,java SE肯定要学好了. 多线程,IO,集合等,对队列,缓存,消 ...

  9. Java web 入门知识 及HTTP协议详解

     Java  web  入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...

随机推荐

  1. 开发中遇到的一些mongoose的问题

    save方法,这个方法可以用来创建新的文档,也可以用来修改已有文档 1,save创建新文档 var Tank = mongoose.model('Tank', yourSchema); 2 var s ...

  2. (原创)舌尖上的c++--相逢

    引子 前些时候,我在群里出了一道题目:将变参的类型连接在一起作为字符串并返回出来,要求只用函数实现,不能借助于结构体实现.用结构体来实现比较简单: template<typename... Ar ...

  3. Zen Coding)官方文档 一览表

    语法 Child: > nav>ul>li <nav> <ul> <li></li> </ul> </nav> ...

  4. 【Java】Java日志框架Logback的简单例子

    常用的日志框架 SLF4J,全称Simple Logging Facade for Java,即Java简单日志外观框架,顾名思义,它并非具体的日志实现,而是日志外观框架 java.util.logg ...

  5. vim 配色(mac)

    1.进入当前用户目录,新建 .vimrc ,并加入如下内容: cd / vim .vimrc 2.开启行号 选择颜色 #开启行号 set nu #选择颜色 colorscheme desert syn ...

  6. 【JavaScript】脚本

    javascript: void((function() { var as = document.getElementsByTagName('a'); for (var i = 0, j = as.l ...

  7. ParseUrl

    #!/usr/bin/python # coding:utf-8 import re import urlparse # 解析url def ParseUrl(url): if not re.sear ...

  8. JAVA-JSP内置对象之request获得所有的参数名称

    相关资料:<21天学通Java Web开发> 获得所有的参数名称1.request对象的getParameterNames()方法可以获得所有的参数名称. RequestForm2.jsp ...

  9. SVD分解及线性最小二乘问题

    这部分矩阵运算的知识是三维重建的数据基础. 矩阵分解 求解线性方程组:,其解可以表示为. 为了提高运算速度,节约存储空间,通常会采用矩阵分解的方案,常见的矩阵分解有LU分解.QR分解.Cholesky ...

  10. iOS App中第一次运行添加半透明新手指引

    实现方式: 在当前View上一个蒙层,然后找出需要标记的地方圈为白色,那些箭头和提示文字都是UI做出来的图上自带的. 代码: 判断是第一次运行APP后进入页面调用 -(void)newGuide { ...