servlet学习笔记_1
一.动态页面和静态页面
动态页面&静态页面:如果浏览器在不同时刻不同条件下访问web服务器的某个页面,浏览器所获得的页面内容会发生变化,那么这种页面称之为动态页面.动态页面和静态页面的区别在于针对页面的访问请求,服务器能够在不同条件下返回给客户端的网页内容是否相同.要想web浏览器访问某一web页面的时候,能够查询出一些动态变化的实时信息,就必须采用动态页面.
动态页面和动态HTML页面:尽管动态HTML页面也能实现页面内容的改变,但是这种结果仅仅是浏览器执行的结果,而不是由于服务器的程序执行,使得浏览器页面的源码发生了改变所造成的结果.这里说的动态网页是指web服务器在不同时刻返回给浏览器的页面的内容会发生变化的网页.可以通过查看源代码来观察.
二.引擎和动态网页程序
引擎是通过应用程序接口(API)和动态网页程序交互的.引擎接受来自于服务器转交的请求,并且负责把请求转交给动态网页程序,将动态网页程序的相应返还给服务器.具体工作流程见下图:

三.Servlet开发入门
1.ServletAPI:Servlet引擎和Servlet程序之间通过ServletAPI进行通信,实际上,Servlet程序就是一个在web服务器端运行的调用了ServletAPI的Java类.
2.Servlet路径的通配符:在<url-pattern>标签下,可以使用通配符,有两种固定的格式,一种格式是*.扩展名,在*前面不能有目录分隔符/,另一种格式是以/开头,并以/*结尾.例如:/action/*.当接受到请求的时候,将采用最具体匹配的原则,来匹配映射,其中*.扩展名优先级最低.优先级为具体的匹配(例如/abc)>/*匹配(例如/abc/*)>*.扩展名匹配(例如*.abc)>缺省servlet.
3.Servlet程序不能被设置为web网页默认的打开文档,例如在web.xml中,添加一行:

紧接着会发现访问主页的时候,仍然无法跳转到BServlet来执行结果.
4.类加载器的基本概念:
类加载器--(将.class文件转为Java虚拟机可以阅读的类的字节码数据)-->Java虚拟机--(将类的字节码数据转化为可执行的二进制数据)-->内存
BootStrap类加载器:加载核心包中的类(rt.jar)中的类.(不用转门的类加载器去加载,是Java虚拟机的内核)
ExtClassLoader:负责加载在jre/lib/ext中的类
AppClassLoader:负责加载应用程序的启动执行类.例如java Test.即用AppClassLoader加载Test类
类加载采用委托机制,即加载某一个类的时候,先委托给当前类加载器的父加载器,一直向上,然后从根类加载器开始加载,直到当前类加载器,如果仍然无法加载类的
话,则会报出ClassNotFoundException异常.因此在这种情况下,如果在一个类的编写中调用到一个类,而这个类需要用当前类的子类加载器才能加载,被调用的类将会无法被加载,因为父类加载器的加载任务不会委托给子类加载器.
Tomcat的类加载器机制:(注意CatalinaClassLoader和SharedClassLoader在Tomcat7中,被赋值为CommonClassLoader示例,代码如下:
private void initClassLoaders() {
try {
commonLoader = createClassLoader( "common" , null );
if ( commonLoader == null ) {
commonLoader = this .getClass().getClassLoader();
}
catalinaLoader = createClassLoader( "server" , commonLoader );
sharedLoader = createClassLoader( "shared" , commonLoader );
} catch (Throwable t) {
handleThrowable (t);
log .error( "Class loader creation threwexception" , t);
System. exit (1);
}
}
Tomcat类加载器加载机制如下图:(AppClassLoader主要加载CATALINA/conf,WebappClassLoader加载的是/WEB-INF/classes目录下面的class文件,Common加载CATALINA_HOME/lib)

四.Servlet特点和运行流程
1.servlet执行流程:

2.servlet的运行过程.
1>.当接受到某个servlet的访问请求的时候,引擎将首先检查是否已经装载并创建了servlet的实例对象(初始化).如果已经创建了servlet对象,那么创建一个用于封装Http请求的HttpServletRequest对象和代表HTTP相应消息的HttpServletResponse对象,然后调用Servlet的service方法,并且将参数传递进去.
2>.如果没有创建servlet对象,创建并且装载servlet对象
3>.调用servlet对象的init方法,完成一些必要的初始化操作.
4>.同样在新创建的对象中,传递参数ServletRequest和ServletResponse.HttpServletRequest封装了请求消息的各种内容,而初始的HttpServletResponse没有内容,但是以后能调用各种方法生成相应的各种部分.当servlet的service方法执行完毕后,返回,web服务器可以从相应对象中读取相应消息
5>.在应用程序被停止或者重新启动之前,servlet引擎将卸载其中的Servlet.在卸载Servlet之前,将调用servlet对象的destory方法,完成一些必要的清理操作.
注意事项:
1>.其中第2步和第3步,是在针对该servlet的第一次访问的时候完成的.
2>.在servlet整个生命周期,它的init方法,只会被调用一次,而service方法,每次针对该servlet发出请求的时候,都将被调用.每次HttpServletRequest和HttpResponse对象都会被重新封装,servlet可以从HttpServletRequest对象中获取需要的数据,并且调用相应对象的方法将相应内容写入到servlet引擎的缓冲区中.再由web服务器发送给客户端.
3>.如果对于一个已经加载的servlet进行了修改,那么除非重启服务器,否则客户访问的依然是原来的servlet,这是因为servlet在服务器的运行期间只会被装载一次.就算硬盘上修改了servlet,但是服务器上依然用的是旧的servlet.
3.ServletAPI:Servlet引擎负责创建ServletRequest,ServletResponse对象,那是如何实现和Servlet交互的呢?实际上,根据面向对象的基本原则,只需要提供相应的API(标准),然后由servlet引擎负责创建具体的实现类对象.而在service方法中接受的是相应的接口的引用,这样子,就可以实现servlet引擎和servlet的交互.
servlet学习笔记_1的更多相关文章
- # jsp及servlet学习笔记
目录 jsp及servlet学习笔记 JSP(Java Server Page Java服务端网页) 指令和动作: servlet(小服务程序) jsp及servlet学习笔记 JSP(Java Se ...
- Servlet学习笔记(四)
目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...
- Servlet学习笔记(三)
目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...
- Servlet学习笔记(二)
目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...
- jsp&servlet学习笔记
1.路径引用问题 一个css.jsp.html.或者javascript文件从从一个工程复制到另一工程,如果引用的时候使用的时相对路径,看似没有错误,但是却一直引用不进来,这时候要使用绝对路径,这样才 ...
- Servlet 学习笔记
Servlet 运行在服务器上的 java 类: Servlet 容器为 javaWeb 应用提供运行时环境,负责管理 servlet 和 jsp 生命周期,以及管理他们的共享数据. 现在我们知道了 ...
- Servlet学习笔记(1)--第一个servlet&&三种状态对象(cookie,session,application)&&Servlet的生命周期
servlet的404错误困扰了两天,各种方法都试过了,翻书逛论坛终于把问题解决了,写此博客来纪念自己的第一个servlet经历. 下面我会将自己的编写第一个servlet的详细过程提供给初学者,大神 ...
- Servlet学习笔记(七)—— 自己定义过滤器的编写改进:自己定义实现FilterChain
笔记六中实现了三种过滤器:字符编码过滤.登录权限过滤.敏感词过滤,可是有个缺陷就是,限定了过滤顺序,而不能实现先进行request过滤.最后response过滤,而且中间几项过滤的顺序不能动态改变.所 ...
- Servlet学习笔记(八)—— 文件下载
一.文件下载概述 比如图片或者HTML这类静态资源,仅仅要在浏览器中打开正确的网址就行下载.仅仅要资源放在应用程序文件夹或者其下的子文件夹中,但不在WEB-INF下.Servlet/JSP容器就会将资 ...
随机推荐
- go gomail
package main //cmd: go get gopkg.in/gomail.v1 import ( "gopkg.in/gomail.v1" ) func main() ...
- Eclemma各种安装方式以及安装失败解决
在线安装方法一: 在eclipse的菜单栏点击 Help -> Install New Software -> add Name:eclemma (名称可以随便填) Location:ht ...
- iOS ARC中CTCallCenter没用,无法监听电话的解决方案
今天在尝试使用CTCallCenter进行电话监听时,发现一直无法捕获电话状态改变的事件,研究了一番之后找到了解决方案,在这里分享给大家. 首先使用CTCallCenter监听电话的代码如下: CTC ...
- Hadoop学习(5)-- Hadoop2
在Hadoop1(版本<=0.22)中,由于NameNode和JobTracker存在单点中,这制约了hadoop的发展,当集群规模超过2000台时,NameNode和JobTracker已经不 ...
- [转] CentOS单独安装Apache Benchmark压力测试工具的办法
Apache安装包中自带的压力测试工具 Apache Benchmark(简称ab) 简单易用,这里就采用 ab作为压力测试工具了. 1.独立安装 ab运行需要依赖apr-util包,安装命令为: 1 ...
- Linux:挂载外部U盘,移动数据
背景: 我自己电脑连网采用拨号上网方式,为了把自己的虚拟机中的服务器ip域本机设置为一个局域网,而且ip固定下来,虚拟机网络连接采用了桥接方式.所以也导致了虚拟机内部没法连接外网.(不过可以通过在虚拟 ...
- C语言之memcpy函数
昨天自己动手实现memcpy这个函数,用一个例程试了一下,结果正确,满心欢心,可是有些地方想不明白,于是百度了一下,结果自己写的函数简直无法直视. 觉得还是写个总结,以示教训. 先贴上我自己的函数: ...
- pycharm下载 -professional
Jet Brains 开发的PyCharm 我传到百度云上了.只供开发使用,违者必究.大家一起学开发.有谁有python 进阶 电子书,可以发到我的邮箱里:120946018@qq.com,谢谢 Ma ...
- 【Selenium】3.介绍Selenium IDE
本文供学习交流之用,没有商业用途,没有盈利. 完全是我自己为督促自己学习而翻译的.翻译的不好,见谅.来源于:http://www.guru99.com/introduction-selenuim-id ...
- Linux命令之tcpdump
项目中常用到的抓包命令: 1. tcpdump -i eth0:1 udp poort 6015 -Xvv 2. tcpdump host 239.16.101.27 -Xvv 3. tcpdump ...