Java Web知识梳理

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

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的?

时间: 2024-10-07 15:17:42

Java Web知识梳理的相关文章

Java基础知识梳理《一》

一.Java数据类型(简单称之为“四类八种”) java 基本的数据类型长度都是固定的,好处是在实现跨平台时就统一了. 1.整型 byte short int long (分别是1,2,4,8个字节) 类型 存储需求 位数 取值范围 byte 1字节 8位 -128~127 short 2字节 16位 -2^15 ~2^15-1 int 4字节 32位 -2^31~2^31-1 long 8字节 64位 -2^63~2^63-1 当超出int表示范围时,应该使用long型,添加后缀一大写的L 注

Java SE知识梳理

本系列文章只是对JavaSE相关知识点的梳理,全面了解JavaSE知识结构,便于以后遇到相关问题时可以查找来源. 文中所有知识的具体细节都可以从其他网络博客或者API文档中获取.我就不写那么详细了. 耗费我三个星期,废寝忘食整理出来的,今天终于告一段落了.后面还会介绍一些开源库,尽请期待. 文章列表: Java 基础内容简介 Java 集合与泛型 Java 异常处理 Java 注解 Java 文件和IO Java NIO Java 对象序列化 Java 多线程和高并发 Java 类加载机制 Ja

java 多线程知识梳理1

概念 JMM:规定了jvm有主内存(Main Memory)和工作内存(Working Memory) ,主内存存放程序中所有的类实例.静态数据等变量,是多个线程共享的,而工作内存存放的是该线程从主内存中拷贝过来的变量以及访问方法所取得的局部变量, 是每个线程私有的其他线程不能访问,每个线程对变量的操作都是以先从主内存将其拷贝到工作内存再对其进行操作的方式进行,多个线程之间不能直接互相传递数 据通信,只能通过共享变量来进行. 操作指令:JLS定义了线程对主存的操作指令:read,load,use

java 多线程知识梳理2

ReentrantLock和synchronized的选择 1 synchronized的弊端,简化了代码工作,并且与异常处理操作实现了很好的交互,但是表现不够灵活,对线程控制较小,比如无法中断等待的线程,或者无法在请求获取锁时无限的等待,也没法实现非阻塞结构的加锁规则. 2 reentrantlock, java5.0以后才引入,实现了Lock 接口,提供了与synchronized相同的互斥性和内存可见性.在java5.0里面性能优势比内置锁明显,java6.0里面差不多,是内置锁的补充,不

java 多线程知识梳理4

常用并发辅助类 CountDownLatch Semaphore CyclicBarrier, 都基于ReentrantLock实现. 1 Semaphores       are often used to restrict the number of threads than can * access some (physical or logical) resource. For example, here is * a class that uses a semaphore to con

java web的开发 知识要点

近期闲下来时写的一个有关 java web的开发 的 常用架构 的总结,用于初 学 者或团队新人培训. Java开发初步.ppt SSH  为 struts+spring+hibernate 的一个集成框架,是目前较流行的一种JAVA Web应用程序开源框架 SSI   为 Strtus2.Spring.iBatis java web的开发 知识要点

Java Web基础知识之Filter:过滤一切你不想看到的事情

不要相信客户端, 所以做后端的人都应该铭记的事情.因为前端传过来的数据并不总是合法和有效的,所以后端是对访问资源的最后一道保护伞.之前我们在Spring中说到过AOP编程,AOP基础知识,它就可以在执行我们的方法之前进行一些预处理和验证来保护后端的资源.不难想到她的实现方式和本篇要说的过滤器的实现原理应该是相同的,都是通过Java的动态代理实现的(自己的理解). 在Java Web的开发中,过滤器用于拦截请求,并对ServletRequest对象进行处理,我们可以想到的,它可以用来验证权限.加密

Java Web -- Servlet(1) 必备知识

学习Java WEB开发必备的基本概念: 1.WEB 本意是蜘蛛网和网的意思,在网页设计中我们称为网页的意思.现广泛译作网络.互联网等技术领域.表现为三种形式,即超文本(hypertext).超媒体(hypermedia).超文本传输协议(HTTP)等. 2.静态网页(可简单理解为html) 是指网页的内容是固定的,不会根据浏览器者的不同需求而改变.(实实在在保存在服务器上的文件) 3.动态网页 是指在接到用户访问要求后动态生成的页面,页面内容会随着访问时间和访问者发生变化(并不是独立存在于服务

Java Web架构知识整理——记一次阿里面试经历

惭愧,从一次电面说起.我个人在某国企做一名软件设计师,国企大家都懂的,待遇一般而且没啥意思,做的方向基本都是操作系统.驱动和工具软件的开发,语言基本都是C/C++.最近也想跳槽,刚好有幸得到了一次阿里的面试机会,于是就试了试. 首先是电话面试,当时正在上班,人多口杂,好不容易找了个没人的地方开始面试.面试的方向是Java Web,面试官很nice,跟朋友一样,一开始问了些比较基础的东西,比如hashmap/hashtable的区别和优缺点,我答得还行,而且对于原理的东西还算讲的比较透彻. Jav