Servlet是J2EE12种规范之中的一个。它也是用java语言编写的程序,其本身也是一种JAVA类,在须要的时候被实例化,不须要的时候自己主动销毁,Servlet的执行是在Servlet容器内执行,容器负责调度Servlet,同一时候也控制着它的生命周期。Servlet主要目的是被用来处理来自client上所发出的请求。然后将处理的结果用HTML页面的形式返回,形成动态网页展示给client。

生命周期


                      

载入与实例化:

       由Servlet容器负责。当容器检測到须要Servlet来响应第一个请求时,创建Servlet实例。当servlet容器启动后,要必须知道这个Servlet类在哪里,Servlet能够在本地文件系统、远程文件系统或其它网络服务中。servlet一旦被成功载入,会调用默认的Servlet构造方法。

初始化:

        Servlet实例被创建后,会调用Servletde init()方法来初始化这个对象,其目的在于让Servlet在处理由client发过来的请求之前完毕一些初始化工作,比方说建立数据库的链接、获取配置信息等。这种方法仅仅能被调用一次,也就是仅仅会初始化一次。在这初始化期间,会从ServletConfig对象(web.xml中配置)中获取初始化信息,保存配置数据,方便以后使用。

请求处理:

        init()方法成功运行后,会处理client的请求。在service方法中,通过ServletRequest对象得到client的相关信息和请求信息,对请求处理后。会调用ServletResponse对象的方法设置响应信息。请求到来时,service方法决定请求的类型get、post。并把这些请求发给相应的doget、dopost,为了响应特定类型的HTTP请求。我们就必须重载doget、dopost。

服务终止:

       当容器检測到一个Servlet实例须要从服务中被移除时,容器就会调用destroy()方法,让该实例释放它所使用的资源,保存数据到持久存储。当须要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法。

释放实例,随后会被Java的垃圾收集器所回收。假设再次须要这个Servlet处理请求,Servlet容器会创建一个新的Servlet实例。

 

实例


html例如以下:

<html>
<head>
<title>登陆</title>
</head>
<body>
<form action=http://localhost:8080/test_servlet/LoginServlet">
用户:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登陆"><br>
</form>
</body>
</html>

java类例如以下:

import javax.servlet.*;
import java.io.*;
import javax.servlet.http.*;
public class LoginServlet extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
String username=request.getParameter("username");
String password=request.getParameter("password"); System.out.println("username="+username);
System.out.println("password="+password); response.setContentType("text/html;charset=GB18030");
//response.getWriter().println("Login Success");
response.getWriter().println("<html>");
response.getWriter().println("<head>");
response.getWriter().println("<title>登陆信息</title>");
response.getWriter().println("</head>");
response.getWriter().println("<body>");
response.getWriter().println("欢迎【"+ username+"】用户登陆成功! ");
response.getWriter().println("</body>");
response.getWriter().println("</html>");
}
}

web.xml例如以下:

<?xml version="1.0" encoding="ISO-8859-1"?

>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true"> <servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping> </web-app>

解析:

       第一:Servlet的名字。包类
<servlet>
<servlet-name>MyServlet(为servlet取的名字)</servlet-name>
<servlet-class>LoginServlet(包名.类名)</servlet-class>
</servlet>

第二:映射、訪问的地址(url)

<servlet-mapping>
<servlet-name>MyServlet(与上面的servlet名字要全然一样)</servlet-name>
<url-pattern><span style="font-family:Arial, Helvetica, sans-serif;">/LoginServlet</span>(Servlet訪问路径)</url-pattern>
</servlet-mapping>

效果例如以下:

             
            

长处


       执行在Webserver、Servlet容器中,能够扩展server的功能;
       能够同其它资源交互,从而生成返回给client响应的内容,即动态网页。
       使用JAVA编写,跨平台。
       运用垃圾回收机制,避免内存回收问题。       

总结


        Servlet事实上是执行在server端的小应用程序;
        依据client请求的方式,要重写doGet和doPost方法;
        要使容器正确识别Servlet,则必须填写配置web.xml;
        Servlet生命周期声明包括三个方法:init()、service()、destroy();

Servlet的生命周期过程中,创建Servlet实例、调用实例的init()和destroy()方法都仅仅进行一次,初始化完毕后。Servlet容器会将该实例保存在内存中

J2EE之Servlet初见的更多相关文章

  1. j2ee,jsp,servlet文件下载server端

    1.getOutputStream() has already been called for this response 报错的原因: 使用tomcat容器调用response.getOutputS ...

  2. J2EE修炼之四书五经[转自2004年程序员]

    J2EE修炼之四书五经 作者:彭晨阳 J2EE其实没有四书五经,因为J2EE一直如汹涌澎湃的大江,推陈出新,不断高速发展,这是一种带领我们走向未来的技术.当然,如何在这种气势如虹的潮流之中不至于迷失方 ...

  3. 图解JSP与Servlet的关系

      Servlet是Java提供的用于开发Web服务器应用程序的一个组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容.Servlet是平台独立的Java类,编写一个Servlet, ...

  4. Servlet的学习(一)

    初识Servlet Servlet是一门专门用于开发动态web资源的技术,Sun公司在其API中提供了一个Servlet接口(当然,我们不会去直接实现这个接口,而是去继承其实现类会更好),因此,狭义的 ...

  5. tomcat各版本和jsp、jstl、servlet的依赖关系(转)

    Servlet / JSP / Tomcat  Version  Servlet/ JSP    Tomcat  2.5/2.1 6.0.18 2.4/2.0 5.5.27 2.3/1.2 4.1.3 ...

  6. day05 Servlet 开发和 ServletConfig 与 ServletContext 对象

    day05 Servlet 开发和 ServletConfig 与 ServletContext 对象 1. Servlet 开发入门 - hello world 2. Servlet 的调用过程和生 ...

  7. java-jsp与servlet

    Java Servlet 是运行在带有支持 Java Servlet 规范的解释器的 web 服务器上的 Java 类. 每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服 ...

  8. Java Web -- Servlet(1) 必备知识

    学习Java WEB开发必备的基本概念: 1.WEB 本意是蜘蛛网和网的意思.在网页设计中我们称为网页的意思. 现广泛译作网络.互联网等技术领域.表现为三种形式,即超文本(hypertext).超媒体 ...

  9. [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配

    环境:  操作系统:64位WIN7   数据库:SQL Server 2000 SP1  开发语言:J2EE 在Servlet连接数据库时出错提示:  [Microsoft][ODBC 驱动程序管理器 ...

随机推荐

  1. (转)如何将本地git仓库中的代码上传到github

    1,  在github上新建一个仓库,比如为:CSS3Test,仓库地址为:https://github.com/hyuanyuanlisiwei/CSS3Test 2,本地git仓库中的文件项目为C ...

  2. iOS 中 JSON 数据交换格式

         JSON (JavaScript Object Notation)是一种轻量级的数据交换格式. JSON 的详细教程,能够參见 JSON 中国:http://www.json.org.cn/ ...

  3. 云计算之路-阿里云上-新发现:又一种与虚拟内存有关的CPU波动情况

    在云上真是无奇不有,昨天偶然间发现在IIS的应用程序池回收设置中,仅仅设置了一下基于虚拟内存限制的回收,就引发了CPU有规律的波动.在这篇博文中,我们将向大家汇报一下云计算之路上的这个小发现. 在之前 ...

  4. Android布局及控件的属性说明

    android常用的一些属性说明   android:id --- 为控件指定相应的ID android:text --- 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件 ...

  5. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何修改代码字体

    工具-选项   TwinCAT,PLC Environment,Text editor,然后在文本区域中修改字体     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i. ...

  6. C++11 可变参数模板构造string列表

    #include <iostream> #include <cstdint> #include <list> #include <string> tem ...

  7. FEC

    什么是FEC http://zhidao.baidu.com/link?url=sbk7ue4n75HCbumrznBlAwdZAII8ZK2Xp3HTJ5BRkLJtDLFN3MGp9KOlrHVp ...

  8. Hadoop-2.4.1学习之Streaming编程

    在之前的文章曾提到Hadoop不仅支持用Java编写的job,也支持其他语言编写的作业,比方Hadoop Streaming(shell.python)和Hadoop Pipes(c++),本篇文章将 ...

  9. 优秀运维人员20道必会iptables面试题(转载)

    (一)企业面试口试题 1.详述iptales工作流程以及规则过滤顺序? 2.iptables有几个表以及每个表有几个链? 3.iptables的几个表以及每个表对应链的作用,对应企业应用场景? 4.画 ...

  10. 批量将代码中的 get_XXX 替换成 XXX

    使用 sed 只需要一个命令: sed -s -i 's/set_\([A-Za-z0-9_]*\)/\1 = /g' ` find . -name '*.cs' | xargs grep -l se ...