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容器就会将资 ...
随机推荐
- ios检测是否有网络
/** AFNetworkReachabilityStatusUnknown = -1, // 未知 AFNetworkReachabilityStatusNotReachable ...
- Java连接Redis (key-value存储系统)
Redis简介: redis是一个性能非常优秀的内存数据库,通过key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表). ...
- Firefox刷新页面和复选框的奇葩问题
Firefox刷新页面后数据还在,估计很多人都碰到过. 但是有一个奇怪的地方就是复选框,如果你默认是勾选了,然后访问者取消勾选,刷新完之后,还是没有勾选,这是为什么? Firefox奇葩的地方就在于c ...
- Silverlight 限制 规则输入(正整数或小数)的另一种“技巧”写法
今天上午纠结一个问题很久,silverlight TextBox限制用户规则输入,要求只能输入正整数或则小数,小数点只能有且只有一个 刚开始的时候就是想直接用keyDown事件里面来解决 voi ...
- Css Study - 横向MENU
http://cssmenumaker.com/menu/tabbed-chrome-and-blue HTML <div id="topMenu"> <ul&g ...
- Dinic算法模板
详解:http://blog.csdn.net/wall_f/article/details/8207595 算法时间复杂度:O(E * V * V) #include <cstdio> ...
- Python基础第二篇
一.三元运算 if True: name='a' else: name='b' #上面的代码用三元运算表示: name="a" if True else "b" ...
- java中如何获取昨天的当前日期
在java里,获取昨天的当前日期,可以采用calendar来做,也可以采用date来做:如下: 1.采用calendar来做: Calendar cal=Calendar.getInstance(); ...
- UltraISO向U盘写入镜像特别慢
电脑:Dell INSPIRON 1416 系统:WIN7旗舰版32位 U盘:金士顿8G 镜像:CentOS7 ×86_64 问题: 开始使用"写入"功能,写入速度72k/s 后来 ...
- FusionCharts或其它flash的div图层总是浮在最上层的问题
div的图层由div的style中的z-index来决定,z-index是层垂直屏幕的坐标,0最小,越大的话位置越靠上. 由于FusionCharts的图表都放在div中,如果页面还有其他的div,将 ...