- 浏览: 138658 次
文章分类
最新评论
-
wangyudong:
很有帮助的代码实例,测试Spring Boot REST AP ...
1、springboot入门案例helloworld与集成hibernate -
wangyudong:
学习了,的确是一个非常好的Spring boot实例,很快就写 ...
1、springboot入门案例helloworld与集成hibernate
在传统Web开发中,我们处理Http请求最常用的方式是通过实现Servlet对象来进行Http请求的响应。Servlet是J2EE的重要标准之一,规定了Java如何响应Http请求规范。通过HttpServletRequest和HttpServletResponse对象,我们能够轻松地与Web容器交互。
Web容器使用servlet处理http请求
当Web容器收到一个Http请求时,Web容器中的一个主调度线程会从事先定义好的线程中分配一个当前工作线程,将请求分配给当前的工作线程,由该线程来执行对应的servlet对象中的servce方法。当这个工作线程正在执行的时候,Web容器收到另外一个请求,主调度线程会同样从线程池中选择另外一个工作线程来服务新的请求。Web容器本身并不关心这个新的请求是否访问的是同一个Servlet实例。因此,得出:对于同一个Servlet对象的多个请求,Servlet的service方法将在一个多线程的环境中并发执行。所以,Web容器默认采用单实例(单个servlet实例)多线程的方式来处理http请求。也就是说,Servlet对象并不是一个线程安全的对象。
Servlet的多线程机制
Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该servlet时,一般不会再实例化该servlet类,也就是有多个线程在使用这个实例,servlet容器会自动使用线程池等技术来支持系统的运行。
测试servlet多线程机制
开两个窗口同时访问http://localhost:8080/test_t/servlet/TestServlet该servlet,会看到成员counter的增加是在多个线程同时运行。
Servlet线程安全问题主要是由实例变量造成的,因此在Servlet中应避免使用实例变量。如果应用程序设计无法避免使用实例变量,那么使用同步来保护要使用的实例变量,但为保证系统的最佳性能,应该同步可用性最小的代码路径。
servlet生命周期
servlet生命周期分为三个阶段
1、初始化阶段 调用init()方法
2、响应客户请求阶段 调用service()方法
3、终止阶段 调用destroy()方法
(1)初始化阶段
在以下时刻servlet容器装载servlet:
1.1 servlet容器启动时自动装载某些servlet,实现它只需要在web.xml文件中的<servlet></servlet>之间添加如下代码:<load-on-startup>1</load-on-startup>
1.2 在servlet容器启动后,客户首次向servlet发送请求。
1.3 servlet类文件被更新后,重新装载servlet。
servlet被装载后,servlet容器创建一个servlet实例并且调用servlet的init()方法进行初始化。在servlet的整个生命周期内,init()方法只调用一次。
(2)终止阶段
在web应用被终止,或servlet容器终止运行,或servlet容器重新装载servlet新实例时,servlet容器会先调用servlet的destroy()方法,在destroy()方法中可以释放掉servlet所占用的资源。
(3)Servlet响应请求阶段:
对于用户到达Servlet的请求,Servlet容器会创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息,处理该请求,并通过ServletResponse对象向客户返回响应信息。
Servlet何时被创建:
1,默认情况下,当WEB客户第一次请求访问某个Servlet的时候,WEB容器将创建这个Servlet的实例。
2,当web.xml文件中如果<servlet>元素中指定了<load-on-startup>子元素时,Servlet容器在启动web服务器时,将按照顺序创建并初始化Servlet对象。
注意:在web.xml文件中,某些Servlet只有<serlvet>元素,没有<servlet-mapping>元素,这样我们无法通过url的方式访问这些Servlet,这种Servlet通常会在<servlet>元素中配置一个<load-on-startup>子元素,让容器在启动的时候自动加载这些Servlet并调用init()方法,完成一些全局性的初始化工作。
servlet与Jsp比较:
都可以生在动态网页。
jsp的优点是擅长网页制作,生成动态页面比较直观,缺点是不容易跟踪与排错。
servlet是纯java语言,擅长于处理流程和业务逻辑,缺点是生成动态网页不直观。
Web容器使用servlet处理http请求
当Web容器收到一个Http请求时,Web容器中的一个主调度线程会从事先定义好的线程中分配一个当前工作线程,将请求分配给当前的工作线程,由该线程来执行对应的servlet对象中的servce方法。当这个工作线程正在执行的时候,Web容器收到另外一个请求,主调度线程会同样从线程池中选择另外一个工作线程来服务新的请求。Web容器本身并不关心这个新的请求是否访问的是同一个Servlet实例。因此,得出:对于同一个Servlet对象的多个请求,Servlet的service方法将在一个多线程的环境中并发执行。所以,Web容器默认采用单实例(单个servlet实例)多线程的方式来处理http请求。也就是说,Servlet对象并不是一个线程安全的对象。
Servlet的多线程机制
Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该servlet时,一般不会再实例化该servlet类,也就是有多个线程在使用这个实例,servlet容器会自动使用线程池等技术来支持系统的运行。
测试servlet多线程机制
web.xml <servlet> <servlet-name>TestServlet</servlet-name> <servlet-class>com.action.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/servlet/TestServlet</url-pattern> </servlet-mapping> TestServlet.java package com.action; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestServlet extends HttpServlet { private int counter = 0; public TestServlet() { super(); } public void init() throws ServletException { } public void destroy() { super.destroy(); // Just puts "destroy" string in log } public void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ for (int c = 0; c < 10; c++) { response.getWriter().println("Counter = " + counter + "<BR>"); try { Thread.sleep(1000); counter++; } catch (Exception e) { e.printStackTrace(); } } } }
开两个窗口同时访问http://localhost:8080/test_t/servlet/TestServlet该servlet,会看到成员counter的增加是在多个线程同时运行。
Servlet线程安全问题主要是由实例变量造成的,因此在Servlet中应避免使用实例变量。如果应用程序设计无法避免使用实例变量,那么使用同步来保护要使用的实例变量,但为保证系统的最佳性能,应该同步可用性最小的代码路径。
servlet生命周期
servlet生命周期分为三个阶段
1、初始化阶段 调用init()方法
2、响应客户请求阶段 调用service()方法
3、终止阶段 调用destroy()方法
(1)初始化阶段
在以下时刻servlet容器装载servlet:
1.1 servlet容器启动时自动装载某些servlet,实现它只需要在web.xml文件中的<servlet></servlet>之间添加如下代码:<load-on-startup>1</load-on-startup>
1.2 在servlet容器启动后,客户首次向servlet发送请求。
1.3 servlet类文件被更新后,重新装载servlet。
servlet被装载后,servlet容器创建一个servlet实例并且调用servlet的init()方法进行初始化。在servlet的整个生命周期内,init()方法只调用一次。
(2)终止阶段
在web应用被终止,或servlet容器终止运行,或servlet容器重新装载servlet新实例时,servlet容器会先调用servlet的destroy()方法,在destroy()方法中可以释放掉servlet所占用的资源。
(3)Servlet响应请求阶段:
对于用户到达Servlet的请求,Servlet容器会创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息,处理该请求,并通过ServletResponse对象向客户返回响应信息。
Servlet何时被创建:
1,默认情况下,当WEB客户第一次请求访问某个Servlet的时候,WEB容器将创建这个Servlet的实例。
2,当web.xml文件中如果<servlet>元素中指定了<load-on-startup>子元素时,Servlet容器在启动web服务器时,将按照顺序创建并初始化Servlet对象。
注意:在web.xml文件中,某些Servlet只有<serlvet>元素,没有<servlet-mapping>元素,这样我们无法通过url的方式访问这些Servlet,这种Servlet通常会在<servlet>元素中配置一个<load-on-startup>子元素,让容器在启动的时候自动加载这些Servlet并调用init()方法,完成一些全局性的初始化工作。
servlet与Jsp比较:
都可以生在动态网页。
jsp的优点是擅长网页制作,生成动态页面比较直观,缺点是不容易跟踪与排错。
servlet是纯java语言,擅长于处理流程和业务逻辑,缺点是生成动态网页不直观。
发表评论
-
tomcat学习一(简单web服务器示例)
2016-09-20 17:14 487Request.java package com.chen ... -
8、在docker上部署简单javaweb应用
2016-04-24 19:12 8971、创建容器javaweb1,并添加数据卷便于将安装文件共享到 ... -
7、Docker容器的数据管理
2016-04-24 17:56 1159一、Docker容器的数据卷 ... -
6、Docker容器的网络连接
2016-04-24 17:54 1718一、Docker容器的网络基础 dock ... -
4、Docker镜像
2016-04-22 09:05 845一、什么是Docker镜像 ... -
5、Docker客户端和守护进程
2016-04-22 09:04 1019一、Docker的C/S模式 ... -
3、Docker容器常用命令与在容器中部署静态网站
2016-04-22 09:04 900一、容器的基本操作 ... -
2、Docker简介及docker组成部分
2016-04-22 09:03 17881、Docker提供了一个容器 ... -
1、Ubuntu14.04安装docker
2016-04-22 09:02 706一、安装前检查 1、内核版本 uname - ... -
6、java连接redis集群
2016-04-18 18:26 26451、使用Jedis 连接集群会报 MOVED错误 packag ... -
redis集群搭建
2016-04-18 16:15 593redis-cli -h 127.0.0.1 -p 6749 ... -
ubuntu14.04卸载redis并手动安装redis-3.0
2016-04-18 16:14 11551、ubuntu 卸载redis 1)卸载软件 ... -
redis五种数据类型常用基本命令总结
2016-04-14 19:00 758redis-cli 启动redis客户端,连接到redis服务 ... -
java连接远程服务器redis常遇问题
2016-04-14 18:58 32551、先在本地CMD命令中ping IP地址,网络是否正常 2、 ... -
redis虚拟机环境搭建与安装redis
2016-04-12 09:14 1785下载VMware 下载ubuntu14.iso 在VMware ... -
dubbo入门案例
2016-04-07 19:47 1220windows安装zookeeper 把下载的zookeepe ... -
webservice cxf简单案例
2016-03-30 18:44 699cxf简单java项目案例 IHelloWorld.java ... -
spring mvc教程视频
2016-01-18 17:29 8141. 韩顺平 Spring视频教程 http://www.yu ... -
Redis与Memcached比较
2016-01-13 11:01 819作为内存数据缓冲 ... -
Redis原理与简述
2016-01-13 10:46 12679Redis是一个开源的key-value存储系统。 ...
相关推荐
Servlet的生命周期包括三个阶段:初始化、执行和终止。初始化阶段,Servlet会被加载并实例化,调用`init()`方法;执行阶段,Servlet通过`service()`方法处理请求,根据HTTP方法(如GET、POST)调用相应的`doGet()`或...
5. **Servlet容器**:理解Servlet容器(如Tomcat)是如何管理Servlet的,包括实例化、线程安全问题和请求分发。 6. **部署应用**:学习如何将Java Web应用打包成war文件,然后部署到Tomcat服务器上。 7. **MVC模式...
5. **Servlet和JSP**:学习Servlet的使用和生命周期,了解Cookie、Session及其关系,以及Servlet的线程安全问题。同时,探讨JSP的声明、脚本片段、表达式、注释、指令和动作。 **第二阶段:Java Web综合应用** 1. ...
- **线程概述**:这部分介绍了 Java 多线程的基本概念,包括线程的生命周期、创建方式等。 - **同步机制**:例如 `synchronized` 关键字和 `ReentrantLock` 类,用于保证线程安全。 - **线程池**:使用 `...
232、说出Servlet的生命周期,并说出Servlet和CGI的区别。 55 233、说出在JSP页面里是怎么分页的? 55 234、存储过程和函数的区别 55 235、事务是什么? 55 236、游标的作用?如何知道游标已经到了最后? 55 237、...
9、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当...
文档概述了Servlet的生命周期: - **init()**: Servlet初始化时调用。 - **service()**: 处理客户端请求的核心方法,内部根据请求类型调用`doGet()`或`doPost()`等。 - **destroy()**: 在Servlet销毁前调用,进行...
第6章 生命周期(Lifecycle) 43 6.1 概述 43 6.2 Lifecycle接口 43 6.3 LifecycleEvent类 44 6.4 LifecycleListener接口 44 6.5 LifecycleSupport类 44 6.6 应用程序 45 6.6.1 ex06.pyrmont.core.SimpleContext 45 ...
15》Servlet 的生命周期,Servlet 与 CGI 的区别Servlet 生命周期包括加载、初始化、服务、销毁四个阶段。Servlet 相比于CGI,具有更好的性能和持久性,因为CGI每次请求都会创建新的进程,而Servlet在服务器中常驻。...
Servlet的生命周期包括以下几个阶段: - **加载和实例化**: 当容器首次启动或者接收到第一个请求时,容器会加载并实例化Servlet。 - **初始化**: 调用`init`方法进行初始化工作。 - **处理请求**: 每次请求到达时,...
#### 6、说出Servlet的生命周期,并说出Servlet和CGI的区别 **Servlet的生命周期**: 1. **初始化阶段**:当Servlet首次被加载到内存中时,服务器会调用`init()`方法进行初始化。 2. **服务阶段**:每次客户端请求...
8. **Java Servlet**:讲解Servlet的基本概念、生命周期、请求响应处理流程,以及Servlet与HTTP协议的关系。 9. **我也谈谈Guice**:可能讨论Google的依赖注入框架Guice,包括其核心概念(如Module、Injector、...
此外,还介绍了RequestDispatcher接口的forward()和include()方法,以及Servlet生命周期方法如init()、service()和destroy()的作用。 #### 六、EJB(Enterprise JavaBeans) EJB是JAVA EE平台的核心组件之一,用于...
【WEB】servlet 生命周期 35 【WEB】阐述JDBC操作数据库的步骤 36 【WEB】JSP内置对象 37 【WEB】JSP中的四种作用域 38 【WEB】转发(forward)和重定向(redirect)的区别 38 forward(转发): 38 redirect...
2. **Servlet生命周期**:包括初始化(init)、服务(service)和销毁(destroy)三个主要阶段。 3. **Servlet配置**:通过web.xml文件或注解方式(如@WebServlet)来配置Servlet。 4. **编写步骤**: - 创建一个...