Java面试题全集中.docx
- 文档编号:7277566
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:45
- 大小:58.89KB
Java面试题全集中.docx
《Java面试题全集中.docx》由会员分享,可在线阅读,更多相关《Java面试题全集中.docx(45页珍藏版)》请在冰豆网上搜索。
Java面试题全集中
这部分主要是与JavaWeb和WebService相关的面试题。
96、阐述Servlet和CGI的区别?
答:
Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet。
补充:
SunMicrosystems公司在1996年发布Servlet技术就是为了和CGI进行竞争,Servlet是一个特殊的Java程序,一个基于Java的Web应用通常包含一个或多个Servlet类。
Servlet不能够自行创建并执行,它是在Servlet容器中运行的,容器将用户的请求传递给Servlet程序,并将Servlet的响应回传给用户。
通常一个Servlet会关联一个或多个JSP页面。
以前CGI经常因为性能开销上的问题被诟病,然而FastCGI早就已经解决了CGI效率上的问题,所以面试的时候大可不必信口开河的诟病CGI,事实上有很多你熟悉的网站都使用了CGI技术。
97、Servlet接口中有哪些方法?
答:
Servlet接口定义了5个方法,其中前三个方法与Servlet生命周期相关:
-voidinit(ServletConfigconfig)throwsServletException
-voidservice(ServletRequestreq,ServletResponseresp)throwsServletException,java.io.IOException
-voiddestory()
-java.lang.StringgetServletInfo()
-ServletConfiggetServletConfig()
Web容器加载Servlet并将其实例化后,Servlet生命周期开始,容器运行其init()方法进行Servlet的初始化;请求到达时调用Servlet的service()方法,service()方法会根据需要调用与请求对应的doGet或doPost等方法;当服务器关闭或项目被卸载时服务器会将Servlet实例销毁,此时会调用Servlet的destroy()方法。
98、转发(forward)和重定向(redirect)的区别?
答:
forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect就是服务器端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,因此从浏览器的地址栏中可以看到跳转后的链接地址,很明显redirect无法访问到服务器保护起来资源,但是可以从一个网站redirect到其他网站。
forward更加高效,所以在满足需要时尽量使用forward(通过调用RequestDispatcher对象的forward()方法,该对象可以通过ServletRequest对象的getRequestDispatcher()方法获得),并且这样也有助于隐藏实际的链接;在有些情况下,比如需要访问一个其它服务器上的资源,则必须使用重定向(通过HttpServletResponse对象调用其sendRedirect()方法实现)。
99、JSP有哪些内置对象?
作用分别是什么?
答:
JSP有9个内置对象:
-request:
封装客户端的请求,其中包含来自GET或POST请求的参数;
-response:
封装服务器对客户端的响应;
-pageContext:
通过该对象可以获取其他对象;
-session:
封装用户会话的对象;
-application:
封装服务器运行环境的对象;
-out:
输出服务器响应的输出流对象;
-config:
Web应用的配置对象;
-page:
JSP页面本身(相当于Java程序中的this);
-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页面:
<%@pagepageEncoding="UTF-8"%>
<%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+":
//"+request.getServerName()+":
"+request.getServerPort()+path+"/";
%>
DOCTYPEhtml>
*{font-family:
"Arial";}
Hello,World!
Currenttimeis:
<%=newjava.util.Date().toString()%>
∙1
∙2
∙3
∙4
∙5
∙6
∙7
∙8
∙9
∙10
∙11
∙12
∙13
∙14
∙15
∙16
∙17
∙18
∙19
∙20
∙21
∙22
对应的Java代码:
/*
*GeneratedbytheJaspercomponentofApacheTomcat
*Version:
ApacheTomcat/7.0.52
*Generatedat:
2014-10-1313:
28:
38UTC
*Note:
Thelastmodifiedtimeofthisfilewassetto
*thelastmodifiedtimeofthesourcefileafter
*generationtoassistwithmodificationtracking.
*/
packageorg.apache.jsp;
importjavax.servlet.*;
importjavax.servlet.http.*;
importjavax.servlet.jsp.*;
publicfinalclassindex_jspextendsorg.apache.jasper.runtime.HttpJspBase
implementsorg.apache.jasper.runtime.JspSourceDependent{
privatestaticfinaljavax.servlet.jsp.JspFactory_jspxFactory=javax.servlet.jsp.JspFactory
.getDefaultFactory();
privatestaticjava.util.Map
privatejavax.el.ExpressionFactory_el_expressionfactory;
privateorg.apache.tomcat.InstanceManager_jsp_instancemanager;
publicjava.util.Map
return_jspx_dependants;
}
publicvoid_jspInit(){
_el_expressionfactory=_jspxFactory.getJspApplicationContext(
getServletConfig().getServletContext()).getExpressionFactory();
_jsp_instancemanager=org.apache.jasper.runtime.InstanceManagerFactory
.getInstanceManager(getServletConfig());
}
publicvoid_jspDestroy(){
}
publicvoid_jspService(
finaljavax.servlet.http.HttpServletRequestrequest,
finaljavax.servlet.http.HttpServletResponseresponse)
throwsjava.io.IOException,javax.servlet.ServletException{
//内置对象就是在这里定义的
finaljavax.servlet.jsp.PageContextpageContext;
javax.servlet.http.HttpSessionsession=null;
finaljavax.servlet.ServletContextapplication;
finaljavax.servlet.ServletConfigconfig;
javax.servlet.jsp.JspWriterout=null;
finaljava.lang.Objectpage=this;
javax.servlet.jsp.JspWriter_jspx_out=null;
javax.servlet.jsp.PageContext_jspx_page_context=null;
try{
response.setContentType("text/html;charset=UTF-8");
pageContext=_jspxFactory.getPageContext(this,request,response,
null,true,8192,true);
_jspx_page_context=pageContext;
application=pageContext.getServletContext();
config=pageContext.getServletConfig();
session=pageContext.getSession();
out=pageContext.getOut();
_jspx_out=out;
out.write('\r');
out.write('\n');
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+":
//"
+request.getServerName()+":
"+request.getServerPort()
+path+"/";
//以下代码通过输出流将HTML标签输出到浏览器中
out.write("\r\n");
out.write("\r\n");
out.write("
DOCTYPEhtml>\r\n");
out.write("\r\n");
out.write("
\r\n");out.write(" out.print(basePath); out.write("\">\r\n"); out.write("
out.write("
out.write("\t*{font-family:
\"Arial\";}\r\n");
out.write("\r\n");
out.write("\r\n");
out.write("\r\n");
out.write("
\r\n");out.write("
Hello,World!
\r\n");
out.write("
\r\n");
out.write("
Currenttimeis:
");
out.print(newjava.util.Date().toString());
out.write("\r\n");
out.write("\r\n");
out.write("\r\n");
}catch(java.lang.Throwablet){
if(!
(tinstanceofjavax.servlet.jsp.SkipPageException)){
out=_jspx_out;
if(out!
=null&&out.getBufferSize()!
=0)
try{
out.clearBuffer();
}catch(java.io.IOExceptione){
}
if(_jspx_page_context!
=null)
_jspx_page_context.handlePageException(t);
else
thrownewServletException(t);
}
}finally{
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
∙1
∙2
∙3
∙4
∙5
∙6
∙7
∙8
∙9
∙10
∙11
∙12
∙13
∙14
∙15
∙16
∙17
∙18
∙19
∙20
∙21
∙22
∙23
∙24
∙25
∙26
∙27
∙28
∙29
∙30
∙31
∙32
∙33
∙34
∙35
∙36
∙37
∙38
∙39
∙40
∙41
∙42
∙43
∙44
∙45
∙46
∙47
∙48
∙49
∙50
∙51
∙52
∙53
∙54
∙55
∙56
∙57
∙58
∙59
∙60
∙61
∙62
∙63
∙64
∙65
∙66
∙67
∙68
∙69
∙70
∙71
∙72
∙73
∙74
∙75
∙76
∙77
∙78
∙79
∙80
∙81
∙82
∙83
∙84
∙85
∙86
∙87
∙88
∙89
∙90
∙91
∙92
∙93
∙94
∙95
∙96
∙97
∙98
∙99
∙100
∙101
∙102
∙103
∙104
∙105
∙106
∙107
∙108
∙109
∙110
∙111
∙112
100、get和post请求的区别?
答:
①get请求用来从服务器上获得资源,而post是用来向服务器提交数据;
②get将表单中数据按照name=value的形式,添加到action所指向的URL后面,并且两者使用"?
"连接,而各个变量之间使用"&"连接;post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向URL;
③get传输的数据要受到URL长度限制(1024字节);而post可以传输大量的数据,上传文件通常要使用post方式;
④使用get时参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据还是应用使用post;
⑤get使用MIME类型application/x-www-form-urlencoded的URL编码(也叫百分号编码)文本的格式传递参数,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是"%20"。
101、常用的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:
KangleWeb服务器是一款跨平台、功能强大、安全稳定、易操作的高性能Web服务器和反向代理服务器软件。
此外,Kangle也是一款专为做虚拟主机研发的Web服务器。
实现虚拟主机独立进程、独立身份运行。
用户之间安全隔离,一个用户出问题不影响其他用户。
支持PHP、ASP、ASP.NET、Java、Ruby等多种动态开发语言。
-WebSphere:
WebSphereApplicationServer是功能完善、开放的Web应用程序服务器,是IBM电子商务计划的核心部分,它是基于Java的应用环境,用于建立、部署和管理Internet和IntranetWeb应用程序,适应各种Web应用程序服务器的需要。
-WebLogic:
WebLogicServer是一款多功能、基于标准的Web应用服务器,为企业构建企业应用提供了坚实的基础。
针对各种应用开发、关键性任务的部署,各种系统和数据库的集成、跨Internet协作等Weblogic都提供了相应的支持。
由于它具有全面的功能、对开放标准的遵从性、多层架构、支持基于组件的开发等优势,很多公司的企业级应用都选择它来作为开发和部署的环境。
WebLogicServer在使应用服务器成为企业应用架构的基础方面一直处于领先地位,为构建集成化的企业级应用提供了稳固的基础。
-Apache:
目前Apache仍然是世界上用得最多的Web服务器,其市场占有率很长时间都保持在60%以上(目前的市场份额约40%左右)。
世界上很多著名的网站都是Apache的产物,它的成功之处主要在于它的源代码开放、有一支强大的开发团队、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面。
-Tomcat:
Tomcat是一个开放源代码、运行Servlet和JSP的容器。
Tomcat实现了Servlet和JSP规范。
此外,Tomcat还实现了Apache-Jakarta规范而且比绝大多数商业应用软件服务器要好,因此目前也有不少的Web服务器都选择了Tomcat。
-Nginx:
读作"enginex",是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Nginx是由IgorSysoev为俄罗斯访问量第二的Rambler站点开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
在2014年下半年,Nginx的市场份额达到了14%。
102、JSP和Servlet是什么关系?
答:
其实这个问题在上面已经阐述过了,Servlet是一个特殊的Java程序,它运行于服务器的JVM中,能够依靠服务器的支持向浏览器提供显示内容。
JSP本质上是Servlet的一种简易形式,JSP会被服务器处理成一个类似于Servlet的Java程序,可以简化页面内容的生成。
Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML分离开来。
而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
有人说,Servlet就是在Java中写HTML,而JSP就是在HTML中写Java代码,当然这个说法是很片面且不够准确的。
JSP侧重于视图,Servlet更侧重于控制逻辑,在MVC架构模式中,JSP适合充当视图(view)而Servlet适合充当控制器(controller)。
103、讲解JSP中的四种作用域。
答:
JSP中的四种作用域包括page、request、session和application,具体来说:
-page代表与一个页面相关的对象和属性。
-request代表与Web客户机发出的一个请求相关的对象和属性。
一个请求可能跨越多个页面,涉及多个Web组件;需要在页面显
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 试题 全集