Servlet 规范来自JAVAEE规范的一种
调用例子:
class Name implements Servlet{
Servlet obj = new Name();
obj.doGet();
obj.doPost();
}
Servlet接口实现类开发步骤
第一步:创建一个Java类继承与HttpServlet父类,成为一个Servlet接口实现类
第二步:重写doGet和doPost方法
第三步:将Servlet接口实现类信息注册到Tomcat服务器 (写入web.xml文件)
OneServlet com.lv.controller.OneServlet
设置简短访问别名
servlet-mapping
servlet-name>OneServlet
/one
Servlet生命周期
1.网站中所有servlet接口实现类的实例对象只能由Http服务器创建
2.在默认的情况下Http服务器接收到对于当前servlet接口实现类第一次请求自动创建接口实现类的实例对象
OneServlet com.lv.controller.OneServlet 30 (写一个大于0的整数)
3.在Http服务器运行间,一个servlet接口实现类只能被创建出一个实例对象
4.在Http服务器关闭时,自动将网站所有servlet对象销毁
HttpServletResponse接口
1.Httpservletresponse接口来自于servlet规范中,在Tomcat中存在servlet-api.jar
2.Httpservletresponse接口实现类由Http服务器负责提供
3.Httpservletresponse接口负责将doGet doPost方法执行结果写入到响应体交给浏览器
String result = "hello world"; PrintWriter out = response.getWriter(); out.write(result); String result = "java
mysql
html"; response.setContentType("text/html"); PrintWriter out =response.getWriter(); out.print(result); int money = 50; PrintWriter out =response.getWriter(); out.print(money); String result = "http://www.baidu.com"; response.sendRedirect(result);
HttpServletRequest接口
1.HttpServletRequest接口来自于servlet规范中,在Tomcat中存在servlet-api.jar
2.HttpServletRequest接口实现类由Http服务器负责提供
3.HttpServletRequest接口负责将doGet doPost方法运行时读取Http请求协议包中的信息
请求对象与响应对象生命周期
1.在Http服务器接收到浏览器发送的Http请求协议包之后,自动为当前Http请求协议包生成一个请求对象和一个响应对象
2.在Http服务器调用doGet/doPost方法时,负责将请 求对象和响应对象作为实参传递到方法,确保正确执行
3.在Http服务器准备推送Http响应协议包之前,负责将本次请求关联的请求对象和响应对象销毁
mysql的jar包也要拷贝到Tomcat的lib目录
mysql的jar包也要拷贝到Tomcat的lib目录
mysql的jar包也要拷贝到Tomcat的lib目录
TomCat设置当前网站的默认主页
位置:网站/web/WEB-INF/web.xml
命令:login.html
Http状态码
由三位数字组成的一个符号 Http服务器在推送响应包前,根据本次请求处理情况将Http状态码写入响应包中
如果Http服务器针对本次请求,返回了对应的资源文件。通过Http状态码通知浏览器应该如何处理这个结果
如果Http服务器针对本次请求,无法返回对应的资源文件通过状态码向浏览器解释不能提供服务的原因
状态码:100—599 5个大类
多个Servlet调用
重定向解决方案
用户手动发起一次请求之后,浏览器自动发起后面的请求
response.sendRedirect("请求地址")
缺点:增加用户等待时间
请求转发解决方案
用户手动发起一次请求之后,访问完第一次请求后向Tomcat发送请求,调用第二次请求完成剩余任务
RequestDispatcher report = request.getRequestDispatcher("/资源文件名");
report.forward(当前请求对象,当前响应对象);
Servlet数据共享方案
ServletContext接口也称为【全局作用域对象】
每个网站都存在一个全局作用域对象,来自同一个网站通过网站的ServleContext实例对象实现数据共享
生命周期:在Http服务器启动中,自动为当前网站在内存中创建一个全局作用域对象,Http服务器准备关闭时销毁
request.getServletContext().setAttribute("key1",数据); 【索要全局作用域对象,将共享数据添加进去】
ServletContext application = request.getServletContext();
Integer money = (Integer) application.getAttribute("key1");【索要全局作用域对象,得到共享数据】
Integer可以防止空指针异常(可以为null)
cookie类
存放当前用户的私人数据,在共享数据过程中提高服务质量
用户第一次向网站发送请求页面,页面在运行期间创建一个cookie存储与当前用户相关数据
第一个页面工作完毕后,将【cookie写入响应头】交换给浏览器,浏览器将它存储在缓存里
一段时间后用户通过【同一个浏览器】再次向【之前的网站】发送请求时
【浏览器无条件的将网站之前推送的cookie写入到请求头】发送过去
//创建一个cookie对象,保存当前用户数据
cookie card = new cookie("key1","abc"); 【cookie相当于一个map,一个cookie只能存放一个键值对 只能是String】
//【card】将cookie写入到响应头,交给浏览器
resp.addcookie(card);
//调用请求对象从请求头得到浏览器返回的cookie
cookie cookieArray[] = request.getcookies();
//循环遍历数据得到每个cookie的key和value
for(cookie card :cookieArray){
System.out.println(card);
}
cookie销毁时机:默认情况存放在浏览器的缓存里,浏览器关闭就被销毁,
手动设置可以存放在客户端硬盘上,同时要指定存活时间 cookie.setMaxAge(60)
HttpSession接口
两个Servlet来自同一网站,并且为同一用户或者浏览器提供服务,此时借助HttpSession对象进行数据共享
HttpSession接口修饰对象称为【会话作用域对象】
【面试题】
HttpSession和cookie的区别
cookie存放在客户端计算机(浏览器缓存/硬盘) 数据类型只能是String 一个cookie只能存储一个共享数据 相当于【会员卡】
HttpSession存放在服务端计算机内存里 任意数据类型Object 用map集合存储任意数量共享数据 相当于服务端【私人保险柜】
命令实现
第一个页面
调用请求对象向TomCat索要当前用户在服务端的私人保险柜
HttpSession session = request.getSession();
将数据添加
session.setAttribute("key1",共享数据);
第二个页面
调用请求对象向TomCat索要当前用户在服务端的私人保险柜
HttpSession session = request.getSession();
从会话作用域对象得到OneServlet提供的共享数据
Object 共享数据 = session.getAttribute("key1");
getSession() 与 getSession(false)区别
getSession():如果当前用户在服务端已经有数据了,要求TomCat将这个数据进行返回
如果当前用户在服务端没有数据,要求TomCat为当前用户创建全新数据柜
getSession(false): 如果当前用户在服务端已经有数据了,要求TomCat将这个数据进行返回
如果当前用户在服务端没有数据,TomCat返回null;
销毁时机:用户和HttpSession关联时用的cookie只能存放在浏览器缓存中
浏览器关闭时,关系被切断,Tomcat在浏览器关闭时不会进行销毁
TomCat为每个HttpSession对象设置30分钟空闲时间,达到30分钟会销毁
HttpServletRequest接口
如果两个Servlet之间通过【请求转发】方式进行调用。彼此之间共享同一个请求协议包,而一个请求
协议包只对应一个请求对象,因此servlet之间共享一个请求对象,此时可以利用这个请求对象在两个
Servlet间共享
在请求对象实现Servlet之间数据共享时,开发人员将请求对象成为【请求作用域对象】
命令实现
将数据添加到请求作用域对象中attribute属性
req.setAttribute("key1",数据);
向Tomcat申请调用TwoServlet
req.getRequestDispatcher("/two").forward(req,response)
从当前请求对象得到OneServlet写入到共享数据
object 数据 = req.getAttribute("key1");
监听器接口
来自Servlet规范下接口,共有8个接口。
由开发人员亲自实现,Http服务器提供jar包并没有对应实现类
监听器接口用于监控【作用域对象生命周期变化时刻】以及【作用域对象共享数据变化时刻】作用域对象:在服务端内存中可以在某些条件下为两个Servlet提供数据共享方案的对象
ServletContext:全局作用域对象
HttpSession:会话作用域对象
HttpServletRequest:请求作用域对象三步监听器接口实现类开发规范:
1.根据监听的实际情况,选择对应监听器接口进行实现
2.重写监听器接口声明【监听事件处理方法】
3.在web.xml文件将监听器接口实现类注册到Http服务器
【ServletContextListener接口】 作用:通过这个接口合法的检测全局作用域对象被初始化时刻以及被销毁时刻 public void contextInitialized(); 在全局作用域对象对象被Http服务器初始化调用 public void contextDestroyed(); 在全局作用域对象对象被Http服务器销毁时调用 【ServletContextAttributeListener接口】 作用:通过这个接口合法的检测全局作用域对象共享数据变化时刻 public void contextAdd(); 在全局作用域对象添加共享数据 public void contextReplaced(); 在全局作用域对象更新共享数据 public void contextRemove(); 在全局作用域对象删除共享数据 Filter过滤器接口 拦截Http服务器检测当前请求合法性,对当前请求进行增强操作 Filter接口实现类由开发人员负责提供,Http服务器不提供 Filter接口在Http服务器调用资源文件之前,对Http服务器进行拦截 三步实现类开发步骤: 1.创建一个Java类实现Filter接口 2.重写Filter接口中doFilter方法 3.web.xml将过滤器接口实现类注册到Http服务器命令作用 拦截地址通知Tomcat在调用何种资源文件之前要调用OneFilter过滤进行拦截 要求Tomcat在调用某个具体文件之前,来调用OneFilter拦截 OneFilter 拦截地址 文件 要求Tomcat在调用某个文件夹之前,来调用OneFilter拦截文件夹/* 要求Tomcat在调用任意文件夹某种类型文件之前,来调用OneFilter拦截*.jpg 要求Tomcat在调用任意文件之前,来调用OneFilter拦截/*



