Servlet知识点回顾
一、Servlet生命周期
服务器调用一个Servlet的8个步骤:
1、在服务器启动时,当Servlet被配置好或者被客户首次请求时,由服务器加载servlet,这一步相当于下列代码:
Class c=Class.forName("com.source.MyServlet");
2、服务器创建一个Servlet类的实例来为所有的请求服务。利用多线程,可以由单个servlet类的实例来服务于并行的请求,此步相当于下列代码:
Servlet s=(Servlet)c.newInstance();
3、服务器调用Servlet的init方法,用来对客户端的首次请求提供服务之前,完成一些初始化的工作。
4、服务器从包含在客户请求中的数据里构造一个ServletRequest或者HttpServletRequest对象,还构造一个ServletResponse或者HttpServletResponse对象来为返回响应提供方法。到底生成哪一种类型的对象,取决于Servlet是扩展了GenericServlet还是扩展了HttpServlet。
5、服务器调用Servlet的service方法,将步骤4中的对象作为参数传递进去。当并行的请求到来时,多个service方法能够同时运行在独立的线程中。
6、通过分析ServletRequestt或者HttpServletRequest对象,service方法处理客户端的请求,并用ServletResponse或者HttpServletResponse对象来响应。
7、如果服务器收到另一个对该Servlet的请求,处理过程从步骤5重复。
8、一旦Servlet容器检测到一个Servlet要被卸载(可能是因为停止Servlet容器或者web应用要被卸载掉),服务器会在所有的Servlet的service线程完成之后调用Servlet的destory方法。
二、doGet和doPost方法
1、通过表单提交到的servlet,看form的method是get还是post
2、通过链接<a href...>访问的servlet调用doGet方法
3、直接在浏览器地址栏键入的servlet地址调用也是doGet方法
get方式:
post方式:将各个表单字段元素及其数据作为http消息的实体内容发送给web服务器端,传送的数据量要比get方式传送的数据量大的多。
三、ServletContext接口
Servlet引擎为每个Web应用都会创建一个对应的ServletContext对象,ServletContext对象被包含在ServletConfig对象中。
由于一个Web应用程序中的所有Servlet都共享一个ServletContext对象,所以,ServletContext对象被称之为application对象。
功能:
- 获取web应用程序的初始化参数
- 记录日志
- application域范围的属性
- 访问资源文件
- 获取虚拟路径所映射的本地路径:getRealPath(String path);
- web应用程序之间的访问
- 其它方法
四、过滤器
通过Filter过滤器技术,对WEB服务器管理所有Web资源:例如对jsp、静态图片文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
1、Filter实现原理
Filter接口中有一个doFilter方法,当编写好Filter,并配置对哪个Web资源进行拦截后,web服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法。WEB服务器在调用doFilter方法时,会传递一个filterChain对象进来,filterChain对象是也提供了一个doFilter方法,根据需求决定是否调用此方法,调用该方法,则web服务器就会调用web资源的service方法。
2、开发步骤
编写Java类实现Filter接口,并实现其doFilter方法
在web.xml文件中使用<filter>和<filter-mapping>元素对编写的filter类进行注册,并设置它所拦截的资源。
注:在一个web应用中,可以开发多个filter,这些filter组合起来称为一个Filter链。web服务器根据在web.xml文件的注册顺序,决定先调用哪个Filter。