一: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 运行原理的更多相关文章

  1. Servlet运行原理以及生命周期

    一.Servlet生命周期: Servlet加载.实例化.初始化.服务.销毁. 1.初始化init(): 当服务启动时,Servlet被装入tomcat或者其他服务器容器时执行(服务器容器从启动到停止 ...

  2. 第三天:Servlet运行原理

    1.  如何不重启tomcat就可以重新加载一个web应用?? 方法:进入tomcat的manager之后点击reload即可. 2.开发一个Servlet,该Servlet可以输出自己的名字并显示当 ...

  3. servlet运行原理

  4. Web应用运行原理

    web应用启动做了什么? 读取web.xml文件   - web.xml常用配置参数: 1).context-param(上下文参数)2).listener(监听器配置参数)3).filter(过滤器 ...

  5. Servlet的生命周期与运行原理

    Servlet的生命周期:    1 加载classLoader    2 实例化 new    3 初始化 init(ServletConfig)    4 处理请求 service doGet d ...

  6. Servlet 工作原理解析

    转自:http://www.ibm.com/developerworks/cn/java/j-lo-servlet/ Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 J ...

  7. JavaWeb总结--Servlet 工作原理解析

    从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力 ...

  8. jsp学习--JSP运行原理,九大隐式对象和JSP常用标签

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  9. Servlet工作原理(转)

    Servlet运行在Servlet容器中,由容器负责Servlet实例的查找及创建工作,并按照Servlet规范的规定调用Servlet的一组方法,这些方法也叫生命周期的方法.具体调用过程如下图所示: ...

随机推荐

  1. H5网站模板——前台和后台

    以下是比较典型的前台或者后台的H5模板: html5优分期大学生分期购物商城模板链接:http://pan.baidu.com/s/1dEUAzBz 密码:j150 红色的五金电气商城网站模板链接:h ...

  2. windows服务器下配置memcache最大内存值

    windows服务器下修改memcache配置要求如下: 1.用内网ip的方式提供web应用服务器调用,不允许直接通过外网调用,如将memcache服务放在192.168.1.168的服务器上 2.修 ...

  3. C++之栈、队列基本用法

    1.C++栈的基本用法: #include<stack> (1)push():向栈内压入一个成员: (2)pop():栈顶弹出一个成员: (3)empty():栈为空返回true,否则返回 ...

  4. unity3d 动画卡帧 动画合成 动画层次

    2013-02-26 16:22 2059人阅读 评论(0) 收藏 举报 unity3d 中动画的添加   http://unity3d.com/support/documentation/Manua ...

  5. AFNet3.0上传图片

    很多iOS应用都会遇到需要上传图片的情况,比如修改个人资料时需要上传自己的头像,最近我也遇到了这种情况,首先参考之前写过的AFNetWorking3.0处理请求头和请求内容. 我们在上述博客的基础之上 ...

  6. Discuz二次开发手册

    Discuz文件说明,有助于discuz爱好者,进行自己的开发,在这里提供方便 admincp.php——后台系统设置主程序文件,一般只处理菜单的显示的访问权限,不处理管理控制. ajax.php—— ...

  7. hdu 1078 FatMouse and Cheese【dp】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意:每次仅仅能走 横着或竖着的 1~k 个格子.求最多能吃到的奶酪. 代码: #include ...

  8. ECharts:企业报表工具

    ECharts.纯Javascript图表库,基于Canvas,底层依赖ZRender.商业产品经常使用图表库,提供直观,生动.可交互,可个性化定制的数据可视化图表.创新的拖拽重计算.数据视图.值域漫 ...

  9. db2将原表列notnull属性修改为null属性的方法

    今天把自己遇到的一个小问题跟大家分享一下如何修改db2数据库表中列的属性--将列的非空属性改为允许空的属性,修改数据表的某一列属性其实很简单但是里面有需要细节需要dba注意,毕竟数据的安全才是最重要的 ...

  10. 《深入浅出WPF》笔记——事件篇

    如果对事件一点都不了解或者是模棱两可的话,建议先去看张子阳的委托与事件的文章(比较长,或许看完了,也忘记看这一篇了,没事,我会原谅你的)http://www.cnblogs.com/JimmyZhan ...