Servlet(一)

来源:互联网 发布:淘宝的支付方式有哪些 编辑:程序博客网 时间:2024/05/21 10:03

一、Servlet是什么

Servlet是服务端的applet,服务端的应用,servlet是由Web服务器加载和执行的,servlet从客户端(通过Web服务器)接收请求,执行某种作业,然后返回结果。

Servlet 架构

Servlet 架构
·客户端通过HTTP提出请求.
·Web服务器接收该请求并将其发给servlet。如果这个servlet尚未被加载,Web服务器将把它加载到Java虚拟机并且执行它。
·servlet将接收该HTTP请求并执行某种处理。
·servlet将向Web服务器返回应答。
·Web服务器将从servlet收到的应答发送给客户端。
由于servlet是在服务器上执行,通常与applet相关的安全性的问题并不需实现。要注意的是Web浏览器并不直接和Servlet通信,Servlet是由Web服务器加载和执行的。


二、Servlet的特点:

跨平台,java语言

可扩展,java语言

持久,只需Web服务器加载一次,而且可以在不同请求之间保持服务(例如一次数据库连接)

安全,从外界调用一个Servlet的唯一方法就是通过Web服务器


三、Servlet生命周期

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

Servlet 通过调用 init () 方法进行初始化。

Servlet 调用 service() 方法来处理客户端的请求。

Servlet 通过调用 destroy() 方法终止(结束)。

最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。


服务器收到请求后检查是否加载创建Servlet对象,没有的话,加载创建,调用init()初始化,调用service() 处理客户端请求,在服务器停止和重启之前调用destory()。

Servlet没有main函数,由Servlet引擎来控制和调度,init只会被调用一次,并保存在内存中,每次有请求时创建一个线程,单一线程都会调用service方法,然后在根据情况调用doGet和doPost。destory方法执行一次,用来关闭 Servlet 数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。


四、通过实例来介绍一下Servlet工作原理

首先要配置开发环境  JDK+Eclipse+Tomcat   http://www.runoob.com/jsp/eclipse-jsp.

首先新建一个项目Dynamic web project


项目目录结构

deployment descriptor:部署的描述。

src:java代码

build:放入编译之后的文件。WebContent:放进写入的页面。

WebContent:存放web.xml,也可以是jsp文件


新建Servlet继承HttpServlet,重写doGet和doPost

//@WebServlet("/MServlet")public class MServlet extends HttpServlet {private static final long serialVersionUID = 1L;       /**     * @see HttpServlet#HttpServlet()     */    public MServlet() {        super();        // TODO Auto-generated constructor stub    }/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.getWriter().write("ssssssss");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}


在web.xml中配置

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">  <servlet>  <servlet-name>test</servlet-name>   <!-- 自定义name -->  <servlet-class>com.demo.MServlet</servlet-class>  <!--完整包名+类名-->  </servlet>   <servlet-mapping>  <servlet-name>test</servlet-name>  <!-- 同上 -->  <url-pattern>/MServlet</url-pattern>  <!--访问的url,去掉了上下文环境  -->  </servlet-mapping></web-app>


在tomcat服务器中跑起来运行,Run As  Server



还有一种方式设置访问的url

在java代码中设置,通过@WebServlet("/MServlet")

@WebServlet("/MServlet")public class MServlet extends HttpServlet{}


这样一个小demo就跑起来了


demo中servlet工作原理


一个http请求的过程

首先根据web.xml文件中的<url-pattern>找到对应的<servlet-mapping>

确定<servlet-mapping>中的<servlet-name>,根据<servlet-name>找到<servlet-class>,然后加载执行该class


Servlet可以被映射到多个url上

<servlet-mapping>  <servlet-name>test</servlet-name>  <!-- 同上 -->  <url-pattern>/MServlet</url-pattern>  <!-- 访问的url,去掉了上下文环境  -->  </servlet-mapping>  <servlet-mapping>  <servlet-name>test</servlet-name>  <!-- 同上 -->  <url-pattern>/other/MServlet</url-pattern>  <!-- 访问的url,去掉了上下文环境  -->  </servlet-mapping>


url可以使用通配符,*.后缀  和   /开头/*结尾  ,如果url中只有一个/,那么这个url对应的Servlet为缺省的Servlet,当找不到匹配的url时,就会跳转到缺省Servlet

还可以设置<load-on-startup>来让web应用启动时就装载Servlet实例对象,并调用init方法





一篇不错的文章

http://www.cnblogs.com/rocomp/p/4808924.html


原创粉丝点击