Jave web之Servlet

1.Servlet是什么

        符合servlet规范的java组件,运行在servlet容器当中,用于扩展web服务器功能。
        通俗一点,只要是实现了servlet接口的java程序,均称Servlet,它可以做java类能做的事情,主要包括:业务逻辑,数据访问。
        Servlet是由sun公司命名的,Servlet = Server + Applet(Applet表示小应用程序),Servlet是在服务器端运行的小程序。

        servlet容器:符合servlet规范的web服务器。比如Tomcat,Jboss...

2.如何去理解Servlet的作用

2.1从应用程序的架构去理解

应用程序的架构一般包括三层的C/S和两层B/S。
三层C/S: 

         client:界面、部分业务逻辑、通信
         server:通信、业务逻辑
         db:数据的管理
         复杂的部分:通信模块一般要采用自定义协议来编码和解码数据,同时,为方便业务逻辑处理模块来处理,通信模块一般还要将接受到的数据转变为一个对象(在该对象中,封装了客户端发送过来的请求数据),这个对象我们称为"请求对象";另外,业务逻辑处理模块将处理之后的结果一般也会封装为一个"响应对象"(在该对象中,封装了处理之后的结果数据)。该响应对象由通信模块编码后,再发送给客户端。
          
B/S:
        Client:标准化了, 采用标准的浏览器 + html来实现。浏览器会将html数据采用标准的http协议编码后发送给web服务器。
        Server:标准化了,采用符合规范的servlet容器+servlet来实现。servlet容器实现了通信模块,servlet只需要实现业务逻辑即可。(其实,servlet容器也会像三层c/s架构中的通讯模块一样,会将请求数据,即浏览器发送过来的数据,封装成为一个请求对象,也会将servlet处理之后的结果封装为响应对象)。

2.2从web服务器发展的历史去理解
        早期:
        浏览器通过http协议向web服务器发请求,都是一些静态资源方面的请求(比如请求一个a.html文件),服务器去查找,查到,则返回该文件,没找到,则返回一个404状态码。web服务器为了能够处理动态的请求,比如一个开户操作,要访问数据库,要处理相关的业务逻辑(即要写相应的程序代码)。需要使用c/perl等语言开发cgi程序,web服务器会调用该程序来处理业务逻辑。cgi程序要两个问题:一是开发的复杂度,二是每一个请求都会启动一个cgi进程,系统的消耗比较大。
        现在:使用servlet容器+servlet
        servlet容器对于静态资源的请求,处理方式和传统的web服务器一样。对于动态请求,也就是业务逻辑的处理,会调用servlet来处理(servlet就是一个java对象,可以方便地进行业务逻辑的运算)。servlet有两个优势:一是开发简单,是一个面向对象的语言,方便封装业务逻辑。二是,每一个请求,只会启动一个线程,系统的开销比较小。

3.Servlet的执行过程

        1)浏览器会将请求打包成http请求数据包,发送给web服务器。
        2)web服务器中servlet引擎解析请求,并封装为一个HttpServletRequest对象(包含了请求数据)。同时,创建一个ttpServletResponse对象。
        3)servlet引擎调用servlet的service()方法,并将HttpServletRequest,HttpServletResponse对象作为参数传递给servlet实例。      servlet引擎会先查看要调用的servlet是否已经实例化。若没有实例化,则调用其构造器(不带参的)实例化。若已经实例化了(比如之前已经被调用过)则不再实例化。也就是说多个请求有可能共享同一个servlet实例,不同线程。
       4)servlet可以从HttpServletRequest对象中获得请求数据,并处理,当然,servlet也可能要访问数据库。然后将处理之后的结果放到HttpServletRespose。——这一块包括了DAO、ENTITY、DBUtil等。
       5)servlet引擎从HttpServletResponse中取数据,并将数据打包成http数据包,发送给浏览器。

4.Servlet工程的编写

        项目名称会部署到Tomcat的webapps下面,src中的JAVA程序会自动部署到webapps--项目名称--WEB-INF---classes下面,WebRoot文件夹会原封不动部署到webapps--项目名称下面。

        web.xml是编写servlet的时候自动生成,服务器就是通过这个web.xml把http请求与Servlet对应起来。它的结构是这样的:

通过rul获取到servlet-name,通过servlet-name获取到servlet的路径。

rul的匹配模式:

        servlet引擎会将请求地址,比如   http://localhost:8080/webday09/some
        除掉应用名之前(包括应用名),剩下的路径与url-pattern去匹配。 在这里,剩下的是/some。
一是精确匹配
         servlet引擎使用请求路径与url-pattern进行一致性地匹配。要求大小写完全致。
二是使用通配符去匹配
            /*
            引擎先进行精确匹配,在精确匹配不成功的情况下,会再进行 通配符匹配。
三是后缀匹配
            *.action
            匹配所有以.action结尾的路径。


              

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值