JavaWeb自学笔记,Servlet技术基础

Servlet结构体系

Servlet是运行在Web服务器端的Java应用程序,它使用Java语言编写,具有Java语言的优点。与Java程序的区别是,Servlet对象主要封装了对HTTP请求的处理,并且它的运行需要Servlet容器的支持,在Java Web应用方面,Servlet的应用占有十分重要的地位,它在Web请求的处理功能方面也非常强大。
Servlet实质上就是按Servlet规范编写的Java类,但它可以处理Web应用中的相关请求,Servlet是一个标准,它由Sun公司定义,其具体细节由Servlet容器进行实现,如Tomcat,JBoss等。在J2EE架构中,Servlet结构体系的UML如下图。
在这里插入图片描述
在上图中,Servlet对象,ServletConfig对象与Serializable对象是接口对象,其中Serializable是java.io包种的序列化接口,Servlet对象和ServletConfig对象是javax.servlet包中定义的对象,这两个对象定义了Servlet的基本方法以及封装了Servlet的相关配置信息,GenericServlet对象是一个抽象类,它分别实现了上述3个接口,该对象为Servlet接口及ServletConfig接口提供了部分实现,但它并没有对HTTP请求处理进行实现,这一操作由它的子类HttpServlet进行实现。这个对象为HTTP请求中POST,GET等类型提供了具体的操作方法,所以通常情况下,我们所编写的Servlet对象都继承于HttpServlet,在开发中,所使用的具体的Servlet对象就是HttpServlet对象,原因是HttpServlet是Servlet的实现类,并提供了HTTP请求的处理方法。

Servlet技术特点

Servlet使用Java语言编写,它不仅继承了Java语言中的优点,而且还对Web的相关应用进行了封装,同时Servlet容器还提供了对应用的相关扩展,无论是在功能,性能,安全等方面都十分优秀,其技术特点表现在以下几个方面。
1,功能强大
Servlet采用Java语言编写,它可以调用Java API中的对象及方法。此外,Servlet对象对Web应用进行了封装,提供了Servlet对Web应用的编程接口,还可以对HTTP请求进行相应的处理,如处理提交数据,会话跟踪,读取和设置HTTP头信息等。由于Servlet既拥有Java提供的API,而且还可以调用Servlet封装的ServletAPI编程接口,因此,它在业务功能方面十分强大。
2,可移植
Java语言是跨平台的,所谓跨平台是指程序的运行不依赖于操作系统平台,它可以运行到多个系统平台中,如目前常用的操作系统,Windows,Linux和UNIX等,由于Servlet使用Java语言编写,所以,Servlet继承了Java语言的优点,程序一次编码,多平台运行,拥有超强的可移植性。
3,性能高效
Servlet对象在Servlet容器启动时被初始化,当第一次被请求时,Servlet容器将其实例化,此时它驻存于内存中。如果存在多个请求,Servlet不会再被实例化,仍然由此Servlet对其进行处理。每一个请求是一个线程,而不是一个进程,因此,Servlet对请求处理的性能是十分高效的。
4,安全性高
Servlet使用了Java的安全框架,同时Servlet容器还可以为Servlet提供额外的功能,它的安全性是非常高的,
5,可扩展
Java语言是面向对象的编程语言,Servlet由Java语言编写,所以它继承了Java的面向对象的优点,在业务逻辑处理中,可以通过封装,继承等来扩展实际的业务需要,其扩展性非常强。

Servlet于JSP的区别

Servlet是使用JavaServlet接口(API)运行在Web应用服务器上的Java程序,其功能十分强大,它不但可以处理HTTP请求中的业务逻辑,而且还可以输出HTML代码来显示指定页面。而JSP是一种在Servlet规范之上的动态网页技术,在JSP页面中,同样可以编写业务逻辑处理HTTP请求,也可以通过HTML代码来编辑页面,在实现功能上,Servlet与JSP貌似相同,实质存在一定的区别,主要表现在以下几个方面。
1,角色不同
JSP页面可以存在HTML代码与Java代码并存的情况,而Servlet需要承担客户请求与业务处理的中间角色,只有调用固定的方法才能将动态内容输出为静态的HTML,所以,JSP更具有显示层的角色。
2,编程方法不同
Servlet与JSP在编程方法上存在很大的区别,使用Servlet开发Web应用程序需要遵循Java的标准,而JSP需要遵循一定的脚本语言规范,在Servlet代码中,需要调用Servlet提供的相关API接口方法,才可以对HTTP请求及业务进行处理,对于业务逻辑方面的处理功能更显强大。然而在JSP页面中,通过HTML代码与JSP内置对象实现对HTTP请求及页面的处理,其显示界面的功能更加强大。
3,Servlet需要编译后运行
Servlet需要在Java编译器编译后才可以运行,如果Servlet在编写完成或修改后,没有被重新编译,则不能运行在Web容器中。而JSP则与之相反,JSP由JSP Container对其进行管理,它的编辑过程也由JSPContainer对JSP进行自动编辑,所以,无论JSP文件被创建还是修改,都不需要对其编译即可执行。
4,速度不同
由于JSP页面由JSP Container对其进行管理,在每次执行不同内容的动态JSP页面时,JSP Container都要对其自动编译,所以,它的效率低于Servlet的执行效率。而Servlet在编译完成之后,则不需要再次编译,可以直接获取及输出动态内容,在JSP页面中的内容没有变化的情况下,JSP页面的编辑完成之后,JSP Container不会再次对JSP进行编译
在JSP产生之前,无论是页面设计还是业务逻辑代码都需要编写于Servlet中,虽然Servlet在功能方面很强大,完全可以满足对Web应用的开发需求,但如果每一句HTML代码都由Servlet的固定方法来输出,则操纵会过于复杂。而且在页面中,往往还需要用到CSS央视代码,JS脚本代码等,对于程序开发人员而言,其代码量将不断增加,所以操作十分繁琐。针对这一问题,Sun公司提出了JSP技术,可以将HTML,CSS,JS等相关代码直接写入到JSP页面中,从而简化了程序员对Web程序的开发。

Servlet代码结构

在Java中通常所说的Servlet是指HttpServlet对象,在声明一个对象为Servlet时,需要继承HttpServlet类,HttpServlet类是Servlet接口的一个实现类,继承该类后,可以重写HttpServlet类中的方法对HTTP请求进行处理。

import javax.annotation.PostConstruct;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class TestServlet extends HttpServlet {
    @Override
    //初始化方法
    public void init() throws ServletException {
        super.init();
    }

    @Override
    //处理HTTP Get请求
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }

    @Override
    //处理HTTP Post请求
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    @Override
    //出列HTTP Put请求
    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPut(req, resp);
    }

    @Override
    //处理HTPP Delete请求
    protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doDelete(req, resp);
    }

    @Override
    //销毁方法
    public void destroy() {
        super.destroy();
    }
}

上述代码显示了一个Servlet对象的代码结构,TestServlet类通过继承HttpServlet类被声明为一个Servlet对象。该类中包含6个方法,其中init()方法与destory()方法为Servlet初始化与生命周期结束所调用的方法,其余的4个方法为Servlet针对处理不同的HTTP请求类型所提供的方法,其作用如注释中所示。
在一个Servlet对象中,最常用的方法是doGet()与doPost()方法,这两个方法分别用于处理HTTP的Get与Post请求。例如,form表单对象所声明的method属性为post,提交到Servlet对象处理时,Servlet将调用doPost()方法进行处理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值