越想构建上层建筑,就越觉得底层基础很重要。补课系列。
书是良心书,就是太基础了,正适合补课。
【纯文字版】
Tomcat与Java Web
开发技术详解
Servlet
Servlet的生命周期
初始化
1Servlet容器加载Servlet类
2Servlet容器创建ServletConfig,初始化配置信息
3Servlet容器创建Servlet对象
4Servlet容器调用Servlet对象的init(ServletConfig)
时机:首次被请求或配置了<load-on-startup>
运行时
接收请求封装ServletRequest和ServletResponse
调用service()
通过ServletResponse生成响应结果
销毁
调用destroy()
销毁Servlet对象
销毁对应的ServletConfig
应用的上下文SerletContext
一个webapp对应一个SerletContext
监听接口ServletContextListener
contextInitialized(ServletContextEvent)
contextDestroyed(ServletContextEvent)
HttpSession的生命周期
创建
浏览器首次访问该应用
浏览器上次的会话已销毁,但再次访问该应用
浏览器访问时不带上次会话的ID
销毁
服务器调用invalidate()
会话过期
服务器无法直接知道浏览器已终止
setMaxInactiveInterval(int)
作用范围
request.getSession()
只要能取到会话对象,就能共享会话的数据
会话的监听接口
配置中web.xml
HttpSessionListener监听创建与销毁
HttpSessionAttributeListener监听属性变化
作为属性对象存入会话
HttpSessionBindingListener监听属性的绑定情况
HttpSessionActivationListener监听会话激活与搁置
过滤器
按web.xml中的顺序串联调用
chain.doFilter()递归调用
调用关系为filter1->filter2->...->servlet
此后的返回是filter1<-filter2<-...<-servlet
req和resp包装为ServletRequestWrapper和ServletResponseWrapper
web.xml
加载顺序
ServletContext(context-parm)->Listener->Filter->Servlet
其他(略)
Tomcat
三种工作模式
standalone
JVM->Tomcat->Servlet容器
其他服务器进程内容器(JNI)
Tomcat分为web插件和Servlet容器两部分
容器组件运行在其他服务器内的JVM
web插件也在该服务器中
web插件通过JNI调用容器组件
其他服务器进程外容器(IPC)
Tomcat分为web插件和Servlet容器两部分
容器组件运行在独立JVM
服务器不需要支持Servlet
web插件运行在服务器中
web插件通过IPC调用容器组件
server.xml
Server, Service, Engine, Host(略)
Context
className:可指定实现类
path:应用的URL入口
docBase:应用的文件路径
reloadable:自动监测更新并重新加载(但增加运行负荷)
cookies:允许以Cookie来支持Session
useNaming:支持JNDI
Manager会话管理器
默认StandardManager
可加入Memcached的类包实现集中式会话管理
Cluster集群
Engine中加入<Cluster>并配置DeltaManager(或其他实现)
在应用的web.xml中启用<distributable/>
存入会话的属性要实现序列化接口
网络环境支持组播
Connector
监听端口
AJP协议
配置SSL
JK连接器
通过AJP协议访问Tomcat
作为插件可以集成在Apache,IIS等服务器中
Relm安全域
在Tomcat层面实现鉴权
有配置文件、JDBC、DataSource等不同的实现
Valve阀
有Engine、Host和Context三种作用范围
Tomcat自带的实现
客户访问日志阀
远程地址过滤器
远程主机过滤器
客户请求记录器
SSI(Server Side Include)
常用于网页的拼接,比如header和footer
只提供了一些简单的指令
以SSIServlet的形式实现
Web应用的
几种调用方式
EJB
JavaEE应用结构
客户层(browser或client)
Web层(JSP和Servlet)
业务层(EJB)
会话Bean-逻辑
有状态
无状态
实体Bean-实体
EIS层(数据库)
接口
Remote接口EJBObject
Home接口EJBHome
Bean类实现SessionBean并对Remote接口做具体实现
技术栈
服务器:JBoss
调用方式:RMI
SOAP
WebService
SOAP:基于XML语言的数据交换协议
WSDL:基于XML语言的web服务描述语言
通信协议
HTTP/HTTPS
SMTP/POP3
调用方式
RPC
Message-Oriented
技术栈
Web服务框架:Apache AXIS
服务器:Tomcat
MVC模式
层次
模型:业务逻辑
视图:用户呈现
控制器
接收用户请求
调用模型响应用户请求
选择视图显示响应结果
优点:3个模块相互独立,松耦合
JSP Model 2
Servlet作为控制器
JavaBean作为模型
JSP作为视图
Struts
实现MVC的web框架
控制器
FilterDispatcher+struts.xml把请求转发给对应的各个Action
Action类侧重于控制程序的流程
Velocity
模板语言的作用:将Java代码从Web页面中分离出来
引擎的使用
Servlet类继承VelocityServlet
覆盖handleRequest方法
把变量存入Context对象
返回指定模板文件
课外补充:远程通信的几种方式
RPC:远程过程调用
TCP连接
应用层寻址(比如HTTP的URI地址)
请求和响应的序列化和反序列化
RMI远程方法调用
仅限于Java语言
强对象
WebService
HTTP连接
SOAP协议
基于XML
restful风格
面向资源的GET/POST/PUT/DELETE操作
(常使用基于JSON的数据交换)
JMS
Java消息服务
JSP与JSTL(略)
《Tomcat与Java Web开发技术详解》思维导图的更多相关文章
-
《TomCat与Java Web开发技术详解》(第二版) 第四章节的学习总结--常用Servlet API
要开发Servlet,自然要掌握常用的servlet的相关API.通过此章节的学习,了解到如下常用API 1.Servlet接口--->GenericServlet抽象类(实现Servlet接口 ...
-
《TomCat与Java Web开发技术详解》(第二版) 第八章节的学习总结 -- 访问mysql
终于学到如何访问Mysql了 1. 可以看看此章节提供的sql脚本,以后可以照着写了.此外,对于Mysql如何使用,最好的地方就是其官网介绍了.http://dev.mysql.com/doc/ref ...
-
《TomCat与Java Web开发技术详解》(第二版) 第六章节的学习总结 ---- JSP技术
第六章主要介绍了JSP的相关知识. 1.JSP:是通过在HTML文件中加入java程序片段(Java Scriptlet)和JSP标记,就构成了JSP文件.JSP实质上是Servlet.JSP的API ...
-
《TomCat与Java Web开发技术详解》(第二版) 第六章节对应CD附带的helloapp无法启动的问题解决
首先记录一下如何解决此章节CD中附带的helloapp无法启动的问题 我用的tomcat版本是:7.0.47:为了便于控制,针对此章节的helloapp,我在tomcat/conf/Catalina/ ...
-
《TomCat与Java Web开发技术详解》(第二版) 第五章节的学习总结 ---- Servlet的高级用法
这一章节主要是介绍了Servlet技术的一些高级用法,如下是我自己的整理归纳 1.下载文件:即获取服务器文件,并把文件写入反馈给客户端 ServletContext.getResourceAsStre ...
-
《TomCat与Java Web开发技术详解》(第二版) 第三章节的学习总结--利用Context元素来自定义web应用的存储位置
在学习完第三章后(第三章提供的web应用是helloaapp,我将其放到了tomcat/webapps中),对Context元素的作用理解不深:但是当进入第四章后,发现第四章提供的源码包中也有一个叫h ...
-
《TomCat与Java Web开发技术详解》(第二版) 第一章节的学习总结--HTTP组成+基本访问方式
1.需要看懂HTML文件中的组成元素的基本含义.不同的组成元素,可以使得HTML支持文本,图片(img,将图片发给客户端),静态音频/视频(embed src,将音频视频发给客户端),超链接(href ...
-
Java Web开发之详解JSP
JSP作为Java Web开发中比较重要的技术,一般当作视图(View)的技术所使用,即用来展现页面.Servlet由于其本身不适合作为表现层技术,所以一般被当作控制器(Controller)所使用, ...
-
hadoop应用开发技术详解
<大 数据技术丛书:Hadoop应用开发技术详解>共12章.第1-2章详细地介绍了Hadoop的生态系统.关键技术以及安装和配置:第3章是 MapReduce的使用入门,让读者了解整个开发 ...
随机推荐
-
[Android Pro] PullToRefreshListView怎么设置各个item之间的间距
reference to : http://blog.csdn.net/qq_25943493/article/details/50923895 要设置第三方的上拉下载listView的item之间 ...
-
spark 源码安装
clone 源码 git clone git://github.com/apache/spark.git maven编译源码 国外镜像比较慢,此处修改maven仓库的镜像为阿里云镜像: <mir ...
-
StringExtensions
public static string MakeSafeSql(this string s) { string t = s; t = t.Replace("'", "' ...
-
linux环境变量与本地变量
两者不同的是. 环境变量可以在shell的子进程中使用, 而本地变量不同. 每当连接上服务器时,服务器就会通过帐号密码运行一个SHELL,我们所做的工作都在这个SHELL上,特殊方法除外(如,守护进程 ...
-
Analyzing The Papers Behind Facebook&#39;s Computer Vision Approach
Analyzing The Papers Behind Facebook's Computer Vision Approach Introduction You know that company c ...
-
animation-timing-function中的cubic-bezier(n,n,n,n)
cubic-bezier即为贝兹曲线中的绘制方法.图上有四点,P0-3,其中P0.P3是默认的点,对应了[0,0], [1,1].而剩下的P1.P2两点则是我们通过cubic-bezier()自定义的 ...
-
backbone入门小例子
最近听了个backbone的分享,为了避免听不懂,就先做了个小例子 例子很简单,效果如下 基本视图模板: <script type="tex/template" id=&qu ...
-
Mybatis源码之RoutingStatementHandler
/** * @author Clinton Begin */ public class RoutingStatementHandler implements StatementHandler { pr ...
-
[Swift]LeetCode30. 与所有单词相关联的字串 | Substring with Concatenation of All Words
You are given a string, s, and a list of words, words, that are all of the same length. Find all sta ...
-
angular笔记_2
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...