servlet规范及其生命周期的总结

  1. 什么是B/S结构,什么是C/S结构。

参考答案:

  B/S是Browser/Server的缩写客户机上只要安装—个浏览器(Browser)加Netscape

Navigator或Internet Explorer,服务器安装Oracle. Sybase、Info rmix或SQL Server

等数据库。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端

实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server同数据库进行数据交

互。

  C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采

用大型数据库系统,如Oracle、Sybase、Informix或SQL Server。客户端需要安装专用

的客户端软件。

  1. 简述什么是HTTP协议?

参考答案:

  HTTP协议是HyperText Tra nsfer Protocol的简写,它是由w3c(万维网联盟)制定

的一种应用层协议,用来定义浏览器与web服务器之间如何通信以及通信的数据格式。

  1. Servlet是什么?谈谈你的理解。

参考答案:

  Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特陛,可以生成动

态的Web页面。  它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。与传统的从命令行启动的Java应用程

序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java

虚拟机。

 

 

  1. Web 应用程序的结构   并手工搭建一个Servlet的应用程序 运行测试。
  2. 一个web应用程序是由一组Servlet、HTML页面、类以及其他资源组成的运行在web服务器上的完整的应用程序,以一种结构化的有层次的目录形式存在;
  3. 组成web应用程序的这些文件要部署在相应的目录层次中,根目录代表整个web应用程序的“根”;
  4. 通常将web应用程序的目录放在webapps目录下,在webapps目录下的每一个子目录都是一个独立的web应用程序,子目录的名字就是web应用程序的名字,也就是web应用程序的“根”。用户通过web应用程序的“根”来访问web应用程序中的资源。
  5. 一个例子:servlet规范定义的web应用程序的目录层次
    servlet规范及其生命周期的总结
    说明:①WEB-INF目录下的classes和lib目录都可以存放java类文件,在Servlet容器运行时,Web应用程序的类加载器将首先加载classes目录下的,其次才是lib目录下的类。如果这两个目录下存在同名的类,起作用的将是classes目录下 的类
    ②WEB-INF是一个特殊的目录,这个目录并不属于Web应用程序可以访问的上下文路径的一部分,对客户端来说,这个目录是不可见的。但该目录下的内容对Servlet代码可见。
  6. 研究Servlet 的生命周期

参考答案:

  Servlet是运行在Servlet容器中的,由Servlet容器来负责Servlet实例的查找、创

建以及整个生命周期的管理,Servlet整个生命周期可以分为四个阶段:类装载及实例创建

阶段、实例初始化阶段、服务阶段以及实例销毁阶段。

    1)类装载及实例创建阶段:

    默认情况下,Servlet实例是在接受到第—个请求时进行创建并且以后的请求进行复用,

如果有Servlet实例需要进行一些复杂的操作,需要在初始化时就完成,比如打开文件、初

始化网络连接等,可以配置在服务器启动时就创建实例,具体配置方法为在声明servlet标

签中添加<load-on-sta rtup >l</load-on-startup>标签。

    2)初始化init( ServletC·onfig config):

    一旦Servlet实例被创建,将会调用Servlet的init方法,同时传入ServletConfig

例,传入Servlet的相关配置信息,init方法在整个Servlet生命周期中只会调用一次。

 

  1. <!-- 配置初始化方式为tomcat容器启动后自动初始化该servlet -->
  2.      <load-on-startup>1</load-on-startup>
  3.  

 

    3)服务service():

    为了提高效率,Servlet规范要求—个Servlet实例必须能够同时服务于多个客户端请

求,即service()方法运行在多线程的环境下,Servlet开发者必须保证该方法的线程安全

性。

  4)销毁destory0:

  当Servlet容器将决定结束某个Servlet时,将会调用destory0方法,在destory方

法中进行资源释放,—旦destory方法被调用,Servlet容器将不会再发送任何请求给这个

实例,若Servlet容器需再次使用该Servlet,需重新再实例化该Servlet实例。

 

3.写一个html页面里面有负责登录的form表单,研究Servlet 如何接收页面请求的参数数据。如果登录成功  则在浏览器上输出登录成功 否则输出登录失败。 

 

4.写一个html页面里面有负责注册的form表单,研究Servlet 如何接收页面请求的参数数据。并使用DAO 访问数据库  如果注册成功 则在浏览器上输出注册

成功  否则在浏览器上输出注册失败。

 

HashMap :先说HashMap,HashMap是线程不安全的,在并发环境下,可能会形成环状链表(扩容时可能造成,具体原因自行百度google或查看源码分析),导致get操作时,cpu空转,所以,在并发环境中使用HashMap是非常危险的。

  HashTable : HashTable和HashMap的实现原理几乎一样,差别无非是1.HashTable不允许key和value为null;2.HashTable是线程安全的。但是HashTable线程安全的策略实现代价却太大了,简单粗暴,get/put所有相关操作都是synchronized的,这相当于给整个哈希表加了一把大锁,多线程访问时候,只要有一个线程访问或操作该对象,那其他线程只能阻塞,相当于将所有的操作串行化,在竞争激烈的并发场景中性能就会非常差。

HashTable性能差主要是由于所有操作需要竞争同一把锁,而如果容器中有多把锁,每一把锁锁一段数据,这样在多线程访问时不同段的数据时,就不会存在锁竞争了,这样便可以有效地提高并发效率。这就是ConcurrentHashMap所采用的"分段锁"思想。

ConcurrentHashMap采用了非常精妙的"分段锁"策略,ConcurrentHashMap的主干是个Segment数组。

  所以,对于同一个Segment的操作才需考虑线程同步,不同的Segment则无需考虑。

Segment类似于HashMap,一个Segment维护着一个HashEntry数组

 transient volatile HashEntry<K,V>[] table;

HashEntry是目前我们提到的最小的逻辑处理单元了。一个ConcurrentHashMap维护一个Segment数组,一个Segment维护一个HashEntry数组。

 

 

 

1.    Web 应用程序的结构   并手工搭建一个Servlet的应用程序 运行测试。

在webapps中创建一个项目,项目文件夹中有WEB-INF下有classes和lib目录,

Classes中放的是servlet编译后的class文件,lib中放的是jar包

Html网页跟WEB-INF同级

2.    研究Servlet 的生命周期

创建时机:

    默认情况下 , 当用户第一次访问Servlet时 , 对象创建.

    后续重复访问这个Servlet , 是在重复使用第一次创建的对象.

销毁时机:

    服务器关闭时 或 应用被卸载时 会导致servlet被垃圾回收.

因为servlet的对象 不是我们来维护的, 是tomcat进行创建, 销毁操作的.

为了便于我们更好的使用servlet , JavaEE 为servlet 提供了创建 与 销毁的事件处理.

生命周期存在三个方法:

    1.  init    :   当servlet对象初始化完毕时, 方法执行. 我们通常在这里缓存一些用户请求时 使用的资源.

    2.  service :   当用户每访问一次servlet,  service方法在新的线程中执行一次.

    3.  destroy :   当servlet准备销毁时. 执行. 我们通常在这里释放缓存的资源.

3.写一个html页面里面有负责登录的form表单,研究Servlet 如何接收页面请求的参数数据。如果登录成功  则在浏览器上输出登录成功 否则输出登录失败。 

response.setContentType("text/html;charset=utf-8");

String parameter =request.getParameter("username");

String parameter2 =request.getParameter("password");

              System.out.println(parameter);

              System.out.println(parameter2);

              if("zhang".equals(parameter)&&"1".equals(parameter2)) {

                     response.getWriter().print("登录成功");

              }else {

                     response.getWriter().print("登录失败");

              }

4.

写一个html页面里面有负责注册的form表单,研究Servlet 如何接收页面请求的参数数据。并使用DAO 访问数据库  如果注册成功 则在浏览器上输出注册

成功  否则在浏览器上输出注册失败。

 

String username = request.getParameter("username");

String password = request.getParameter("password");

先写一个html网页servletdao接口实现dao接口

接口中的方法:boolean insertzh(String username,String password);

Servlet接收html中的内容,在将内容传入到dao接口中去.判断是否能插入成功,如果插入成功,就表示注册成功,

如果插入失败,就表示注册失败.

 

 

 

Servlet整个生命周期可以分为四个阶段:类装载及实例创建

阶段、实例初始化阶段、服务阶段以及实例销毁阶段。

1:如何创建

第一种:默认情况下,Servlet实例是在接受到第—个请求时进行创建并且以后的请求进行复用,

第二种:在服务器启动时就创建实例,具体配置方法为在声明servlet标

签中添加<load-on-sta rtup >l</load-on-startup>标签。

 

 

 

第一步:先创建了一个动态工程,在写一个html页面和user类。

第二步:写一个工具类和Dao接口及其Dao实现类。

第三步:创建一个Servlet接收html中的内容, 把内容传入到dao接口中去.判断是否能插入成功,如果插入成功,就表示注册成功,

如果插入失败,就表示注册失败.

  1. 什么是B/S结构,什么是C/S结构。

参考答案:

  B/S是Browser/Server的缩写客户机上只要安装—个浏览器(Browser)加Netscape

Navigator或Internet Explorer,服务器安装Oracle. Sybase、Info rmix或SQL Server

等数据库。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端

实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server同数据库进行数据交

互。

  C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采

用大型数据库系统,如Oracle、Sybase、Informix或SQL Server。客户端需要安装专用

的客户端软件。

  1. 简述什么是HTTP协议?

参考答案:

  HTTP协议是HyperText Tra nsfer Protocol的简写,它是由w3c(万维网联盟)制定

的一种应用层协议,用来定义浏览器与web服务器之间如何通信以及通信的数据格式。

  1. Servlet是什么?谈谈你的理解。

参考答案:

  Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特陛,可以生成动

态的Web页面。  它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。与传统的从命令行启动的Java应用程

序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java

虚拟机。

 

 

  1. Web 应用程序的结构   并手工搭建一个Servlet的应用程序 运行测试。
  2. 一个web应用程序是由一组Servlet、HTML页面、类以及其他资源组成的运行在web服务器上的完整的应用程序,以一种结构化的有层次的目录形式存在;
  3. 组成web应用程序的这些文件要部署在相应的目录层次中,根目录代表整个web应用程序的“根”;
  4. 通常将web应用程序的目录放在webapps目录下,在webapps目录下的每一个子目录都是一个独立的web应用程序,子目录的名字就是web应用程序的名字,也就是web应用程序的“根”。用户通过web应用程序的“根”来访问web应用程序中的资源。
  5. 一个例子:servlet规范定义的web应用程序的目录层次
    servlet规范及其生命周期的总结
    说明:①WEB-INF目录下的classes和lib目录都可以存放java类文件,在Servlet容器运行时,Web应用程序的类加载器将首先加载classes目录下的,其次才是lib目录下的类。如果这两个目录下存在同名的类,起作用的将是classes目录下 的类
    ②WEB-INF是一个特殊的目录,这个目录并不属于Web应用程序可以访问的上下文路径的一部分,对客户端来说,这个目录是不可见的。但该目录下的内容对Servlet代码可见。
  6. 研究Servlet 的生命周期

参考答案:

  Servlet是运行在Servlet容器中的,由Servlet容器来负责Servlet实例的查找、创

建以及整个生命周期的管理,Servlet整个生命周期可以分为四个阶段:类装载及实例创建

阶段、实例初始化阶段、服务阶段以及实例销毁阶段。

    1)类装载及实例创建阶段:

    默认情况下,Servlet实例是在接受到第—个请求时进行创建并且以后的请求进行复用,

如果有Servlet实例需要进行一些复杂的操作,需要在初始化时就完成,比如打开文件、初

始化网络连接等,可以配置在服务器启动时就创建实例,具体配置方法为在声明servlet标

签中添加<load-on-sta rtup >l</load-on-startup>标签。

    2)初始化init( ServletC·onfig config):

    一旦Servlet实例被创建,将会调用Servlet的init方法,同时传入ServletConfig

例,传入Servlet的相关配置信息,init方法在整个Servlet生命周期中只会调用一次。

 

  1. <!-- 配置初始化方式为tomcat容器启动后自动初始化该servlet -->
  2.      <load-on-startup>1</load-on-startup>
  3.  

 

    3)服务service():

    为了提高效率,Servlet规范要求—个Servlet实例必须能够同时服务于多个客户端请

求,即service()方法运行在多线程的环境下,Servlet开发者必须保证该方法的线程安全

性。

  4)销毁destory0:

  当Servlet容器将决定结束某个Servlet时,将会调用destory0方法,在destory方

法中进行资源释放,—旦destory方法被调用,Servlet容器将不会再发送任何请求给这个

实例,若Servlet容器需再次使用该Servlet,需重新再实例化该Servlet实例。

 

3.写一个html页面里面有负责登录的form表单,研究Servlet 如何接收页面请求的参数数据。如果登录成功  则在浏览器上输出登录成功 否则输出登录失败。 

 

4.写一个html页面里面有负责注册的form表单,研究Servlet 如何接收页面请求的参数数据。并使用DAO 访问数据库  如果注册成功 则在浏览器上输出注册

成功  否则在浏览器上输出注册失败。

 

HashMap :先说HashMap,HashMap是线程不安全的,在并发环境下,可能会形成环状链表(扩容时可能造成,具体原因自行百度google或查看源码分析),导致get操作时,cpu空转,所以,在并发环境中使用HashMap是非常危险的。

  HashTable : HashTable和HashMap的实现原理几乎一样,差别无非是1.HashTable不允许key和value为null;2.HashTable是线程安全的。但是HashTable线程安全的策略实现代价却太大了,简单粗暴,get/put所有相关操作都是synchronized的,这相当于给整个哈希表加了一把大锁,多线程访问时候,只要有一个线程访问或操作该对象,那其他线程只能阻塞,相当于将所有的操作串行化,在竞争激烈的并发场景中性能就会非常差。

HashTable性能差主要是由于所有操作需要竞争同一把锁,而如果容器中有多把锁,每一把锁锁一段数据,这样在多线程访问时不同段的数据时,就不会存在锁竞争了,这样便可以有效地提高并发效率。这就是ConcurrentHashMap所采用的"分段锁"思想。

ConcurrentHashMap采用了非常精妙的"分段锁"策略,ConcurrentHashMap的主干是个Segment数组。

  所以,对于同一个Segment的操作才需考虑线程同步,不同的Segment则无需考虑。

Segment类似于HashMap,一个Segment维护着一个HashEntry数组

 transient volatile HashEntry<K,V>[] table;

HashEntry是目前我们提到的最小的逻辑处理单元了。一个ConcurrentHashMap维护一个Segment数组,一个Segment维护一个HashEntry数组。

 

 

 

1.    Web 应用程序的结构   并手工搭建一个Servlet的应用程序 运行测试。

在webapps中创建一个项目,项目文件夹中有WEB-INF下有classes和lib目录,

Classes中放的是servlet编译后的class文件,lib中放的是jar包

Html网页跟WEB-INF同级

2.    研究Servlet 的生命周期

创建时机:

    默认情况下 , 当用户第一次访问Servlet时 , 对象创建.

    后续重复访问这个Servlet , 是在重复使用第一次创建的对象.

销毁时机:

    服务器关闭时 或 应用被卸载时 会导致servlet被垃圾回收.

因为servlet的对象 不是我们来维护的, 是tomcat进行创建, 销毁操作的.

为了便于我们更好的使用servlet , JavaEE 为servlet 提供了创建 与 销毁的事件处理.

生命周期存在三个方法:

    1.  init    :   当servlet对象初始化完毕时, 方法执行. 我们通常在这里缓存一些用户请求时 使用的资源.

    2.  service :   当用户每访问一次servlet,  service方法在新的线程中执行一次.

    3.  destroy :   当servlet准备销毁时. 执行. 我们通常在这里释放缓存的资源.

3.写一个html页面里面有负责登录的form表单,研究Servlet 如何接收页面请求的参数数据。如果登录成功  则在浏览器上输出登录成功 否则输出登录失败。 

response.setContentType("text/html;charset=utf-8");

String parameter =request.getParameter("username");

String parameter2 =request.getParameter("password");

              System.out.println(parameter);

              System.out.println(parameter2);

              if("zhang".equals(parameter)&&"1".equals(parameter2)) {

                     response.getWriter().print("登录成功");

              }else {

                     response.getWriter().print("登录失败");

              }

4.

写一个html页面里面有负责注册的form表单,研究Servlet 如何接收页面请求的参数数据。并使用DAO 访问数据库  如果注册成功 则在浏览器上输出注册

成功  否则在浏览器上输出注册失败。

 

String username = request.getParameter("username");

String password = request.getParameter("password");

先写一个html网页servletdao接口实现dao接口

接口中的方法:boolean insertzh(String username,String password);

Servlet接收html中的内容,在将内容传入到dao接口中去.判断是否能插入成功,如果插入成功,就表示注册成功,

如果插入失败,就表示注册失败.

 

 

 

Servlet整个生命周期可以分为四个阶段:类装载及实例创建

阶段、实例初始化阶段、服务阶段以及实例销毁阶段。

1:如何创建

第一种:默认情况下,Servlet实例是在接受到第—个请求时进行创建并且以后的请求进行复用,

第二种:在服务器启动时就创建实例,具体配置方法为在声明servlet标

签中添加<load-on-sta rtup >l</load-on-startup>标签。

 

 

 

第一步:先创建了一个动态工程,在写一个html页面和user类。

第二步:写一个工具类和Dao接口及其Dao实现类。

第三步:创建一个Servlet接收html中的内容, 把内容传入到dao接口中去.判断是否能插入成功,如果插入成功,就表示注册成功,

如果插入失败,就表示注册失败.