第一范文网 - 专业文章范例文档资料分享平台

Java面试题集116-135

来源:用户分享 时间:2025/5/17 5:10:56 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

摘要:这一部分讲解基于Java的Web开发相关面试题,即便在Java走向没落的当下,基于Java的Web开发因为拥有非常成熟的解决方案,仍然被广泛应用。不管你的Web开发中是否使用框架,JSP和Servlet都是一个必备的基础,在面试的时候被问到的概率还是很高的。

116、说出Servlet的生命周期,并说出Servlet和CGI的区别?

答:Web容器加载Servlet并将其实例化后,Servlet生命周期开始,容器运行其init()方法进行Servlet的初始化;请求到达时调用Servlet的service方法,service方法会调用与请求对应的doGet或doPost等方法;当服务器关闭会项目被卸载时服务器会将Servlet实例销毁,此时会调用Servlet的destroy方法。Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI 对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet。

【补充1】SUN公司在1996年发布Servlet技术就是为了和CGI进行竞争,Servlet是一个特殊的Java程序,一个基于Java的Web应用通常包含一个或多个Servlet类。 Servlet不能够自行创建并执行,它是在Servlet容器中运行的,容器将用户的请求传递给Servlet程序,此外将Servlet的响应回传给用户。通常一个Servlet会关联一个或多个JSP页面。以前CGI经常因为性能开销上的问题被诟病,然而Fast CGI早就已经解决了CGI效率上的问题,所以面试的时候大可不必诟病CGI,腾讯的网站就使用了CGI技术,相信你也没感觉它哪里不好。

【补充2】Servlet接口定义了5个方法,其中前三个方法与Servlet生命周期相关:

1. void init(ServletConfig config) throws ServletException

2. void service(ServletRequest req, ServletResponse resp) throws ServletException,

java.io.IOException 3. void destory()

4. java.lang.String getServletInfo() 5. ServletConfig getServletConfig()

117、转发(forward)和重定向(redirect)的区别?

答:forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。redirect就是服务器端根据逻辑,发送一个状态码,告诉浏览器重新

去请求那个地址,因此从浏览器的地址栏中可以看到跳转后的链接地址。前者更加高效,在前者可以满足需要时,尽量使用转发(通过RequestDispatcher对象的forward方法,RequestDispatcher对象可以通过ServletRequest对象的getRequestDispatcher方法获得),并且,这样也有助于隐藏实际的链接;在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用重定向(通过HttpServletResponse对象调用其sendRedirect方法)。

118、JSP有哪些内置对象?作用分别是什么? 答:JSP有9个内置对象:

1. request:封装客户端的请求,其中包含来自GET或POST请求的参数; 2. response:封装服务器对客户端的响应; 3. pageContext:通过该对象可以获取其他对象; 4. session:封装用户会话的对象;

5. application:封装服务器运行环境的对象; 6. out:输出服务器响应的输出流对象; 7. config:Web应用的配置对象;

8. page:JSP页面本身(相当于Java程序中的this); 9. exception:封装页面抛出异常的对象。

【补充】如果用Servlet来生成网页中的动态内容无疑是非常繁琐的工作,另一方面,所有的文本和HTML标签都是硬编码,即使做出微小的修改,都需要进行重新编译。JSP解决了Servlet的这些问题,它是Servlet很好的补充,可以专门用作呈现给用户的视图(View),而Servlet作为控制器(Controller)专门负责处理用户请求并转发或重定向到某个页面。基于Java的Web开发很多都同时使用了Servlet和JSP。JSP页面其实是一个Servlet,能够运行Servlet的服务器(Servlet容器)通常也是JSP容器,可以提供JSP页面的运行环境,Tomcat就是一个Servlet/JSP容器。第一次请求一个JSP页面时,Servlet/JSP容器首先将JSP页面转换成一个JSP页面的实现类,这是一个实现了JspPage接口或其子接口HttpJspPage的Java类。JspPage接口是Servlet的子接口,因此每个JSP页面都是一个Servlet。转换成功后,容器会编译Servlet类,之后容器加载和实例化Java字节码,并执行它通常对Servlet所做的生命周期操作。对同一个JSP页面的后续请求,容器会查看这个JSP页面是否被修改过,如果修改过就会重新转换并重新编译并执行。如果没有则执行内存中已经存在的Servlet实例。我们可以看一段JSP代码对应的Java程序就知道一切了,而且9个内置对象的神秘面纱也会被揭开。 JSP页面:

[html] view plain copy

1. <%@ page pageEncoding=\%> 2. <%

3. String path = request.getContextPath();

4. String basePath = request.getScheme()+\

verPort()+path+\ 5. %> 6.

7. 8. 9.

10. 11. 首页 12. 15. 16. 17.

18.

Hello, World!

19.

20.

Current time is: <%= new java.util.Date().toString() %>

21. 22.

对应的Java代码:

[java] view plain copy

1. /*

2. * Generated by the Jasper component of Apache Tomcat 3. * Version: Apache Tomcat/7.0.52

4. * Generated at: 2014-10-13 13:28:38 UTC

5. * Note: The last modified time of this file was set to 6. * the last modified time of the source file after 7. * generation to assist with modification tracking. 8. */

9. package org.apache.jsp; 10.

11. import javax.servlet.*; 12. import javax.servlet.http.*; 13. import javax.servlet.jsp.*; 14.

15. public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase 16. implements org.apache.jasper.runtime.JspSourceDependent { 17.

18. private static final javax.servlet.jsp.JspFactory _jspxFactory = javax.servlet.jsp

.JspFactory

19. .getDefaultFactory(); 20.

21. private static java.util.Map _jspx_dependants; 22.

23. private javax.el.ExpressionFactory _el_expressionfactory; 24. private org.apache.tomcat.InstanceManager _jsp_instancemanager; 25.

26. public java.util.Map getDependants() { 27. return _jspx_dependants; 28. } 29.

30. public void _jspInit() {

31. _el_expressionfactory = _jspxFactory.getJspApplicationContext(

32. getServletConfig().getServletContext()).getExpressionFactory(); 33. _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory 34. .getInstanceManager(getServletConfig()); 35. } 36.

37. public void _jspDestroy() { 38. } 39.

40. public void _jspService(

41. final javax.servlet.http.HttpServletRequest request, 42. final javax.servlet.http.HttpServletResponse response) 43. throws java.io.IOException, javax.servlet.ServletException { 44. // 9个内置对象就是在这里定义的

45. final javax.servlet.jsp.PageContext pageContext; 46. javax.servlet.http.HttpSession session = null; 47. final javax.servlet.ServletContext application; 48. final javax.servlet.ServletConfig config; 49. javax.servlet.jsp.JspWriter out = null; 50. final java.lang.Object page = this;

51. javax.servlet.jsp.JspWriter _jspx_out = null;

52. javax.servlet.jsp.PageContext _jspx_page_context = null; 53.

54. try {

55. response.setContentType(\);

56. pageContext = _jspxFactory.getPageContext(this, request, response, 57. null, true, 8192, true); 58. _jspx_page_context = pageContext;

59. application = pageContext.getServletContext(); 60. config = pageContext.getServletConfig(); 61. session = pageContext.getSession(); 62. out = pageContext.getOut();

搜索更多关于: Java面试题集116-135 的文档
Java面试题集116-135.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c64uzh33jl68qp2012imx4yj364q360011jl_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top