关于Servlet的原理以及常用类

简介:

Servlet是JavaWeb的三大组件之一,它属于动态资源。

在Servlet中通常需要:

  接收请求数据;

  处理请求;

  完成响应。

实现Servlet有三种方式:

  实现javax.servlet.Servlet接口;

  继承javax.servlet.GenericServlet类;

  继承javax.servlet.http.HttpServlet类;

 

与Servlet的生命周期相关的方法有:

  void init(ServletConfig);

  void service(ServletRequest,ServletResponse);

  void destroy();

服务器会在Servlet第一次被访问时创建Servlet,或者是在服务器启动时创建Servlet。如果服务器启动时就创建Servlet,那么还需要在web.xml文件中配置(<load-on-startup>0</load-on-startup>)。也就是说默认情况下,Servlet是在第一次被访问时由服务器创建的。

 

而且一个Servlet类型,服务器只创建一个实例对象.

在Servlet被创建后,服务器会马上调用Servlet的void init(ServletConfig)方法。请记住, Servlet出生后马上就会调用init()方法,而且一个Servlet的一生。

当服务器每次接收到请求时,都会去调用Servlet的service()方法来处理请求。服务器接收到一次请求,就会调用service() 方法一次,所以service()方法是会被调用多次的。

 

Servlet是不会轻易离去的,通常都是在服务器关闭时Servlet才会离去!在服务器被关闭时,服务器会去销毁Servlet,在销毁Servlet之前服务器会先去调用Servlet的destroy()方法

 

Servlet与线程安全

因为一个类型的Servlet只有一个实例对象,那么就有可能会现时出一个Servlet同时处理多个请求,那么Servlet是否为线程安全的呢?答案是:“不是线程安全的”。这说明Servlet的工作效率很高,但也存在线程安全问题!

所以我们不应该在Servlet中便宜创建成员变量,因为可能会存在一个线程对这个成员变量进行写操作,另一个线程对这个成员变量进行读操作。

 

GenericServlet概述

GenericServlet是Servlet接口的实现类,我们可以通过继承GenericServlet来编写自己的Servlet。

 

HttpServlet类是GenericServlet的子类,它提供了对HTTP请求的特殊支持,所以通常我们都会通过继承HttpServlet来完成自定义的Servlet。

 

HttpServlet类中提供了service(HttpServletRequest,HttpServletResponse)方法,这个方法是HttpServlet自己的方法,不是从Servlet继承来的。

在HttpServlet的service(HttpServletRequest,HttpServletResponse)方法会去判断当前请求是GET还是POST,如果是GET请求,那么会去调用本类的doGet()方法,如果是POST请求会去调用doPost()方法,这说明我们在子类中去覆盖doGet()或doPost()方法即可。

 

ServletContext

服务器会为每个应用创建一个ServletContext对象:

l  ServletContext对象的创建是在服务器启动时完成的;

l  ServletContext对象的销毁是在服务器关闭时完成的。

  ServletContext对象的作用是在整个Web应用的动态资源之间共享数据!

 

 

JSP---->Servlet---->编译.class文件 执行.

 

扩展: 关于Session的创建和销毁

Session:session将数据保存在服务器端.通过cookie回写了一个JSESSIONID.

* session的创建和销毁:

创建的时候:

服务器端第一次调用getSession()方法的时候创建的.

* 销毁:

* 第一种:非正常关闭服务器.(正常关闭session不会销毁---序列化.tomcat/work路径下.)

* 第二种:默认30分钟.tomcat/conf/web.xml中.

* 第三种:手动调用了session.invalidate();

 


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/4090989.html,如需转载请自行联系原作者

相关文章
|
27天前
新闻发布项目——Servlet类(doRegServlet )
新闻发布项目——Servlet类(doRegServlet )
9 0
|
27天前
新闻发布项目——Servlet类(doNewsAddServlet)
新闻发布项目——Servlet类(doNewsAddServlet)
10 0
|
27天前
新闻发布项目——Servlet类(doLoginServlet)
新闻发布项目——Servlet类(doLoginServlet)
12 0
|
27天前
新闻发布项目——Servlet类(doDelNewsServlet )
新闻发布项目——Servlet类(doDelNewsServlet )
11 0
|
27天前
新闻发布项目——Servlet类(doDelCategoryServlet )
新闻发布项目——Servlet类(doDelCategoryServlet )
8 0
|
27天前
新闻发布项目——Servlet类(doCategoryModifyServlet )
新闻发布项目——Servlet类(doCategoryModifyServlet )
10 0
|
27天前
新闻发布项目——Servlet类(doCategoryaddServlet)
新闻发布项目——Servlet类(doCategoryaddServlet)
17 0
|
7月前
Servlet启动原理和原始运行方式
Servlet启动原理和原始运行方式
42 0
Servlet启动原理和原始运行方式
|
7月前
|
安全 Java 应用服务中间件
【JavaWeb】Tomcat底层机制和Servlet运行原理
网络通信:Tomcat使用Java的Socket API来监听特定的端口(通常是8080),接收来自客户端的HTTP请求。 线程池:Tomcat使用线程池来处理并发的请求。当有新的请求到达时,Tomcat会从线程池中获取一个空闲线程来处理该请求,这样可以提高处理效率。 生命周期管理:Tomcat负责管理Servlet和其他Web组件的生命周期,包括初始化、请求处理和销毁等阶段。(init(), run())
|
27天前
新闻发布项目——Servlet类(doNews_readServlet )
新闻发布项目——Servlet类(doNews_readServlet )
9 0