servlet规范及其生命周期的总结
- 什么是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。客户端需要安装专用
的客户端软件。
- 简述什么是HTTP协议?
参考答案:
HTTP协议是HyperText Tra nsfer Protocol的简写,它是由w3c(万维网联盟)制定
的一种应用层协议,用来定义浏览器与web服务器之间如何通信以及通信的数据格式。
- Servlet是什么?谈谈你的理解。
参考答案:
Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特陛,可以生成动
态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。与传统的从命令行启动的Java应用程
序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java
虚拟机。
- Web 应用程序的结构 并手工搭建一个Servlet的应用程序 运行测试。
- 一个web应用程序是由一组Servlet、HTML页面、类以及其他资源组成的运行在web服务器上的完整的应用程序,以一种结构化的有层次的目录形式存在;
- 组成web应用程序的这些文件要部署在相应的目录层次中,根目录代表整个web应用程序的“根”;
- 通常将web应用程序的目录放在webapps目录下,在webapps目录下的每一个子目录都是一个独立的web应用程序,子目录的名字就是web应用程序的名字,也就是web应用程序的“根”。用户通过web应用程序的“根”来访问web应用程序中的资源。
- 一个例子:servlet规范定义的web应用程序的目录层次
说明:①WEB-INF目录下的classes和lib目录都可以存放java类文件,在Servlet容器运行时,Web应用程序的类加载器将首先加载classes目录下的,其次才是lib目录下的类。如果这两个目录下存在同名的类,起作用的将是classes目录下 的类
②WEB-INF是一个特殊的目录,这个目录并不属于Web应用程序可以访问的上下文路径的一部分,对客户端来说,这个目录是不可见的。但该目录下的内容对Servlet代码可见。 - 研究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生命周期中只会调用一次。
- <!-- 配置初始化方式为tomcat容器启动后自动初始化该servlet类 -->
- <load-on-startup>1</load-on-startup>
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网页servletdao接口实现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接口中去.判断是否能插入成功,如果插入成功,就表示注册成功,
如果插入失败,就表示注册失败.
- 什么是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。客户端需要安装专用
的客户端软件。
- 简述什么是HTTP协议?
参考答案:
HTTP协议是HyperText Tra nsfer Protocol的简写,它是由w3c(万维网联盟)制定
的一种应用层协议,用来定义浏览器与web服务器之间如何通信以及通信的数据格式。
- Servlet是什么?谈谈你的理解。
参考答案:
Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特陛,可以生成动
态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。与传统的从命令行启动的Java应用程
序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java
虚拟机。
- Web 应用程序的结构 并手工搭建一个Servlet的应用程序 运行测试。
- 一个web应用程序是由一组Servlet、HTML页面、类以及其他资源组成的运行在web服务器上的完整的应用程序,以一种结构化的有层次的目录形式存在;
- 组成web应用程序的这些文件要部署在相应的目录层次中,根目录代表整个web应用程序的“根”;
- 通常将web应用程序的目录放在webapps目录下,在webapps目录下的每一个子目录都是一个独立的web应用程序,子目录的名字就是web应用程序的名字,也就是web应用程序的“根”。用户通过web应用程序的“根”来访问web应用程序中的资源。
- 一个例子:servlet规范定义的web应用程序的目录层次
说明:①WEB-INF目录下的classes和lib目录都可以存放java类文件,在Servlet容器运行时,Web应用程序的类加载器将首先加载classes目录下的,其次才是lib目录下的类。如果这两个目录下存在同名的类,起作用的将是classes目录下 的类
②WEB-INF是一个特殊的目录,这个目录并不属于Web应用程序可以访问的上下文路径的一部分,对客户端来说,这个目录是不可见的。但该目录下的内容对Servlet代码可见。 - 研究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生命周期中只会调用一次。
- <!-- 配置初始化方式为tomcat容器启动后自动初始化该servlet类 -->
- <load-on-startup>1</load-on-startup>
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网页servletdao接口实现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接口中去.判断是否能插入成功,如果插入成功,就表示注册成功,
如果插入失败,就表示注册失败.