java面试 servlet,Java面试经典之Servlet

关于Servlet的生命周期一直是java面试中的经典问题:经常被问到“请你大体描述以下java中servlet的生命周期”这样的问题。大体总结以下:

回答要点:

1.只有一个Servlet对象(要点)

2.第一次请求的时候被初始化,只此一遍

3.初始化后先调用init方法,只此一遍

4.每个请求,调用一遍service -> service -> doGet/doPost。以多线程的方式运行

5.卸载前调用destroy方法

具体描述:

只存在一个Servlet对象,在有客户端请求时才进行初始化,也只初始化一次,在destroy之前,所有的请求不再初始化。初始化完成后调用init方法,同初始化一样,init方法也只调用一次。接下来对于每个请求先调用公有的service方法,然后公有的service方法再调用私有的service方法,私有的service方法根据客户端的请求方式调用doGet或者doPost方法。这个过程是通过多线程来实现的,也就是每一次请求就会执行一次这样的顺序。在卸载容器时会调用destroy方法销毁Servlet对象。

在Servlet中,转向到其它Servlet和JSP的时候,可以通过两种方式实现: (1)使用response对象的sendRedirect()方法 (2)使用RequestDispatcher对象的forward()方法      {例:request.getRequestDispatcher("/a.jsp").forward(request, response);} 二者区别: (1)跳转路径的区别     A、response.sendRedirect("/projectName/XXXX"):      转向web服务器的根路径如:http://localhost:8080/这里的最后“/”!!!,所以要带Web项目名称.      {例:/projectName/XXXXX-------->所以就是在跳转要加上web项目名称}      B、request.getDispatcher("/XXXX").forward(request,response);      转向web项目的根路径如:http://localhost:8080/projectName/这里的最后“/”!!!,所以不带Web项目名称.      {例:/XXXX--------------------->这个就不用加啦!!!} (2)读取request.setAttribute()属性的区别     A、response.sendRedirect()     是重新定向前后页面不是一个request,不可以读取转向前request对象通过setAttribute()方法所设     定的属性值。就是用request.getAttribute得不到设进request的参数了。     B、rd.forward(request,response)     是请求转发,前后页面共享一个request ,可以读取转向前request对象通过setAttribute()方法所设     定的属性值。 (3)跳转后在Brower地址栏的地址的区别     A、response.sendRedirect()     地址栏显示的地址是所转向到的Servlet或者JSP的地址。(这个自己实验下,我不讲了,表达不清)     B、rd.forward(request,response)     转向后,地址栏显示的地址是转向前原Servlet的地址。(这个自己实验下,我不讲了,表达不清) (4)跳转速度上的区别(但是平常这个好像也没有太大的区别)     response.sendRedirect()     可以转向到本Web应用之外的页面和网站,转向的速度相对要慢     rd.forward(request,reponse)     不可以转向到本Web应用之外的页面和网站,转向的速度相对要快,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、说一说Servlet的生命周期?★★★★★ 答: servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。 这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。 2、servlet的生命周期 答: web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。 通过调用service()方法实现,根据请求的不同调用不同的do***()方法。 结束服务,web容器调用servlet的destroy()方法。 3、Servlet的基本架构 public class ServletName extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } } 4、什么情况下调用doGet()和doPost()? 答:Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。 5、如何现实servlet的单线程模式★★ 答:<%@page isThreadSafe=false%> 面试中会遇到! 6、页面间对象传递的方法 答:request,session,application,cookie等 7、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 答:JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是类servletServlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。 8、四种会话跟踪技术(重要考点)★★★★★ 答:会话作用域ServletsJSP 页面描述 page是代表与一个页面相关的对象和属性。 一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。 这既包括 servlet 又包括被编译成 servlet 的 JSP 页面。 request是代表与 Web 客户机发出的一个请求相关的对象和属性。 一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)。 session是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求。 application是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值