Servlet分析(1)

来源:互联网 发布:中国观鸟网络 编辑:程序博客网 时间:2024/05/20 13:15

一、servlet简单介绍

是由sun公司制订的一种用来扩展web服务器功能的组件规范


(1)扩展web服务器功能


  当请求到达web服务器(apache提供的webserver,微软的iis)时,这些web服务器只能够处理静态资源(即需要事先将html文件写好,并且保存到服务器特定的文件夹下面)的请求,如果是一个动态资源(需要计算,然后动态生成相应的html)的请求,web服务器不能够处理,需要扩展其功能。


(2)组件
  1)什么是组件?
   符合特定的规范,并且实现了部分功能的,可以单独部署的软件模块。
  2)什么是容器?
   符合特定的规范,并且提供组件的运行环境的程序。
  3)serlvet容器是什么?

   servlet就是一个组件,需要部署到servlet容器才能运行。 比如Apache

 

二、开发一个servlet


step1,先写一个java类,实现Servlet接口或者继承HttpServlet抽象类。
step2,编译
step3,打包
  即需要建立一个具有如下结构的文件夹
  appname(应用名称)
   WEB-INF
    classes(放.class文件)
      lib(可选,放.jar文件)
      web.xml(描述文件)
step4,部署
  将step3生成的整个文件夹拷贝到容器特定的文件夹底下,比如,tomcat容器对应的是webapps。
  另外,也可以使用jar命令将step3生成的整个文件夹压缩(.war)。
step5, 访问
  http://ip:port/appname/url-pattern
注:使用myeclipse来开发servlet(略)

 

三、servlet是如何运行的?


比如,在浏览器地址栏输入http://ip:port/web01/greeting
  step1, 浏览器依据ip,port建立与服务器之间的连接。
  step2,浏览器将请求数据打包(按照http协议)。
  step3,浏览器发送请求。
  step4,服务器解析请求数据包,将解析的结果写到request对象上(为了方便servlet读取请求数据)。同时,服务器还会创建一个response对象(为了方便servlet输出处理的结果)。
  step5, 服务器依据请求资源路径(/web01/greeting) 找到应用所在的文件夹,并且依据"/greeting"找到对应的servlet类名。接下来要创建servlet对象
  step6, 服务器要调用servlet的service方法,会将事先创建好的request,response对象作为参数传递进来。所以,可以通过request对象获得请求数据,也可以通过response对象输出处理的结果。
  step7,服务器通过response对象获得处理结果,然后将处理结果打包,发送给浏览器
  step8,浏览器解析服务器返回的处理结果,然后生成相应的界面。

图示

22

小知识点:
  第三步浏览器发送请求有get方式和post方式两种:


  1)哪一些情况下,浏览器使用get方式发请求:
   a,直接在浏览器地址栏输入某个地址
   b,点击链接
   c,表单默认的提交方式


  2)get请求的特点
   a,如果有请求参数,会将这些参数添加在请求资源路径的后面(所以,get方式能够提交的参数大小有限制)。
   b,get方式还会将请求参数显示在浏览器地址栏,不安全


  3)哪一些情况下,浏览器会使用post方式发请求:
   只有一种方式:设置了表单的method="post"。


  4)post请求的特点
   a,请求参数会添加到实体内容里面,参数大小没有限制。
   b,请求参数不会显示在浏览器地址栏,相对安全(并不会对请求参数加密)。


第五步的时候,servlet容器(web服务器,比如tomcat)如何处理请求资源路径?
  比如,我们在浏览器地址栏输入:http://ip:port/web01/abc.html,则"/web01/abc.html"为请求资源路径。
  step1, 容器依据应用名("/web01")找到应用所在的文件夹。
  step2, 容器会假设这是一个servlet,会匹配web.xml配置文件里面的url-pattern:
  精确匹配: 要求url-pattern必须是"/abc.html"。
  通配符匹配: 使用"*"来代替任意的零个、一个或者多个字符。
    比如 <url-pattern>/*</url-pattern>
  后缀匹配:使用"*."开头,接一个任意的字符串。
   比如 <url-pattern>*.do</url-pattern>
   以上会匹配所有以".do"结尾的请求。
  (优先级:精确匹配>通配符匹配>后缀匹配)
  step3,如果以上匹配均不成功,容器会认为这是一个资源文件(比如是一个html文件),然后查找相应的资源文件,如果找到则返回,找不到返回404。


0 0
原创粉丝点击