什么是Servlet

  Servlet就是工作在服务器端的类,该类可以处理用户传过来的请求,也可以通过响应向用户输送数据。

如何使用Servlet

  Servlet就是处理用户的HTTP请求,然后回送HTTP响应,若是没有Servlet技术出现的话,我们还要手动的使用一些基本、底层的类去解析HTTP。现在有了Servlet的底层封装,我们可以基于Servlet快速的开发。我们可以让我们编写的类继承HttpServlet,HttpServlet也是继承了GenericServlet,里面定义了与HTTP相关的各种方法,如GET、POST、HEAD等,我们只需要在自己编写的类上重写对应的请求方法就可以处理用户通过给HTTP方法传送过来的请求了。

  例如在doGet方法里面,有两个参数,一个是HttpServletRequest,另外一个是HttpServletResponse,前面一个对应的就是用户的HTTP请求,后面一个就是你响应给用户的HTTP响应。在HttpServletRequest里面,你可以获取HTTP请求的各种信息,如用户的IP,用户通过哪个端口发送,请求参数,请求头,各种路径,编码格式等。在HttpServletResponse里面,你可以设置你的响应内容,响应头,响应编码等。

Servlet的生命周期

  (1)加载实例化。当用户请求一个Servlet的时候,如果Servlet容器中没有这个Servlet的实例的话,容器就会加载实例化一个该Servlet。

  (2)初始化。在进行处理请求前,会调用Servlet的init方法进行初始化,在init方法里面你可以写你要初始化的代码。

  (3)处理请求。Servlet会调用父类的service方法,该方法处理过程主要是这样的,首先在HttpServletRequest参数中通过getMethod方法拿到这个Http请求的是什么方法,然后判断这个方法是什么类型的,如果是GET方法,就对应到doGet方法中处理,前面你的Servlet类中必须要重写这个方法,不是的话报405的错误,就是说你请求的这个方法不被访问。

  (4)销毁。当Servlet容器决定要删除这个Servlet实例的时候,就会调用这个Servlet的destroy方法。例如当你运行着Tomcat,然后你修改了改Servlet的时候,Servlet容器就是删除你以前的Servlet实例,然后加载实例化新的这个。

          

Servlet是单例的

  为什么设计Servlet为单例呢?我们可以先想想如果Servlet不是单例的话,很多客户通过访问一个Servlet的话,每次都new出一个实例的话,内存很快就爆了,所以设计出单例是合理的。

  怎么看Servlet是单例的?我们只需要在doXXX方法中打印this,就可以判断是不是用同一个实例。

单实例多线程的Servlet模型

  Servlet规范定义中,在默认的情况下,Servlet容器对声明的每一个Servlet,只创建一个实例,如果有多个客户同时访问这个Servlet,Servlet容器如何处理这多个请求呢?答案就是多线程,Servlet维护了一个线程池来服务请求,线程池实际上是等待执行代码的一组线程,这些线程叫做工作者线程,当容器收到一个访问Servlet的请求,调度者线程从线程池中选取一个线程来执行Servlet里面的service方法。

           

Servlet简单例子

/**
* Servlet的工作流程
* @author xujianguo <Ray_xujianguo@163.com>
* @date 2014-6-21
* @CopyRight 2014 Topview Inc.
* @version V1.0
*/
@WebServlet(name="servlet_work", urlPatterns="/servlet_work")
public class ServletWork extends HttpServlet {
private static final long serialVersionUID = 1L; @Override
public void init() throws ServletException {
System.out.println("------ ServletWork Init ------");
} @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("------ ServletWork DoGet ------");
resp.getWriter().write("ServletWork");
} @Override
public void destroy() {
System.out.println("------ ServletWork Destroy ------");
}
}

用自己的话表达出来-Servlet的更多相关文章

  1. Servlet和JSP

    Servlet 一.Servlet 的生命周期. servlet 有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet.Servlet 接口 的 ...

  2. java web 中的servlet讲解

    首先,解释一下解释一下什么是servlet?说一说Servlet的生命周期? servlet有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet ...

  3. Servlet&JSP中的知识点

    先sun提出的是Servlet体系,这个体系使得使用JAVA的程序员也能开发基于B/S架构的WEB应用程序,使用Servlet类将HTTP请求和响应封装在标准JAVA类中来实现各种WEB应用方案.随着 ...

  4. 说一说Servlet 的生命周期

    答:servlet 有良好的生存期的定义, 包括加载和实例化. 初始化. 处理请求以及服务结束.这个生存期由 javax.servlet.Servlet 接口的 init,service 和 dest ...

  5. Java --Servlet 32个经典问题

    Servlet方面 1.说一说Servlet的生命周期? Servlet有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet.Servlet接口 ...

  6. 说一说Servlet的生命周期

    servlet有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达. Se ...

  7. 线程,JSP,Servlet面试题

    线程编程方面 60.java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 答:有两种实现方法,分别是继承Thread类与实现Runna ...

  8. Spring,SpringMVC,MyBatis,Hibernate,Servlet的生命周期,jsp有哪些内置对象,Tomcat,Cookie和Session的作用以及区别,oracle,MYSQL等面试题总结

    1. 什么是Spring,谈谈你对Spring的理解 Spring是我们JAVA开发人员在搭建后台时选用的一个轻量级的开源框架,Spring框架目前也是功能丰富,十分优秀企业级采用最多的一个框架. S ...

  9. 请说一说Servlet的生命周期?

    servlet有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达. Se ...

随机推荐

  1. leetcode 之 Unique Paths

    Unique Paths A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagra ...

  2. 网页上弹出pop窗口实例,(document).height()与$(window).height()的区别

    #dvbg{background-color:#666666; position:absolute; z-index:99; left:0; top:0; display:none; width:10 ...

  3. 蜗牛—JSP学习乘法表页面输出

    <%@page import="java.text.SimpleDateFormat" pageEncoding="utf-8"%> <%@ ...

  4. ACM之跳骚---ShinePans

    Description Z城市居住着非常多仅仅跳蚤.在Z城市周六生活频道有一个娱乐节目.一仅仅跳蚤将被请上一个高空钢丝的正中央.钢丝非常长,能够看作是无限长.节目主持人会给该跳蚤发一张卡片.卡片上写有 ...

  5. [cocos2d-x 3.0] 触摸显示器

    一.基本使用 1.首先,声明一个监听器 有两种,EventListenerTouchOneByOne 和 EventListenerTouchAllAtOnce,前者是单点触控.后者是多点触控.后者我 ...

  6. 清理收缩VMware虚拟机MacOS系统的vmdk文件大小

    屌丝行和差的主要标准,尽管持续性眼贪婪mbp.但是,从另一方面限制患有米,只是在虚拟机中播放MacOS.(我不会告诉你我的笔记本i5+120SSD+500HHD+12G内存,跑MacOS虚拟机一点不卡 ...

  7. 做ACM该伤不起啊!!

    開始搞ACM啊!! ! .! ! ! ..! 从此踏上了尼玛不归路啊! !! !!! !!.!!! 谁特么跟劳资讲算法是程序设计的核心啊..! ! ! .  尼玛除了面试题就没见过用算法的地方啊!!! ...

  8. html转换为纯文本,支持撇号

    /// <summary> /// html转换为纯文本 /// </summary> /// <param name="source">< ...

  9. Socket 由浅入深系列--------- 简单实现编程(三)

    socket 由浅入深 原理(一)介绍了一些,以下也就是简单实现,并未考虑其它性能化! 使用TCP的server客户机举例 server 设置一个简单的TCPserver涉及下列步骤: 调用 sock ...

  10. Objective-c中的单例

    单例是指静态分配的实例,就是只开辟一块内存,不会重新开辟内存,而 iphone sdk 中全是这种实例,例如[UIApplication sharedApplication] 返回一个指向代表应用程序 ...