1.servlet是100%的运行在服务器端为客户端请求作出相应的的纯Java的应用程序。
2.J2EE(Java)中有几种容器(曾经的面试题)★:
①servlet容器(eg. Tomcat , Jetty)
②EJB容器(JBOSS<Jboss公司> 、Weblogic<BEA> 、WebSphere<IBM>)
③Applet容器(现在几乎不用了)
3.开发一个servlet的步骤:
①声明一个类,并且让该类继承自HttpServlet类
②重写doGet(),doPost()方法
③在web.xml中注册一个servlet
4.servlet的生命周期:★(笔试和面试遇到过)
①客户端发出请求(post或get) → web容器(eg.Tomcat)
②容器产生request,resonse两个对象
③容器根据URL找到合适的Servlet并分配线程进行访问。
④Service()方法根据请求头(每次请求http的头部信息是不同的,eg.get,post),决定调用doGet()或者doPost()方法
⑤Servlet使用相应的对象通过容器给客户端做出响应
⑥service()方法执行结束,访问线程和request、response对象被销毁
5.生命周期的几个阶段:
①实例化(1次):web容器创建Servlet的实例。
②初始化(1次):web容器调用Servlet的init()方法。
③服务(多次调用):调用service()方法,由service方法调用doxxx()方法
④销毁(1次):web容器关闭时调用destory()方法销毁servlet
6.一个Servlet在一个Web容器中只有一个对象(或实例,有唯一的实例,不同的线程),即只在第一次被请求时,创建一个对象;但是其doGet(),doPost()方法被反复调用 → 那么多个请求就会有多个线程,故有可能产生线程同步的问题,造成线程的不安全。 → 为了避免线程的同步问题,就要避免使用全局的实例变量。
7.注意事项:从servlet跳转到JSP页面时,最好用“请求转发跳转”,因为在页面的URL地址栏不会显示jsp页面的地址,有利于保护真正的JSP地址。
8.在servlet中创建session对象:
HttpSession session = request.getSession();
9.过滤器 (比如:权限过滤,把UTF-8放在过滤器中,我们就不用每次都转码了!!)
①servlet中的过滤器是实现了javax.servlet.Filter这个接口。
②其是双向过滤
③Filter在整个容器中也只有一个对象,并且是在关闭容器销毁
④所有的请求都要经过过滤器。(当然也和你web.xml中的配置有关系)
⑤多个过滤器的过程顺序, 以在web.xml中的配置顺序为主
10.在servlet中获得application对象的方法有2两种:
①ServletContext application = getServletContext();
②HttpSession session = request.getSession();
ServletContext application = session.getServletContext();