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

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. 菜鸟译文(二)——使用Java泛型构造模板方法模式

    如果你发现你有很多重复的代码,你可能会考虑用模板方法消除容易出错的重复代码.这里有一个例子:下面的两个类,完成了几乎相同的功能: 实例化并初始化一个Reader来读取CSV文件: 读取每一行并解析: ...

  2. EditText: EditText自动获取焦点并弹出键盘&EditText不自动获取焦点并且不会弹出键盘

    1.EditText不自动获取焦点并且不会弹出键盘 找到EditText的父控件,设置其父控件为: Parent.setFocusable(true); Parent.setFocusableInTo ...

  3. 每日英语:Nelson Mandela Dies at 95

    Nelson Mandela, who rose from militant antiapartheid activist to become the unifying president of a ...

  4. ubuntu下安装与卸载软件方法

    http://www.cnblogs.com/JamyWong/archive/2009/11/19/1606442.html 1.通过deb包安装的情况:安装.deb包:代码:sudo dpkg - ...

  5. spring boot映射静态资源.

    增加配置文件 package com.wisely.upload.config; import org.springframework.context.annotation.Configuration ...

  6. JAVA实现MD5加密算法(使用MessageDigest)

    http://blog.csdn.net/ymc0329/article/details/6738711 *********************************************** ...

  7. Natural Language Processing, 2017, Mar.29, Weekly Report

    Distributed Representations of Words and Phrases and their Compositionality T Mikolov, I Sutskever, ...

  8. java中定义enum示例

    /** * Enumeration for the message delivery mode. Can be persistent or * non persistent. Use the meth ...

  9. iOS APP版本更新跳转到App Store下载/更新方法

    使用下面的连接即可跳转到App Store itms-apps://itunes.apple.com/cn/app/id***********                  其中********* ...

  10. VC/Wince 实现仿Win8 Metro风格界面2——页面滑动切换(附效果图)

    前几天开始写仿Win8 Metro界面文章,部分网友觉得不错,感谢各位的意见.本来今天一直在折腾Android VLC播放器,没时间写.不过明天休息,所以今天就抽时间先写一下. 言归正传,我们都知道W ...