用自己的话表达出来-Servlet
什么是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的更多相关文章
- Servlet和JSP
Servlet 一.Servlet 的生命周期. servlet 有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet.Servlet 接口 的 ...
- java web 中的servlet讲解
首先,解释一下解释一下什么是servlet?说一说Servlet的生命周期? servlet有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet ...
- Servlet&JSP中的知识点
先sun提出的是Servlet体系,这个体系使得使用JAVA的程序员也能开发基于B/S架构的WEB应用程序,使用Servlet类将HTTP请求和响应封装在标准JAVA类中来实现各种WEB应用方案.随着 ...
- 说一说Servlet 的生命周期
答:servlet 有良好的生存期的定义, 包括加载和实例化. 初始化. 处理请求以及服务结束.这个生存期由 javax.servlet.Servlet 接口的 init,service 和 dest ...
- Java --Servlet 32个经典问题
Servlet方面 1.说一说Servlet的生命周期? Servlet有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet.Servlet接口 ...
- 说一说Servlet的生命周期
servlet有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达. Se ...
- 线程,JSP,Servlet面试题
线程编程方面 60.java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 答:有两种实现方法,分别是继承Thread类与实现Runna ...
- Spring,SpringMVC,MyBatis,Hibernate,Servlet的生命周期,jsp有哪些内置对象,Tomcat,Cookie和Session的作用以及区别,oracle,MYSQL等面试题总结
1. 什么是Spring,谈谈你对Spring的理解 Spring是我们JAVA开发人员在搭建后台时选用的一个轻量级的开源框架,Spring框架目前也是功能丰富,十分优秀企业级采用最多的一个框架. S ...
- 请说一说Servlet的生命周期?
servlet有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达. Se ...
随机推荐
- Hdu 3962 Microgene (AC自己主动机+矩阵)
标题效果: 构造一个字符串,使得有两个和两个以上的目标串.长短L这一系列有多少串都. IDEAS: 只有全款减有1一些字符串,没有目标就是答案. 假定数据是非常小的,够用dp解.dp[i][j][k] ...
- .net Framework各个版本之间的发展
原文:.net Framework各个版本之间的发展 上个星期看到了.NET 4.0框架退休日期逐渐临近文章,发现自己一直在使用NET FrameWork,身为一个NET程序员,里面大概的区别自己还 ...
- Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-级别选择ScrollView
于MenuScene.cpp 点击单机游戏后会调用 Director::getInstance()->pushScene(MapChooseScene::createScene()); 进入到关 ...
- Middleware详解
Middleware详解 在第1章项目结构分析中,我们提到Startup.cs作为整个程序的入口点,等同于传统的Global.asax文件,即:用于初始化系统级的信息(例如,MVC中的路由配置).本章 ...
- CSS3之重新定义鼠标右键
效果图: html: <div id="rightkey"> <ul> <li><img src="images/xmgl.pn ...
- 前端学习笔记(zepto或jquery)——对li标签的相关操作(五)
对li标签的相关操作——has与find的差异性 demo代码: <ul> <li><p>1</p></li> <li>2< ...
- 内存排查 valgrind
内存问题排查工具 --- valgrind 1. 概述 2. Valgrind 3. 内存泄漏监测 3.1. 示例代码 3.2. 编译它 3.3. 用Valgrind监测进程的内存泄漏 4. 悬挂指针 ...
- js中从blob提取二进制
文章结构: 一.所遇到的问题 二.解决方法 一. 服务器端通过websocket向浏览器端传输图片(二进制),需要根据不同的图片把图片显示在不同的位置,可行的一个方法是先把图片转化成二进制数组,再把二 ...
- Codeforces #180 div2 C Parity Game
// Codeforces #180 div2 C Parity Game // // 这个问题的意思被摄物体没有解释 // // 这个主题是如此的狠一点(对我来说,),不多说了这 // // 解决问 ...
- Php设计模式(三):行为型模式part2
原文详见:http://www.ucai.cn/blogdetail/7023?mid=1&f=5 可以在线运行查看效果哦! <接上文> 5.中介者模式(Mediator) : 用 ...