一.动态页面和静态页面
  动态页面&静态页面:如果浏览器在不同时刻不同条件下访问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示例,代码如下:

  1. private void initClassLoaders() {
  2.  
  3. try {
  4.  
  5. commonLoader = createClassLoader( "common" , null );
  6.  
  7. if ( commonLoader == null ) {
  8.  
  9. commonLoader = this .getClass().getClassLoader();
  10.  
  11. }
  12.  
  13. catalinaLoader = createClassLoader( "server" , commonLoader );
  14.  
  15. sharedLoader = createClassLoader( "shared" , commonLoader );
  16.  
  17. } catch (Throwable t) {
  18.  
  19. handleThrowable (t);
  20.  
  21. log .error( "Class loader creation threwexception" , t);
  22.  
  23. System. exit (1);
  24.  
  25. }
  26.  
  27. }

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的更多相关文章

  1. # jsp及servlet学习笔记

    目录 jsp及servlet学习笔记 JSP(Java Server Page Java服务端网页) 指令和动作: servlet(小服务程序) jsp及servlet学习笔记 JSP(Java Se ...

  2. Servlet学习笔记(四)

    目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...

  3. Servlet学习笔记(三)

    目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...

  4. Servlet学习笔记(二)

    目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...

  5. jsp&servlet学习笔记

    1.路径引用问题 一个css.jsp.html.或者javascript文件从从一个工程复制到另一工程,如果引用的时候使用的时相对路径,看似没有错误,但是却一直引用不进来,这时候要使用绝对路径,这样才 ...

  6. Servlet 学习笔记

    Servlet 运行在服务器上的 java 类: Servlet 容器为 javaWeb 应用提供运行时环境,负责管理 servlet 和 jsp 生命周期,以及管理他们的共享数据. 现在我们知道了 ...

  7. Servlet学习笔记(1)--第一个servlet&&三种状态对象(cookie,session,application)&&Servlet的生命周期

    servlet的404错误困扰了两天,各种方法都试过了,翻书逛论坛终于把问题解决了,写此博客来纪念自己的第一个servlet经历. 下面我会将自己的编写第一个servlet的详细过程提供给初学者,大神 ...

  8. Servlet学习笔记(七)—— 自己定义过滤器的编写改进:自己定义实现FilterChain

    笔记六中实现了三种过滤器:字符编码过滤.登录权限过滤.敏感词过滤,可是有个缺陷就是,限定了过滤顺序,而不能实现先进行request过滤.最后response过滤,而且中间几项过滤的顺序不能动态改变.所 ...

  9. Servlet学习笔记(八)—— 文件下载

    一.文件下载概述 比如图片或者HTML这类静态资源,仅仅要在浏览器中打开正确的网址就行下载.仅仅要资源放在应用程序文件夹或者其下的子文件夹中,但不在WEB-INF下.Servlet/JSP容器就会将资 ...

随机推荐

  1. gets(),fgets()的作用机制探究

    gets(),fgets() scanf("%d",&a)若接受形如 2 这样的输入后,缓冲区内会留一个\n,此后若调用gets等函数时会读出这个换行出现错误,需注意 fg ...

  2. CDN缓存那些事

    CDN是什么? 谈到CDN的作用,可以用8年买火车票的经历来形象比喻: 8年前,还没有火车票代售点一说,12306.cn更是无从说起.那时候火车票还只能在火车站的售票大厅购买,而我所住的小县城并不通火 ...

  3. 转: KindEditor 图片空间文件增加删除文件、文件夹功能(ASP语言环境)

    KindEditor 图片上传功能中集成的图片空间文件管理插件可以对已上传图片进行管理,十分便捷,只是没有图片删除功能,仔细研读xieliang分享的经验后,自己动手改造了一下,顺便分享给有同样需求的 ...

  4. 简单实用的双向电平转换电路(3.3v-5v)

    当你使用3.3V的单片机的时候,电平转换就在所难免了,经常会遇到3.3转5V或者5V转3.3V的情况,这里介绍一个简单的电路,他可以实现两个电平的相互转换(注意是相互哦,双向的,不是单向的!).电路十 ...

  5. 安卓和ios的lineheight的不一样如何解决?

    lineheight在pc端上显示很正常,但是在手机就很不同,在iphone6上,设置了lineheight,但是文本上面多了几像素,如果你设置lineheight在35px一下的按钮(用span做的 ...

  6. 调用java rest ful 接口实例

    HttpWebRequest request = WebRequest.Create("http://192.168.0.99:8080/wzh-webservice/rest/login? ...

  7. 使用JavaService.exe(amd64)发布java服务(jdk x64)

    最近项目中需要使用java服务,但是java服务已经写好了,就等待部署到windows服务中,遇到了种种困难------在x64服务器中部署jdk x64编译的jar时,遇到了各种纠结. 本文找到了一 ...

  8. java权限修饰符

  9. string.Format出现异常"输入的字符串格式有误"的解决方法

    string.Format出现异常"输入的字符串格式有误"的解决方法 今天在做项目时,碰到一个很奇怪的问题,我使用string.Format居然报“输入的字符串格式有误”的错误,我 ...

  10. 10. 星际争霸之php设计模式--原型模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...