Servlet 运行原理
一:servlet定义
Servlet是一个Java应用程序,运行在服务器端,用来处理客户端请求并作出响应的程序。
二:简单servlet实例
| //导入所需的包
import javax.servlet.http.*; import javax.servlet.*; import java.io.*; public class FirstServlet extends HttpServlet { //处理请求的方法 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException { //数据发送给客户端—>控制台方式输出 //System.out.println(“Hello Servlet”); //数据发送给客户端—>HTML页面输出 resp.setContentType(“text/html”); resp.getWriter().print(“<html>”); resp.getWriter().print(“<head>”); resp.getWriter().print(“</head>”); resp.getWriter().print(“<body>”); resp.getWriter().print(“Hello World”); resp.getWriter().print(“</body>”); resp.getWriter().print(“</html>”); } } |
三:servlet配置到Tomcat中去
Tomcat是一个web容器,也叫web服务器。我们都知道J2EE有十三个标准,这些标准大部分都是接口,Tomcat只是实现了JSP 和 servlet 开发标准。实现了所有的开发标准,就是应用程序服务器,比如Jboss。
编译好的servlet类只能运行在tomcat容器中,客户端浏览器不可以直接访问Servlet,需要在web.xml中配置一下
| <servlet>
<servlet-name>FirstServlet</servlet-name> <servlet-class>FirstServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FirstServlet</servlet-name> <url-pattern>/servlet/FirstServlet</url-pattern> </servlet-mapping> |
Tomcat启动成功后,在浏览器中输入:http://localhost:8080/abingtest/servlet/FirstServlet
四:servlet运行原理
当我们在浏览器中输入http://localhost:8080/abingtest/servlet/FirstServlet的时候,Tomcat是如何找到我们的servlet ,运行,并返回我们想看到的页面的呢。
1. WebApplication的标准目录结构:
WEB-INF/classes
/lib
Web.xml
也就是一个完整的web应用程序目录下,必须包含以上的目录结构。
Classes 文件夹下是项目中用到的类文件,均由JDK编译成了.class文件
Lib文件夹是我们项目中引用的jar包
Web.xml是整个web应用程序的配置文档。
了解了这些,我们再来看Tomcat的工作流程。
2. Tomcat解析URL
a) 首先来看URL中包含的信息:”协议” + “端口号” + “路径(项目名称+文件路径)”
Tomcat启动后,监听我们的8080端口,当有Url请求发过来之后,解析出项目名称 abingtest,然后到webapps目录下搜索到该项目文件夹。
b) 项目文件找到后,开始寻找类文件。
这个时候Tomcat去Web.xml文件中寻找<servlet-mapping> 配置节中包含”servlet/FirstServlet”字符串,进而找到该类文件所在的位置。

3. Servelt中的doGet() 和 doPost() 方法
我们写的FirstServlet 继承了HttpServlet ,重写了HttpServlet中的doGet() 方法,HttpServlet中还有一个doPost()方法。这两个方法都是用来处理Http请求的。Servlet会根据我们提交表单的方法(method=post/get)调用service方法来自动选择(我们在下一篇文章中来详细说明一下Service方法是如何自动调用FirstServlet中的doGet()方法的)
4. Servlet如何接收数据
| import javax.servlet.http.*;
import javax.servlet.*; import java.io.*; public class FirstServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { //获取表单数据 String userName = request.getParameter(“userName”); } } |
Http协议会将网页中的所有内容包装成为一个request对象传递给servlet ,Servlet通过这个对象拿到表单中的所有数据,处理完成之后,通过Response对象返回给客户端浏览器。
5. Servlet的生命周期
Servlet的生命周期是由Tomcat容器管理的
a) 客户发出请求—>Web 服务器转发到Web容器Tomcat;
b) Tomcat主线程对转发来用户的请求做出响应创建两个对象:HttpServletRequest和HttpServletResponse;
c) 从请求中的URL中找到正确Servlet,Tomcat为其创建或者分配一个线程,同时把2创建的两个对象传递给该线程;
d) Tomcat调用Servlet的servic()方法,根据请求参数的不同调用doGet()或者doPost()方法;
e) 假设是HTTP GET请求,doGet()方法生成静态页面,并组合到响应对象里;
Servlet线程结束,Tomcat将响应对象转换为HTTP响应发回给客户,同时删除请求和响应对象。
从该过程中,我们可以理解Servlet的生命周期:Servlet类加载(对应3步);Servlet实例化(对应3步);调用init方法(对应3步);调用service()方法(对应4、5步);;调用destroy()方法(对应6步)。

五:Servlet生命周期的各个阶段

Servlet 运行原理的更多相关文章
- Servlet运行原理以及生命周期
一.Servlet生命周期: Servlet加载.实例化.初始化.服务.销毁. 1.初始化init(): 当服务启动时,Servlet被装入tomcat或者其他服务器容器时执行(服务器容器从启动到停止 ...
- 第三天:Servlet运行原理
1. 如何不重启tomcat就可以重新加载一个web应用?? 方法:进入tomcat的manager之后点击reload即可. 2.开发一个Servlet,该Servlet可以输出自己的名字并显示当 ...
- servlet运行原理
- Web应用运行原理
web应用启动做了什么? 读取web.xml文件 - web.xml常用配置参数: 1).context-param(上下文参数)2).listener(监听器配置参数)3).filter(过滤器 ...
- Servlet的生命周期与运行原理
Servlet的生命周期: 1 加载classLoader 2 实例化 new 3 初始化 init(ServletConfig) 4 处理请求 service doGet d ...
- Servlet 工作原理解析
转自:http://www.ibm.com/developerworks/cn/java/j-lo-servlet/ Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 J ...
- JavaWeb总结--Servlet 工作原理解析
从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力 ...
- jsp学习--JSP运行原理,九大隐式对象和JSP常用标签
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
- Servlet工作原理(转)
Servlet运行在Servlet容器中,由容器负责Servlet实例的查找及创建工作,并按照Servlet规范的规定调用Servlet的一组方法,这些方法也叫生命周期的方法.具体调用过程如下图所示: ...
随机推荐
- ExCEL操作技巧集锦,持续更新
1.格式刷 word里面格式化的快捷键很好用,但是excel里面的快捷键用不了,经百度得知: excel双击格式化按钮,可以开启连续应用格式刷模式,单击之后关闭,这样比快捷键好用多了,如下图
- PHP--关于模板的原理和解析(php模板原理)
此内容用作笔记,以备日后查看,此内容为学习李炎恢课程而来,并非自己所创,如有问题请私信~ 将PHP代码和静态HTML代码进行分离,使代码的可读性和维护性得到显著提高. 使用模板引擎: 我们所说的模板是 ...
- chrome 一进入调试页面就会自己主动打断点
近期在用chrome调试页面时.一刷新页面总会自己主动打断点.自己鼓捣了一下,发现 把它改为这个样子的时候就能够解决问题,即把调试面板上的第5个button从Deactivate breakpoint ...
- Strategy模式
Strategy模式 Strategy模式要解决的问题和Template模式类似.都是为了把算法的声明和算法的实现解耦.Template模式是通过继承来实现的,而Strategy模式是通过组合来实现的 ...
- android studio - 隐藏编辑器上面的竖线
android studio 的代码编辑器上面默认有一条竖线不知道是干什么用的,很难看.可以用下列方法进行隐藏. 取消选中这个复选框即可.
- ipk CONTROL 目录的作用
CONTROL文件夹下的文件意义preinst - shell script,在ipk包开始安装前执行;postinst - shell script,在ipk包安装后执行; ...
- java - day10 - uptest
package day03; public class UpTest { public static void main(){ Aoo o = new Aoo(); o.a = 3; o.b = 3; ...
- mysql之log-slave-updates参数
1.引言 使用Mysql的replication机制实现主从同步时,其是由三个线程实现了,主库一个I/O线程,从库一个I/O线程和一个SQL线程.配置时主库需要开始bin-log参数,即在配置文件中添 ...
- hive分桶 与保存数据的方式
创建分桶的表 create table t_buck(id int ,name string) clustered by (id ) sorted by (id) into 4 buckets ; ...
- text-encoding正确使用姿势
蓝牙打印,需要转字符串为gb2312到uint8array.果断使用了一把text-encoding,始终不对. https://github.com/inexorabletash/text-enco ...