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

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. 破解AI大脑黑盒迈出新一步!谷歌现在更懂机器,还开源了研究工具

    https://zhuanlan.zhihu.com/p/34306323 https://distill.pub/2018/building-blocks/

  2. Java数据库连接池实现原理

    一般来说,Java应用程序访问数据库的过程是: 装载数据库驱动程序: 通过jdbc建立数据库连接: 访问数据库,执行sql语句: 断开数据库连接. public class DBConnection ...

  3. Market Guide for AIOps Platforms

    AIOps platforms enhance IT operations through greater insights by combining big data, machine learni ...

  4. SQL分页参数传值 在存储过程中使用 动态SQL实现

    PROCEDURE [dbo].[SP_GetList] ( ), @arrearsStatus int, , --最小ID , --每页显示记录数 ) ) AS ); declare @strSQL ...

  5. Vue.js简介及指令

    1.Vue.js的特点 Vue.js是一个Javascript MVVM(Model-View-ViewModel)库,与传统Jquery的区别在于,Vue.js舍弃了繁杂的DOM操作, 如取DOM值 ...

  6. 【delphi】Byte数组与String类型的转换

    string string = AnsiString = 长字符串,理论上长度不受限制,但其实受限于最大寻址范围2的32次方=4G字节: 变量Str名字是一个指针,指向位于堆内存的字符序列,字符序列起 ...

  7. 【Cmd】那些年,我们迷恋的cmd命令(二)

    那些年,我们迷恋的命令(一) 那些年,我们迷恋的命令(二) Linux系统下基本命令 Linux系统下基本命令: 要区分大小写 uname 显示版本信息(同win2K的 ver) dir 显示当前目录 ...

  8. Spark提交任务提示 com.mysql.jdbc.Driver Class not found

    com.mysql.jdbc.Driver Not Found 提示很奇怪,在sbt文件中已经引用了,编译也没有问题: "mysql" % "mysql-connecto ...

  9. Beginning SDL 2.0(2) TwinklebearDev SDL 2.0 Tutorial

    本文整理并简要介绍了TwinklebearDev SDL 2.0 Tutorial相关内容(以下简称TDSDLTutorial). 这是作为我学习并了解SDL2.0功能一篇学习总结. TDSDLTut ...

  10. VS2013 未找到与约束ContractName ...

    控制面板>程序>程序和功能 找到如下选中软件右击修复 即可 需关闭VS2013 参考:http://blog.csdn.net/zhaoyun927/article/details/298 ...