servlet-day01
1. 什么是servlet？ s n公司制订的一种用来扩展web服务器功能的组件规范。 (1) 扩展web服务器功能 web服务器只能处理静态资源的请求(即需要事先将l文件及相关的图片等资源准备好),不能够处理动态资源的请求(即需要计算,生成相应的l),所以,需要扩展web服务器的功能。 servlet可以扩展web服务器功能,当web服务器收到请求之后,可以调用servlet来处理动态资源的请求。如下图所示: (2) 组件规范 组件是什么？ 符合规范,实现部分功能,并且需要部署到相应的容器里面才能运行的软件模块。 servlet是一个组件,需要部署到servlet容器里面才能运行。 容器是什么？ 符合规范,提供组件的运行环境的程序。 apache tomcat就是一个servlet容器,提供servlet运行环境(即网络相关的服务)。 2. 如何写一个servlet？ step1. 写一个java类,实现servlet接口或者继承httpservlet抽象类。 step2. 编译。 step3. 打包。 即创建一个具有如下结构的文件夹: appname (可自定义) web-inf classes (放.class文件) lib (放.jar文件 可选) web.xml (部署描述文件) step4. 部署。 将step3创建好的整个文件夹拷贝到相应的serlvet容器里面。 注: 将step3创建好的整个文件夹使用jar命令压缩成".war"结尾的文件,然后再拷贝。 step5. 启动servlet容器,访问servlet。  rl-pattern 3. servlet是如何运行的？ 比如,在浏览器地址栏输入 ,发生了什么？ step1.浏览器依据ip和port建立连接。 step2.浏览器将请求相关的数据打包(即创建请求数据包)然后发送给servlet容器。 step3.servlet容器解析请求数据包,并且将解析到的数据存放到req est对象里面,同时,还会创建一个response对象。 step4.servlet容器依据请求路径找到对应的servlet的配置,然后容器将servlet实例化。 step5.servlet容器调用servlet的service方法。 注: 会将req est和response作为参数传递进来,开发人员可以调用req est对象的方法来获得请求数据包里的数据(比如获取请求参数值),也可以将处理结果写到response对象里面。 step6.容器从response对象中取出处理结果,然后创建响应数据包并发送给浏览器。 step7.浏览器解析响应数据包,生成相应的页面。 4. 常见问题 (1)404 含义: 404是一个状态码,表示依据请求路径找不到对应的资源。 原因: a.请求路径写错。 应该按照  rl-pattern来写。  b.没有部署或者部署失败。 (2)500 含义: 服务器运行出错。 原因: a.没有严格按照规范来写servlet,比如 没有继承httpservlet,又比如,部署描述文件中的类名写错等等。 b.代码不严谨,比如对请求参数没有做检查就做类型转换的处理。 (3)405 含义: 找不到处理方法。 原因: 容器找不到service方法来处理请求。 5. servlet输出中文要注意什么？ (1)为什么会有乱码？ o t在输出时,默认会使用iso-8859-1来编码。所以, 对于中文,会产生乱码。 (2)如何处理？ response.setcontenttype( "textl；charset= tf-8")； 练习:写一个dateservlet,输出当前的系统日期。 比如, 浏览器显示 2018-06-26 step1.建maven工程。 注意:war包。 step2.生成部署描述文件。 step3.指定服务器。 step4.添加一个 继承httpservlet,并且override service方法。 p blic class dateservlet extends httpservlet{ @override protected void service( httpservletreq est req est, httpservletresponse response) throws servletexception, ioexception { response.setcontenttype("textl")； printwriter o t = response.getwriter； date date = new date； simpledateformat sdf = new simpledateformat("yyyy-mm-dd")； o t.println(sdf.format(date))； o t.close； } } step5.在web.xml文件里面,配置servlet。 dateservlet web.dateservlet dateservlet date step6.部署并运行。 练习2: 写一个bmiservlet,计算一个人的bmi指数,并且 依据bmi指数,输出一个人的身体状况: bmi指数 = 体重(公斤)  身高(米)身高(米) 如果bmi指数  19,过轻。 如果bmi指数  25,过重。 否则,正常。 比如 输出 你的bmi指数是xxxx,体重过重。