一个Servlet的生命周期如下:
1 如果在容器配置文件web.xml中设置了load-on-startup字段,则表示容器在启动时就会自动创建servlet的实例,同时执行其init方法。
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>MySevelet</servlet-name>
<servlet-class>sevelet.MySevelet</servlet-class>
<init-param>
<param-name>initparam</param-name>
<param-value> test-Servelet</param-value>
</init-param>
<load-on-startup>10</load-on-startup>
</servlet>
init方法执行顺序是先执行
public void init() throws ServletException {
//先执行无参数的init方法
}
public void init(ServletConfig config) throws ServletException {
//接着执行初始化时的有参init方法
super.init(config);
String initParam=config.getInitParameter("initparam");
}
;如果没有设置load-on-startup字段,则在第一个客户端访问该servlet时,在开始创建该servlet的实例,同时执行init方法,无论是那种方式,init方法都只会执行一次。
2.当一个客户端的请求到达Server服务器后,Server创建一个请求对象request,Server创建一个响应对象response对象
3.Server激活Servlet的service()方法,传递请求request和响应response对象作为参数
4.service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息
5.service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如doGet()或doPost()或程序员自己开发的新的方法。
6.对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法。一般Servlet只初始化一次(只有一个对象),当Server不再需要Servlet时(一般当Server关闭时),Server调用Servlet的Destroy()方法。
一般在开发过程中,最容易犯得错误就是没有对servlet进行并发安全性的注意。servlet本身是unsafe的,因此在使用时,最好是不要对其增加状态变量,如果非要使用,那么必须对其进行同步互斥操作,保证状态的一致性和正确性,安全性。最简单的方法就是对service方法加上synchronized关键字,servlet的每一个客户端请求都是通过service方法进行处理的,这样每一个客户端在访问时操作变成了顺序执行的了,故其结果必然不会产生混乱,但是效率却要大大折扣。当然其它的更好的方法就是对所有的原子操作进行 加锁,从而使得在保证并发的同时,使得状态一致。
分享到:
相关推荐
使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
在Servlet转发到JSP页面时,此时浏览器地址栏上显示的是Servlet的路径,而若JSP页面的超链接还是相对于该JSP页面的地址且该Servlet和该JSP页面不在同一个文件夹下时,则会出现路径混乱问题。 2. 绝对路径概念 相对于...
浅谈servlet3异步原理与实践 本篇文章主要介绍了servlet3异步原理与实践,详细的介绍了servlet和异步的流程使用,具有一定的参考价值。 一、什么是Servlet Servlet 是基于 Java 的 Web 组件,由容器进行管理,来...
Servlet 实现网页重定向的方法 在 Web 开发中,网页重定向是一种常见的技术,用于将用户从一个 URL 重定向到另一个 URL。Servlet 是 Java Web 开发中的一种重要组件,今天我们将讨论如何使用 Servlet 实现网页...
Servlet和JSP是Java Web开发中的两种核心技术,它们在生成动态网页方面有着密切的关系。Servlet是一种服务器端的Java应用程序,它被设计用来扩展Web服务器的功能,处理来自客户端(通常是浏览器)的请求,并向客户端...
Servlet是Java Web开发中的核心组件,它是一种用于处理动态web内容的技术,由Sun Microsystems公司(现已被Oracle收购)提供。Servlet本质上是一个Java小程序,需要实现Servlet接口,以便服务器能够识别并调用。在...
本文将深入探讨Servlet中的两个关键概念:HttpServletRequest(request)和HttpServletResponse(response),以及它们在B/S(Browser/Server)架构中的作用。 HttpServletRequest对象代表客户端(浏览器)发起的...
进阶学习时,你需要关注的是ActionServlet的扩展,比如自定义拦截器,以及ActionForm的变种,如DynaActionForm和LazyValidatorForm,它们提供了动态属性和延迟验证功能。此外,Struts的验证框架、分发Action、...
浅谈运用Java Web解决用户登录的安全问题 在开发项目时,系统的安全问题是必须要考虑的。在 Java Web 中,运用 JSP 和 Servlet 技术可以很好的解决用户登录系统的身份验证和授权的安全问题。 1. 用户登录系统的...
它的核心目标是简化Java Servlet和JSP应用的开发,提高可维护性、可扩展性和组件的复用性。Struts框架在JSP Model2架构上建立,实现了MVC模式,使得业务逻辑、数据显示和用户交互得以有效分离。 **MVC模式详解** ...
Servlet需要在web.xml中进行配置或使用注解来声明URL模式与Servlet的映射关系。 在Servlet中,为了处理AJAX请求,通常会使用一个方法来接收请求,处理业务逻辑,然后将结果以JSON格式返回给前端。在处理JSON数据时...
标题“cos应用浅谈”可能指的是腾讯云的对象存储服务(Cloud Object Storage,简称COS),这是一个云端存储解决方案,用于存放大量的非结构化数据,如文本、图片、视频等。在这个场景下,我们可以从多个角度来深入...
这篇博客文章“浅谈Quartz(WEB)”可能探讨了如何在Web应用中集成和使用Quartz。 首先,Quartz的核心概念包括作业(Job)、触发器(Trigger)和调度器(Scheduler)。作业是实际要执行的任务,触发器则定义了何时...
JSP(JavaServer Pages)和Servlet都是Java Web开发中用于构建动态网页的技术,但它们各自承担的角色不同。JSP主要用于视图展示,而Servlet则主要处理应用的控制逻辑。在实际开发中,JSP和Servlet之间的数据传递是...
Java反射技术浅谈 Java反射技术是一种强大的技术,它允许Java程序访问、检测和修改它自己的状态或行为。通过反射,Java程序可以加载一个运行时才知道名称的类,获取其完整的内部信息,并创建其对象,或者对其属性...
- **Servlet与JSP**:了解Servlet的工作原理及生命周期,掌握JSP页面编写技巧。 - **MVC模式**:学习Struts框架实现MVC架构的方式。 - **ORM映射**:使用Hibernate框架进行对象关系映射。 - **依赖注入**:掌握...
此时我们使用一个容器,如tomcat、jetty、jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架如maven+spring+struct+hibernate、maven+spring+springmvc+mybatis;最后再选择一个数据库管理系统来存储数据...
### MyEclipse+Flex+Blazeds 入门浅谈 #### 一、开发环境的搭建 在构建基于 MyEclipse、Flex 和 Blazeds 的开发环境时,我们需要准备以下工具: - **MyEclipse 6.5**:一款集成开发环境,用于 Java 应用程序开发。...
**JSP安全浅谈**,安全性是任何Web应用都需要重视的问题。对于JSP来说,主要的威胁包括跨站脚本攻击(XSS)、SQL注入、跨站请求伪造(CSRF)等。为了防御这些攻击,开发者应遵循最佳实践,例如:对用户输入进行严格...