开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第21天,点击查看活动详
一、Servlet规范介绍:
1.JavaEE规范中的一种。
2.作用:
1)在servlet规范中,指定【动态资源文件】开发步骤
2)在servlet规范中,指定Http服务器调用动态资源文件的规则
3)在servlet规范中,指定Http服务器管理动态资源文件实例对象规则
二、Servlet接口实现类:
1.Servlet接口是Servlet规范下的一个接口,这个接口存在Http服务器jar包
2.Tomcat服务器下lib文件中有Servlet规范的jar包 (javax.servlet.Servlet接口)
3.Servlet规范中,http服务器能调用的【动态资源文件】必须为一个servlet接口实现类。
三、Servlet接口实现类开发步骤:
第一步:创建一个java类继承于HttpServlet父类,使其成为Servlet接口的实现类
第二步:重写HttpServlet中两个方法,doGet和doPost
浏览器----------->oneServle.doGet();
第三步:将Servlet接口实现类信息【注册】到Tomcat服务器。
【网站】---------->【web】--------->【WEB-INF】--------->web.xml
<!---将Servlet接口实现类类路径的地址交给Tomcat--->
<servlet>
<servlet-name>mm</servlet-name><!----声明一个变量存储servlet接口实现类类路径--->
<servlet-class>com.servlettext.controller.OneServlet</servlet-class><!-----声明servlet接口实现类类路径-->
</servlet>
<!---为了降低用户访问Servlet接口实现类难度,需要设置简短请求别名--->
<servlet-mapping>
<servlet-name>mmm</servlet-name>
<url-pattern>/one</url-pattern> <!-设置简短请求别名,别名书写时必须以/开头-->
</servlet-mapping>
http://localhost:8080/myWeb/one
四、Servlet对象的生命周期:
1.网站中所有Servlet接口实现类实例对象,只能由HTTP服务器负责创建,开发人员不能手动去创建Servlet接口实现类的实例对象
2.在默认没情况下,Http服务器接受到对于当前Servlet接口实现类第一次请求时,自动创建这个Servlet接口实现类的实例对象。在手动配置的情况下,要求Http服务器在启动时自动创建某个Servlet接口实现类的实例对象。
<servlet>
<servlet-name>mm</servlet-name><!----声明一个变量存储servlet接口实现类类路径--->
<servlet-class>com.servlettext.controller.OneServlet</servlet-class><!-----声明servlet接口实现类类路径-->
<load-on-startup>30</load-on-startup><!--填写一个大于0的整数-->
</servlet>
3.在Http服务器运行期间一个Servlet接口实现类只能被创建出一个实例对象。
4.在Http服务器关闭时,自动将网站中所有Servlet对象进行销毁。
五、HttpServletResponse接口:
1.介绍:
1)HttpServletResponse接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar
2)HttpServletResponse接口实现类由Http服务器负责提供
3)HttpServletResponse接口负责将doGet/doPost方法执行结果写入到【响应体】交给浏览器
4)开发人员习惯于将HttpServletResponse接口修饰的对象称为【响应对象】
2.主要功能:
1)将执行结果以二进制形式写入响应体
2)设置响应头中【content-type】属性值,从而控制浏览器使用对应编译器将响应体二进制数据编译为【文字、图片、视频】
3)设置响应头中【location】属性,将一个请求地址赋值给location,从而控制浏览器向指定服务器发送请求
六、HttpServletRequest接口:
1.介绍:
1)HttpServletRequest接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar
2)HttpServletRequest接口实现类由Http服务器负责提供
3)HttpServletRequest接口负责在doGet/doPost方法运行时读取Http请求协议包中信息
4)开发人员习惯于将HttpServletRequest接口修饰的对象称为【请求对象】
2.作用:
1)可以读取Http请求协议包中【请求行】信息
2)读取保存在Http请求协议包中【请求头】或者【请求体】中的请求参数信息
3)代替浏览器向Http服务器申请资源文件调用
七、请求对象和响应对象生命周期
- 在Http服务器接收到浏览器发送的【Http请求协议包】之后,自动的为当前的【Http请求协议包】生成一个【请求对象】和一个【响应对象】
- 在Http服务器调用doGet/doPost方法,负责将 【请求对象】和【响应对象】作为实参传递到方法,确保doGet/doPost正确执行
- 在Http服务器准备推送Http响应协议包之前负责将本次请求关联的【请求对象】和【响应对象】销毁
【请求对象】和【响应对象】生命周期贯穿一次请求的处理过程中
八、欢迎资源文件
1.默认欢迎资源文件:
用户发送了一个针对某个网站的【默认请求】时,此时由Http服务器自动从当前网站返回的资源文件。 正常请求:http://localhost:8080/myWeb/index.html 默认请求:http://localhost:8080/myWeb/
2.Tomcat对于默认欢迎资源文件定位规则
1)规则位置:Tomcat安装位置/conf/web.xml 2)规则命令:
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
3.设置当前网站的默认欢迎资源文件规则
1)规则位置:网站/web/web-inf/web.xml 2)规则命令:
<welcome-file-list>
<welcome-file>login.html</welcome-file>
</welcome-file-list>
3)网站设置自定义默认文件定位规则,此时Tomcatt自带的定位规则将消失。
九、Http状态码
1.介绍:
1)由三位数字组成的符号
2)Http服务器在推送响应包之前,根据本次请求处理情况将Http状态码写入到响应包中【状态行】上
3)作用:如果Http服务器针对本次请求,返回了对应的资源文件。通过Http状态码通知浏览器应该如何处理这个结果
如果iHttp服务器针对本次请求,无法返回对应的资源文件通过Http状态码向浏览器解释不能提供服务的原因
2.分类:
1)组成 100----599 分为五大类
2)1xx: (最有特征)100:通知浏览器本次返回的资源文件并不是一个独立的资源文件,需要浏览器在接受响应包之后,继续向Http服务器索要依赖的其他资源文件。
3)2xx:
(最有特征)200:通知浏览器本次返回的是一个完整的独立资源文件,浏览器接受之后不需要去索要其他关联文件4)3xx: (最有特征)302:通知浏览器本次返回的不是一个资源文件的内容,而是资源文件的地址需要浏览器根据这个地址自动发起请求来索要这个资源文件。 response.sendRedirect("资源文件地址")写入到响应头中location,这个行为导致Tomcat将302状态码写入到状态行
5)4XX: 404:通知浏览器,由于在服务端没有定位到被访问的资源文件因此无法提供服务 405:通知浏览器,在服务端已经定位到被访问的资源文件(servlet)。但是这个Servlet对于浏览器采取的请求方式不能处理
6)5xx: 500:通知浏览器,在服务端已经定位到被访问的资源文件(Servlet).这个servlet可以接收浏览器采用请求方式,但是servlet在处理请求期间,由于java异常导致处理失败
十、多个servlet之间调用规则:
1.前提条件:
某些来自于浏览器发送请求,往往需要服务端中多个servlet进行协同处理,但是浏览器一次只能访问一个servlet,导致客户需要手动通过浏览器发起多次请求才能得到服务。这样增加客户获得服务难度,客户选择放弃访问此网站。
2.提高用户使用感受规则:
无论本次请求涉及到多少个Servlet,用户只需要【手动】通知浏览器发起一次请求即可。
3.实现方案: 1)重定向解决方案 2)请求转发解决方案
1. 重定向解决方案:
工作原理:
用户第一次通过手动的方式通知浏览器访问OneServlet,oneServlet工作完毕后,将TwoServlet地址写入到响应头的location属性中,导致Tomcat将302的状态码写入到状态行中,在浏览器接收到响应包之后,读取到302状态码,此时浏览器自动根据响应头中location属性地址发起第二次请求,访问TwoServlet去完成请求中剩余的任务
实现命令:
response.sendRedirect(请求地址);降低至写入到响应包的响应头中location属性
特征:
1)请求地址: 即可以把当前网站(/网站名/资源文件名)内部的资源文件地址发送给浏览器,也可以把其他网站(http://ip地址:端口号/网站名/资源文件名)资源文件地址发送给浏览器。
2)请求次数: 浏览器至少发送两次请求,只有第一次是用户手动发送的,后续请求是浏览器自动发送的。
3)请求方式: 重定向解决方案是通过地址栏发起下一次请求,因此通过重定向解决方案调用的资源文件接受的请求方式一定是【Get】
缺点:
重定向解决方案需要在浏览器与服务器之间进行多次往返,大量时间消耗在往返次数上,增加用户等待服务时间
2.请求转发解决方案:
原理:
用户第一次通过手动的方式要求浏览器访问OneServlet,oneServlet工作完毕后,通过当前的请求对象代替浏览器向Tomcat发送请求,申请调用TwoServlet。Tomcat在接收到这个请求之后,自动调用TwoServlet完成剩余任务
实现命令:
请求对象代替浏览器向Tomcat发送请求
//1.通过当前请求对象生成资源文件申请报告对象
RequestDispatcher report=request.getRequestDispatcher(:" /资源文件名称");
//2.将报告对象发送给Tomcat
report.forward(当前请求对象,当前响应对象);
优点:
1)无论本次请求涉及到多少个Servlet,用户只需要手动向浏览器发送一次请求
2)Servlet之间调用发生在服务端计算器,节省浏览器与服务端之间的往返次数。增加处理服务的速度
特征:
1)请求次数: 在请求转发过程中,浏览器只发送一次请求
2)请求地址 只能向Tomcat服务器申请调用当前网站下的资源文件地址
request.getRequestDispathcer("/资源文件名");不能写网站名**3)请求方式请求转发过程中,浏览器只发送了一个Http请求协议包,参与本次请求的所有Servlet共享同一个请求协议包,因此这些Servlet接受的请求方式与浏览器的请求方式保持一致。