1.两者分别是什么?其作用是什么?
Servlet是一种运行在服务端的Java程序,可以用来收集来自用户表单的数据输入,并将来自数据库或者其他来源的数据呈现给客户端,还可以动态的生成网页。
Filter也被称之为过滤器,是一段可复用的代码,可以在客户端请求到达Servlet之前,拦截HttpServletRequest,并对其进行处理;也可以在HttpServletResponse返回给客户端之前,对其再次进行处理。
2.生命周期?
Servlet:
1)Servlet通过调用init()方法进行初始化;
该方法只会被调用一次,会在创建Servlet实例时被调用;而Servlet创建于第一次调用该Servlet的URL时,也可以指定为在服务器启动时被加载
2)Servlet调用service()方法处理客户端的请求;
该方法调用次数由客户端请求次数决定,是在Servlet接收到用户请求时被调用。service()方法根据客户端请求类型(POST、GET、PUT、DELETE)来分别调用doPost()、doGet()、doPut()、doDelete()等方法
3)Servlet调用destroy()方法结束;
该方法只会被调用一次,是在Servlet生命周期结束时被调用。方法被调用后,该Servlet会被标记为垃圾回收
4)Servlet被JVM垃圾回收器回收。
Filter:
1)调用init()方法初始化
该方法只会被调用一次。Web应用程序启动时,创建Filter实例对象,并调用init()方法,读取web.xml配置,完成对象的初始化。
2)调用doFilter()方法拦截请求
该方法调用次数根据用户请求决定。该方法能够完成实际的过滤操作
3)调用destroy()方法销毁
当Web应用移除或者服务器停止时,调用destroy()方法进行销毁。
3.执行顺序?
Filter->Servlet
Filter拦截客户端请求,按需进行处理后,转发给相应的Servlet去处理客户端请求。
4.区别?
Servlet流程短,URL传来后,对其进行处理,然后就返回或者转向指定的页面;
Filter是线性的,或者是链结构的,URL传来,检查后,既可以保持原来的流程继续向下执行,既可以把请求转发给Servlet,也可以被Filter链中的下一个Filter接收。Filter链的顺序,是由web.xml中配置。
5.Servlet九大内置对象?
严谨来说,Servlet并没有内置对象,我们常说的内置对象是JSP的。而JSP的本质又是Servlet。
JSP内置对象 | Servlet中Java对象 | 相关方法 |
---|---|---|
request | HttpServletRequest | 1.getParameter(String name);获取表单提交的数据 2.getParameterNames();获取客户端提交的所有参数名 3.getAttribute(String name);获取name指定的属性值 4.getAttributeNames();获取request对象所有属性的名称集合 5.getSession(boolean create);获取HttpSession对象 |
response | HttpServletResponse | 用于对客户端的请求做出动态响应,向客户端发送数据 1.getCharacterEncoding();返回响应用的字符编码格式 2.getOutputStream();返回响应的输出流 3.getWriter();返回可以向客户端输出字符的一个对象 |
session | HttpSession | 从一个客户打开浏览器并连接到服务器开始,刀可断关闭浏览器离开这个服务器结束,这个过程被称为一个会话,session对象可以保存用户的会话状态 |
exception | Throwable | 用于处理JSP页面中发生的错误和异常,可以帮助我们了解并处理页面中的错误信息 |
page | this | 当前JSP页面 1.getClass();获取page对象的类 2.hashCode()获取page对象的hash值 3.equals(Object obj);判断page对象是否与参数中的obj相等 4.copy(Object obj);把此page对象赋值到指定的Object对象中 5.clone();克隆当前的page对象 |
pageContext | PageContext | 用于管理对属于JSP中特殊可见部分中已经命名对象的访问 |
application | ServletContext | 实现了用户间数据的共享,可存放全局变量 |
config | ServletConfig | 用来获取服务器初始化配置参数 1.getServletContext();获取当前的Servlet的上下文 2.getInitParameter(String name);获取指定的初始参数的值 3.getInitParameterNames();获取所有的初始化参数的值 4.getServletName();获取当前Servlet名称 |
out | JSPWriter | 用来向客户端输出各种数据 1.print();/println();输出各种类型数据 2.clearBuffer();清除缓冲区的数据,并将数据写入客户端 3.clear();清除缓冲区的数据,但不将数据写入客户端 4.close();关闭输入流 |