1.Servlet是什么?

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

(1)扩展web服务器功能

web服务器(比如apache、iis,nginx等)只能够处理静态资源的请求
(也就是说,需要事先将html文件准备好),不能够处理动态资源的请求
(需要进行计算,比如访问数据库,生成动态页面)。所以,需要扩展
web服务器的功能。
早期,使用CGI程序来扩展。
    (了解):
        CGI(Common Gateway Interface通用网关接口)程序,指的
    是使用perl,c/c++,python,java这些语言开发的的,符合CGI
    接口规范的程序。CGI开发比较繁琐、并且可移植性差、性能也不是
    很好,现在用得很少了。
可以使用Servlet来扩展web服务器的功能。也就说,当web服务器收到
请求,如果需要进行计算,会调用Servlet来处理。

(2)组件规范

a.什么是组件?
    符合一定规范、实现部分功能、并且需要部署到相应的容器当中
才能运行的软件模块。
    Servlet就是一个符合Servlet规范的组件。
b.什么是容器?
    符合一定规范、提供组件运行环境的程序。
    Servlet需要部署到Servlet容器当中才能运行,比如
    Tomcat就是一个符合Servlet规范的容器。   
    注:
        Tomcat也就是一个简单的web服务器。

2.如何写一个Servlet?

step1. 写一个java类,实现Servlet接口或者继承HttpServlet。

注: 一般选择继承HttpServlet类。

step2. 编译。

step3. 打包。

即创建一个具有如下结构的文件夹:
appname (应用名)  
    WEB-INF
        classes (放.class文件)
        lib (放.jar文件,该文件夹可选)
        web.xml (描述servlet)

step4.部署。

将step3创建好的整个文件夹拷贝到servlet容器上指定的某个
位置。
注:
    也可以将step3创建好的文件夹使用jar命令压缩成一个
".war"为后缀的文件,然后再拷贝。

step5.启动容器,访问Servlet。

http://ip:port/appname/url-pattern
注:
    url-pattern在web.xml中设置。

3.安装Tomcat。

参考 http://doc.tedu.cn/tomcat/index.html

4.使用Eclipse来开发一个servlet

step1.创建一个maven工程

注: 
    选war包!

step2.工程建完之后,要做两个准备工作:

a.添加web.xml文件。
b.指定Server。

step3.添加Servlet类。

a.继承HttpServlet。
b.override  service方法。

step4.在web.xml中,添加servlet的配置信息。

a.servlet-name得一致。
b.servlet-class得写完整的类名。
c.url-pattern必须以"/"开头。

step5.运行。

step6.打开浏览器,在地址栏填写

http://ip:port/appname/url-pattern

5.Servlet是如何运行的?

当我们打开浏览器,在地址栏填写 http://ip:port/servlet01/hello

step1.浏览器依据ip,port建立连接。

step2.浏览器创建请求数据包并发送。

step3.Servlet容器解析请求数据包,并且将解析到的数据存放到 request对象里面,同时,创建response对象。

step4.Servlet容器创建Servlet对象,然后调用该对象的service 方法(容器会将request和response作为参数传递过来)。

注:
    开发人员可以通过request对象获得请求数据包中的数据
(比如,获得请求参数值),然后将处理结果写到response对象
里面就可以了。
    也就是说,开发人员不用理会网络相关的问题。

step5.Servlet容器从response对象中获得处理结果,然后创建响应数据 包并发送给浏览器。

step6.浏览器解析响应数据包,生成相应的页面。

6.常见的错误

(1)404

含义: 服务器依据请求路径找不到对应的资源。

原因:

a.请求路径写错了
(没有按照http://ip:port/appname/url-pattern来写请求路径)

b.应用没有部署或者部署失败。

(2)500

含义: 服务器端发生错误。

原因:

a.没有严格按照规范来写Servlet。
比如,没有继承HttpServlet,web.xml配置写错。

b.代码写得不严谨。
比如,对用户提交的数据没有做检查就做处理(比如做类型转换)。

(3)405 (了解)

含义:服务器找不到处理该请求的方法。

原因: 没有正确override HttpServlet的service方法。

练习1

写一个Servlet,输出当前的系统日期

http://ip:port/servlet01-lab/date
返回 2019-01-24

练习2

写一个Servlet,计算一个人的BMI指数。

BMI指数 = 体重(公斤) / 身高(米) / 身高(米)

比如 http://ip:port/servlet01-lab/bmi?height=1.2&weight=90