Java Web 部分面试题一1
说出 Servlet 的生命周期,并说出 Servlet 和 CGI 的区别
Web 容器加载 servlet 并将其实例化后,servlet 生命周期开始,容器运营其 init 方法进行 servlet 的初始化,请求到达时运营其service 方法,service 方法自动派遣运营于请求相应的 doXXX 方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy 方法
与 CGI 的区别在与 servlet 处在服务器进程中,它通过多线程方式运营其 service 方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而 CGI 对每个请求都产生新的进程,服务完毕后就销毁,所以效率上低于 servlet
forward 和 redirect 的区别
forward 是容器中控制权的转向,是服务器请求资源,服务器直接访问目的地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器主线不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址
redirect 就是服务器端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以 session,request 参数都可以猎取,并且从浏览器的地址栏中可以看到跳转后的链接地址
前者更加高效,在前者可以满足需要时,尽量使用 forward()方法,也有助于隐藏实际的链接;在有些情况下,比如需要跳转到一个其它服务器上的资源,则必须使用 sendRedirect()方法
JSP 中动态 include 与静态 include 的区别
动态 include 用 jsp:include 动作实现它总是会检查所包含文献中的变化,适合用于包含动态页面,并且可以带参数;静态 incl