用自己的话表达出来-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 ...
随机推荐
- Putty是一个专业的SSH连接客户端
http://www.putty.ws/PuTTY-LinuxVPS Putty是一个专业的SSH连接客户端,当然可以用来连接Linux操作系统的VPS.下文是Putty连接工具的使用方法与详细教程, ...
- shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、功能、select
1.expr计算整数变量值 s=`expr 2 + 3` 运算符号和參数之间要有空格分开: 2.let命令 let s=(2+3)*4 echo $s 3.for语句 for 变量 in 列表 do ...
- Session与Caching
Session与Caching 在之前的版本中,Session存在于System.Web中,新版ASP.NET 5中由于不在依赖于System.Web.dll库了,所以相应的,Session也就成了A ...
- linux_之sed用法
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以 将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为: sed ...
- 源码安装saltstack的时候遇到的问题
公司的系统都是内网,无法连接互联网,所以没办法只有源码安装了. 看了下saltstack的官网,需要安装的包有 https://docs.saltstack.com/en/latest/topics/ ...
- js拾遗:appendChild 添加移动节点
原文:js拾遗:appendChild 添加移动节点 写js一年多了,一直以为自己很牛逼,开始写各种博文分享,昨天写了一篇<浅谈 IE下innerHTML导致的问题>在看了下面的评论,我才 ...
- java语言内部类和匿名内部类
内部类 在类定义也有类,在该类上的内部被称为一个内部类. 访问功能: 1,内部类可以直接访问外部类成员,它包含私有成员 2,外部类需要访问内部类的成员将需要建立一流的内部对象. 一般用于类的设计. 分 ...
- 基于Cocos2dx + box2d 愤怒的小鸟的实现Demo
1. Demo初始界面 2. 游戏界面 3. 精确碰撞检測 4. 下载 压缩文件文件夹 AngryBird source 愤慨的小鸟Demo源码,基于Cocos2dx C++,以及box2d技 ...
- UIApplicationMain方法介绍
在IOS程序的main函数中执行了一个UIApplicationMain这个函数,下面介绍以下这个函数的作用. int UIApplicationMain(int argc, char *argv[] ...
- selenium2入门 用selenium安装、加载、启用插件(一)
一:下载 下载地址是:http://docs.seleniumhq.org/download/