学习理解实现Servlet的三种方式

在讨论servlet的三种实现方式之前,应该先了解一下servlet的生命周期。

第一步:装载servlet,由容器完成。

第二步:创建一个servlet实例。

第三步:调用servlet的init()方法,该方法只会在第一次访问servlet时被调用一次。

第四步:调用servlet的service()方法,一般业务逻辑在这里处理, 该方法在访问该servlet时,会被调用。

第五步:调用servlet方法,销毁servlet实例。


实现Servlet的三种方式

(以下代码来源于http://blog.csdn.net/zhiaini06/article/details/52729604,在此只是借代码分析学习不用做任何商业用途。侵权可删!)

1 实现Servlet接口,然后实现接口中的五个方法,代码为:

public class Hello implements Servlet{

     //该函数用于初始化servlet,类似于类的构造函数,该函数只会被调用一次
    public void init(ServletConfig parm1) throws ServletException {
        System.out.println("init it!");
    }

    public ServletConfig getServletConfig() {
        // TODO: Add your code here
        return null;
    }

     //这个函数用于处理业务逻辑
     //当用户每访问servlet时,都会调用
     //req:用于获得客户端(浏览器)信息
     //res:用于向客户端(浏览器)返回信息
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        //从res中得到PrintWriter
        System.out.println("Service it");
        PrintWriter pw = res.getWriter();
        pw.println("Hello world!");
    }

    public String getServletInfo() {
        return "";
    }

     //销毁,释放内存,三种方式会触发destroy
     //1. reload该servlet(webApps) 2. 关闭tomcat 3.关机
    public void destroy() {
        System.out.println("destroy it!");
    }
} 
查看servletAPI文档对于servlet的初始化是这样描述的:

Servlet引擎载入Servlet后,Servlet引擎必须对Servlet进行初始化,在这一过程中,你可以读取一些固定存储的数据、初始化JDBC的连接以及建立与其他资源的连接。

在初始化过程中,javax.servlet.Servlet接口的init()方法提供了Servlet的初始化信息。这样,Servlet可以对自己进行配置。

init()方法获得了一个Servlet配置对象(ServletConfig)。这个对象在Servlet引擎中执行,并允许Servlet通过它获处相关参数。这个对象使得Servlet能够访问ServletContext对象。


Servlet接口

servlet的初始化是通过servlet的init()方法实现的。

这个接口定义了一个Servlet:一个在Web服务器上继承了这个功能的Java类。

方法

public void init(ServletConfig config) throws ServletException;

Servlet引擎会在Servlet实例化之后,置入服务之前精确地调用init方法。在调用service方法之前,init方法必须成功退出。

如果init方法抛出一个ServletException,你不能将这个Servlet置入服务中,如果init方法在超时范围内没完成,我们也可以假定这个Servlet是不具备功能的,也不能置入服务中。


ServletConfig接口

这个接口定义了一个对象,通过这个对象,Servlet引擎配置一个Servlet并且允许Servlet获得一个有关它的ServletContext接口的说明。每一个ServletConfig对象对应着一个唯一的Servlet。


2 继承GenericServlet,只需要实现一个方法:service

public class HelloGen extends GenericServlet{
    //重写一个方法service即可
    public void service(ServletRequest req, ServletResponse res){
        //返回Hello world, generic
        try{
            PrintWriter pw = res.getWriter();
            pw.println("Hello generic");
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}

public abstract void service(ServletRequest request, ServletResponse

response) throws ServletException, IOException;

这是一个抽象的方法,当你扩展这个类时,为了执行网络请求,你必须执行它。


3 继承HttpServlet,复写doGetdoPost方法

public class HelloHttp extends HttpServlet{
    //处理get请求
    public void doGet(HttpServletRequest req, HttpServletResponse res){
        //业务逻辑
        try{
            PrintWriter pw = res.getWriter();
            pw.println("hello, Http");
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }

    public void doPost(HttpServletRequest req, HttpServletResponse res){
        this.doGet(req,res);    
    }
}
不论用户请求类型是get还是post,服务器处理过程完全相同,那么可只在doPost中编写处理过程,在doGet中调用doPost就行了,反之也可以doGet中处理,doPost中调用doGet。
表单提交数据get请求和post请求的区别:
     1.从安全性看get<post。get提交的数据会在浏览器的地址栏显示
     2.从提交的内容大小看get<post。get提交的数据不能大于2K,而post提交的数据理论上不受限制,但是实际编程中建议不要大于64K
      3.从请求响应速度看get>post。get请求服务器立即处理请求,而post请求可能形成一个队列请求











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值