您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > JAVA面试题全集(中)
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+/;%!DOCTYPEhtmlhtmlheadbasehref=%=basePath%title首页/titlestyletype=text/css*{font-family:Arial;}/style/headbodyh1Hello,World!/h1hr/h2Currenttimeis:%=newjava.util.Date().toString()%/h2/body/html对应的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.HttpJspBaseimplementsorg.apache.jasper.runtime.JspSourceDependent{privatestaticfinaljavax.servlet.jsp.JspFactory_jspxFactory=javax.servlet.jsp.JspFactory.getDefaultFactory();privatestaticjava.util.Mapjava.lang.String,java.lang.Long_jspx_dependants;privatejavax.el.ExpressionFactory_el_expressionfactory;privateorg.apache.tomcat.InstanceManager_jsp_instancemanager;publicjava.util.Mapjava.lang.String,java.lang.LonggetDependants(){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(html\r\n);out.write(head\r\n);out.writ
本文标题:JAVA面试题全集(中)
链接地址:https://www.777doc.com/doc-5352387 .html