Servlet学习笔记
Posted Emuaer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet学习笔记相关的知识,希望对你有一定的参考价值。
Servlet
-
servlet接口实现类
来自于servlet规范下的一个接口 ,存在于http服务器中
-
Tomcat服务器中有servlet的jsp包,存放servlet接口
-
http服务器中能调用的 动态资源 文件必须是一个servlet接口实现类
class Teacher implements Servlet{ //合法动态资源文件,TOmccat有权利用 int doget(){ ..... }; } Servlet obj= new Teacher(); obj.doget();
-
servlet开发步骤
-
一:创建java类,继承HttpServlet父类,使之成为Servlet的接口实现类
class oneServlet extends HttpServlet{
}
-
servlet接口:
+ init + getServletConfig + getServletInfo + destory + service()--有用 + Tomcat 有权利创建Servlet接口实现类对象 ```java Servlet oneServlet =new OneServlet(); //Tomcat根据实例对象调用service方法处理当前请求 oneServlet.service(); ```
-
-
Tomcat根据实例对象调用service方法处理当前请求
-
二:重写HttpServlet中的两个方法。doGet或doPost
浏览器两种请求方式----post,get
-
servlet中的method通过getMethod方法可以获取浏览器提交的方式
-
通过父类据欸的那个何种情况下调用子类中方法------模板设计模式
Httpservlet: service(){ if(请求方式==Get)this.doGet; else if(请求方式==Post)this.doPost; } OnewServlet:doGet doPost onewServlet.service();
-
-
三:将servlet接口实现类信息【注册】到Tomcat服务器
-
网站--》【web】-->【webinf】-》【web.xml】
将Servlet接口实现类路径交给Tomcat
<servlet> <servlet-name>mm</servlet-name><!--声明一个变量来存储servlet接口实现类路径--> <servlet-class></servlet-class><!--此处应写实现类的路径-->
mm /one 浏览器向Tomcat索要OneServlet地址时 **http://localhost:8080/Emua/one**
-
Servlet对象的生命周期
-
网站中所有实例对象由http服务器负责,无需手动
-
默认情况下,http服务器接收到对于当前servlet接口实现类第一次请求时,子哦对那个创建这个servlet接口实现类的实例对象
再手动配置的情况下,要求http服务器在启动时自动创建某个Servlet接口实现类的实例对象
<servlet> <servlet-name>mm</servlet-name><!--声明一个变量来存储servlet接口实现类路径--> <servlet-class></servlet-class><!--此处应写实现类的路径--> <load-on-startup>30</load-on-startup>填写一个大于0的整数 </servlet>
-
在http服务器运行期间,一个servlet接口实现类只能被创建出一个实例对象
-
http服务器关闭时,自动销毁所有servlet对象。
HttpServletResponse接口
介绍
- 存在于servlet-api.jar中,位于servlet规范中
- 负责将doGet或者doPost方法执行结构写到响应函数中,交给浏览器
- 该接口修饰的对象简称响应对象
主要功能
1.将执行结果以二进制形式写入响应体中
2.设置content-type属性值,从而控制浏览器使用对应编译器将二进制数据编译为各种数据
3.设置localtion属性,将一个请求地址赋值给localtion。从而控制浏览器向指定服务器发送请求
HttpServletRequest接口
介绍
-
存在于servlet-api.jar中,位于servlet规范中
-
接口实现类由Http服务器负责提供
-
负责在doGEt,doPost方法运行时读取Http请求协议包中的信息
-
开发人员称其为修饰的对象请求对象
相关作用
- 用于Http请求协议包中请求行中的信息
- 可以读取保存在请求协议包中请求头,请求体中的参数信息
- 可以代替浏览器向Http服务器申请资源文件调用
请求对象和响应对象的生命周期
-
Http服务器接收浏览器发送的Http请求协议包之后,自动为当前Http请求协议包生成一个响应对象和请求对象
-
在我们的Http服务器调用doGet或者doPost方法时,负责将请求对象和响应对象作为实参传递到方法
-
Http服务器准备推送Http相应协议之前,负责销毁请求对象和响应对象
-
请求对象和响应对象的生命周期贯穿以一次请求的处理过程中
-
请求对象和响应对象相当于客户在服务端的代言人,客户走了,它们也可以死了
Http状态码
介绍
-
由三位数字组成的符号
-
Http服务器再推送相应包之前,根据本次请求处理情况,将Http状态码写入到相应包状态行上
-
如果Http服务器针对本次请求,返回了对应的资源文件,通过Http状态码通知浏览器应该如何处理这个结果
-
如果Http服务器针对本次请求,无法返回了对应的资源文件,通过Http状态码通知浏览器解释不能提供服务的原因
分类
-
组成------100-599
-
1xx:
- 100,通知浏览器本次返回的资源文件并不是一个独立的资源文件,需要浏览器继续向Http服务器请求其他资源文件
-
2xx:
- 200,通知浏览器本次返回的资源文件是一个完整的独立资源文件,浏览器接收后不需要索要其他文件
-
3xx:
-
302, 通知浏览器本次返回的资源文件并不是一个资源文件,而是一个资源文件的地址,需要浏览器根据地址索要资源文件
response.sendRedirect("资源文件地址");//写入location中
-
-
4xx:
- 404,通知浏览器,在服务端没有定位到需要访问的文件
- 405,通知浏览器,在服务端定位到需要访问的文件(Servlet),但是这个Servlet对浏览器采用的访问方式不能进行处理(GET和POST方法的差别)
-
5xx:
- 通知浏览器,在服务端定位到已经访问的文件(Servlet),这个Servlet可以接受浏览器采用的请求方式,但是Servlet在处理请求期间由于java异常处理导致处理失败。
多个Servlet之间调用的规则
-
减低用户使用难度
-
提高用户使用感受规则
-
实现方案
-
重定向解决方案
-
工作原理:
用户第一次通过手动方式通知浏览器访问第一个Servlet,同时将第二个Servlet的地址写入响应头的location属性中,Tomcat将302状态码写入状态行中,此时浏览器根据302状态行发起第二次请求,访问第二个Servlet完成所有请求
-
实现命令
response.sendRedirect();
将地址写入location属性中,访问时自动跳转指定Servlet
-
特征
- 既可以把当前网站的资源文件发给浏览器,也可以把其他网站资源地址发给浏览器、
- 请求次数:浏览器至少发两次请求,只有第一次是用户手动发送的,后续都是浏览器自动发送的
- 请求方式:一定是get
-
缺点
需要在浏览器与服务器之间进行多次往返,大量时间被用于往返之间,用户等待时间较长
-
-
请求转发解决方案
-
原理:用户手动访问一次OneServlet,OneServlet工作完毕后,通过当前请求对象代替浏览器向Tomcat发送请求,申请调用TwoServlet,Tomcat接收到请求后,自动调用Twoservlet来完成剩余任务
-
RequestDispatcher report=request.getRequestDispatcher("/资源文件名"); 一定以/开头
-
将报告对象发送给Tomcat:
report.forward(当前请求对象,当前响应对象)
-
优点:
- 无论本次请求涉及多少个Servlet,用户只需一次操作
- Servlet之间的调用在服务端上,节省服务端与浏览器之间往返次数,增加处理速度
-
特征
-
请求次数,浏览器只发送一次请求
-
增加服务器压力-------分布式服务器
-
请求地址,只能向Tomcat申请调用当前网站下的资源文件地
request.getRequestDispatcher("/资源文件名"); //一定不要用网站名
-
-
-
多个Servlet数据共享实现方案
-
数据共享
一个Servlet工作完成后将数据交给第二个Servlet使用
-
Servlet规范中四种数据共享方案
- ServletContext接口
- Cookie类
- HttpSession接口
- HttpServletRequest接口
ServletContext接口
-
介绍
来自于Servlet规范的一个接口,在TOmcat中存在于servlet-api.jar中,Tomcat负责提供实现类
-
如果两个Servlet来自同一个网站,彼此之间就可以通过ServletContext实例对象实现数据共享
-
俗称全局作用域对象
-
全局作用域对象相当于一个Map(共享数据),另一个Servlet根据key获得value
-
每一个网站都有一个全局作用域对象,在这个网站中可将一个数据存入全局对象中,当前网站中其他Servlet可以从全局作用域的到值并使用
-
生命周期:Http服务器启动过程中,自动为当前网站创建全局作用域对象,有且只有一个全局作用域对象,贯穿整个网站运行期间
-
命令实现:
OneServlet{ ServletContext application=request.getServletContext(),来获取网站中的全局作用对象 application.setAttribute("key",数据) } TwoServlet{ 向网站索要全局作用域对象 ServletContext application=request.getServletContext(),来获取网站中的全局作用对象 Object 对象=application.getAttribute("key") }
Cookie
-
Cookie来自Servlet规范下的一个工具类,存在于servlet-api.jar中
-
如果他两个Servlet来自同一个网站,并且为同一个浏览器/用户提供服务,此时可以用Cookie进行数据共享
-
Cookie用于存放私人数据,在共享数据过程中提高服务质量
-
Cookie相当于会员卡
-
原理:
- 用户通过浏览器发送数据,服务器处理期间创建Cookie存储当前用户相关数据,将Cookie写入响应头交还浏览器,浏览器将其储存在缓存中
- 用户再次访问时,Http服务器可以通过响应头的cookie再获取用户信息
-
实现命令:
OneServlet{ //1.创建Cookie对象 Cookie card=new Cookie("key","value");//相当于一个map,不过只能存放一个键值对,key,value都只能为String,key不能为中文 //2.交给用户,写入响应头 response.addCookie(card); } TwoServlet{ //得到数组 Cookie cookieArray[]= request.getCookies(); //循环遍历 for(Cookie card:cookieArray){ String key=card.getName(); String value=card.getValue(); } }
-
Cookie的生命周期
-
Cookie存放在缓存中,因此浏览器关闭,Cookie就会消亡
-
再手动设置下,可以要求浏览器接收Cookie存放在客户端硬盘上,关闭浏览器不会导致消亡
-
手动指定语法:
cookie.setMaxAge(60);//指定Cookie对象存活一分钟
-
HttpSession接口
- 介绍
- 来自于Servlet规范下接口,存在于servlet-api.jar,相关实现类由Tomcat提供
- 如果两个Servlet来自于同一个网站,并且为同一个浏览器/用户提供服务,此时借助HttpSession对象进行数据共享
- 俗称会话作用域对象
- HttpSession与Cookie区别
- 存储位置不同
- Cookie:存放于客户端计算机中
- HttpSession:存放在服务端计算机内存中
- 数据类型
- Cookie对象存储类型只能是String
- HttpSession对象可以存储任意共享数据
- 数据数量
- 一个Cookie对象只能存储一个共享对象
- HttpSession使用Map集合存储共享数据,所以可以存储任意数量的数据
- 参照物不同
- Cookie相当于客户在服务端会员卡
- HttpSession相当于客户在服务端的私人保险柜
- 存储位置不同
以上是关于Servlet学习笔记的主要内容,如果未能解决你的问题,请参考以下文章