Java面试题集116135.docx

上传人:b****6 文档编号:7743044 上传时间:2023-01-26 格式:DOCX 页数:28 大小:239.09KB
下载 相关 举报
Java面试题集116135.docx_第1页
第1页 / 共28页
Java面试题集116135.docx_第2页
第2页 / 共28页
Java面试题集116135.docx_第3页
第3页 / 共28页
Java面试题集116135.docx_第4页
第4页 / 共28页
Java面试题集116135.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

Java面试题集116135.docx

《Java面试题集116135.docx》由会员分享,可在线阅读,更多相关《Java面试题集116135.docx(28页珍藏版)》请在冰豆网上搜索。

Java面试题集116135.docx

Java面试题集116135

摘要:

这一部分讲解基于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经常因为性能开销上的问题被诟病,然而FastCGI早就已经解决了CGI效率上的问题,所以面试的时候大可不必诟病CGI,腾讯的网站就使用了CGI技术,相信你也没感觉它哪里不好。

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

1.voidinit(ServletConfigconfig)throwsServletException

2.voidservice(ServletRequestreq,ServletResponseresp)throwsServletException,java.io.IOException

3.voiddestory()

4.java.lang.StringgetServletInfo()

5.ServletConfiggetServletConfig()

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] viewplain copy

 

1.<%@ page pageEncoding="UTF-8"%>  

2.<%  

3.String path = request.getContextPath();  

4.String basePath = request.getScheme()+":

//"+request.getServerName()+":

"+request.getServerPort()+path+"/";  

5.%>  

6.  

7.

DOCTYPE html>  

8.  

9.    

10.    ">  

11.    首页  

12.      

13.        * { font-family:

 "Arial"; }  

14.      

15.    

16.    

17.    

18.    

Hello, World!

  

19.    


  

20.    

Current time is:

 <%= new java.util.Date().toString() %>

  

21.    

22.  

对应的Java代码:

[java] viewplain 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("text/html;charset=UTF-8");  

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();  

63.            _jspx_out = out;  

64.  

65.            out.write('\r');  

66.            out.write('\n');  

67.  

68.            String path = request.getContextPath();  

69.            String basePath = request.getScheme() + ":

//"  

70.                    + request.getServerName() + ":

" + request.getServerPort()  

71.                    + path + "/";  

72.// 以下代码通过输出流将HTML标签输出到浏览器中  

73.            out.write("\r\n");  

74.            out.write("\r\n");  

75.            out.write("

DOCTYPE html>\r\n");  

76.            out.write("\r\n");  

77.            out.write("  \r\n");  

78.            out.write("    

79.            out.print(basePath);  

80.            out.write("\">\r\n");  

81.            out.write("    首页\r\n");  

82.            out.write("    \r\n");  

83.            out.write("    \t* { font-family:

 \"Arial\"; }\r\n");  

84.            out.write("    \r\n");  

85.            out.write("  \r\n");  

86.            out.write("  \r\n");  

87.            out.write("  \r\n");  

88.            out.write("    

Hello, World!

\r\n");  

89.            out.write("    


\r\n");  

90.            out.write("    

Current time is:

 ");  

91.            out.print(new java.util.Date().toString());  

92.            out.write("

\r\n");  

93.            out.write("  \r\n");  

94.            out.write("\r\n");  

95.        } catch (java.lang.Throwable t) {  

96.            if (!

(t instanceof javax.servlet.jsp.SkipPageException)) {  

97.                out = _jspx_out;  

98.                if (out !

= null && out.getBufferSize() !

= 0)  

99.                    try {  

100.                        out.clearBuffer();  

101.                    } catch (java.io.IOException e) {  

102.                    }  

103.                if (_jspx_page_context !

= null)  

104.                    _jspx_page_context.handlePageException(t);  

105.                else  

106.                    throw new ServletException(t);  

107.            }  

108.        } finally {  

109.            _jspxFactory.releasePageContext(_jspx_page_context);  

110.        }  

111.    }  

112.}  

119、get和post请求的区别?

答:

①get请求用来从服务器上获得资源,而post是用来向服务器提交数据;

②get将表单中数据按照name=value的形式,添加到action所指向的URL后面,并且两者使用“?

”连接,而各个变量之间使用“&”连接;post是将表单中的数据放在HTML头部(header),传递到action所指向URL;

③get传输的数据要受到URL长度限制(1024字节);而post可以传输大量的数据,上传文件只能使用post方式;

④使用get时参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据还是应用使用post;

⑤get使用MIME类型application/x-www-form-urlencoded的URL编码(URLencoding,也叫百分号编码)文本的格式传递参数,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是"%20"。

 

120、常用的Web容器

答:

Unix和Linux平台下使用最广泛的免费HTTP服务器是Apache服务器,而Windows平台的服务器通常使用IIS作为Web服务器。

选择Web服务器应考虑的因素有:

性能、安全性、日志和统计、虚拟主机、代理服务器、缓冲服务和集成应用程序等。

下面是对常用服务器的简介:

∙IIS:

Microsoft的Web服务器产品为InternetInformationServices。

IIS是允许在公共Intranet或Internet上发布信息的Web服务器。

IIS是目前最流行的Web服务器产品之一,很多著名的网站都是建立在IIS的平台上。

IIS提供了一个图形界面的管理工具,称为Internet服务管理器,可用于监视配置和控制Internet服务。

IIS是一种Web服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。

它提供ISAPI(IntranetServerAPI)作为扩展Web服务器功能的编程接口;同时,它还提供一个Internet数据库连接器,可以实现对数据库的查询和更新。

∙Kangle:

Kangle Web服务器是一款跨平台、功能强大、安全稳定、易操作的高性能Web服务器和反向代理服务器软件。

此外,Kangle也是一款专为做虚拟主机研发的Web服务器。

实现虚拟主机独立进程、独立身份运行。

用户之间安全隔离,一个用户出问题不影响其他用户。

支持PHP、ASP、ASP.NET、Java、Ruby等多种动态开发语言。

∙WebSphere:

WebSphereApplicationServer是功能完善、开放的Web应用程序服务器,是IBM电子商务计划的核心部分,它是基于Java的应用环境,用于建立、部署和管理Internet和IntranetWeb应用程序,适应各种Web应用程序服务器的需要,范围从简单到高级直到企业级。

∙WebLogic:

BEAWebLogicServer是一种多功能、基于标准的Web应用服务器,为企业构建自己的应用提供了坚实的基础。

各种应用开发、部署所有关键性的任务,无论是集成各种系统和数据库,还是提交服务、跨Internet协作,Weblogic都提供了相应的支持。

由于它具有全面的功能、对开放标准的遵从性、多层架构、支持基于组件的开发,基于Internet的企业都选择它来开发、部署最佳的应用。

BEAWebLogicServer在使应用服务器成为企业应用架构的基础方面一直处于领先地位,为构建集成化的企业级应用提供了稳固的基础,它们以Internet的容量和速度,在连网的企业之

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1