sun公司制订的一种用来扩展web服务器功能的组件规范。
web服务器(比如apache、iis,nginx等)只能够处理静态资源的请求
(也就是说,需要事先将html文件准备好),不能够处理动态资源的请求
(需要进行计算,比如访问数据库,生成动态页面)。所以,需要扩展
web服务器的功能。
早期,使用CGI程序来扩展。
(了解):
CGI(Common Gateway Interface通用网关接口)程序,指的
是使用perl,c/c++,python,java这些语言开发的的,符合CGI
接口规范的程序。CGI开发比较繁琐、并且可移植性差、性能也不是
很好,现在用得很少了。
可以使用Servlet来扩展web服务器的功能。也就说,当web服务器收到
请求,如果需要进行计算,会调用Servlet来处理。
a.什么是组件?
符合一定规范、实现部分功能、并且需要部署到相应的容器当中
才能运行的软件模块。
Servlet就是一个符合Servlet规范的组件。
b.什么是容器?
符合一定规范、提供组件运行环境的程序。
Servlet需要部署到Servlet容器当中才能运行,比如
Tomcat就是一个符合Servlet规范的容器。
注:
Tomcat也就是一个简单的web服务器。
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中设置。
参考 http://doc.tedu.cn/tomcat/index.html
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
当我们打开浏览器,在地址栏填写 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.浏览器解析响应数据包,生成相应的页面。
含义: 服务器依据请求路径找不到对应的资源。
原因:
a.请求路径写错了
(没有按照http://ip:port/appname/url-pattern来写请求路径)
b.应用没有部署或者部署失败。
含义: 服务器端发生错误。
原因:
a.没有严格按照规范来写Servlet。
比如,没有继承HttpServlet,web.xml配置写错。
b.代码写得不严谨。
比如,对用户提交的数据没有做检查就做处理(比如做类型转换)。
含义:服务器找不到处理该请求的方法。
原因: 没有正确override HttpServlet的service方法。
写一个Servlet,输出当前的系统日期
http://ip:port/servlet01-lab/date
返回 2019-01-24
写一个Servlet,计算一个人的BMI指数。
BMI指数 = 体重(公斤) / 身高(米) / 身高(米)
比如 http://ip:port/servlet01-lab/bmi?height=1.2&weight=90