(一)JAVA面试题 java web部分 201
1.Servlet和jsp页面过滤器Filter的作用及配置
【参考答案】
过滤器是一个驻留在服务器端的Web组件,它可以截取客户端和服务器端资源之间的请求与响应信息,并对这些信息进行过滤。作用:用户请求审查、用户数据转换、统一认证、输出数据进行压缩、对请求响应进行加密。
配置:一般在web.xml中配置,通过和元素来完成的。
2.JSP内置对象作用,如何取Cookie的方法
【参考答案】
使用request对象的getCookies()方法取到所有客户端cookies信息。
(1) HttpServletRequest类的request对象
作用:代表请求对象,主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。
(2) HttpServletResponse类的respone对象
作用:代表响应对象,主要用于向客户端发送数据
(3) JspWriter类的out对象
作用:主要用于向客户端输出数据;
Out的基类是JspWriter
(4) HttpSession类的session对象
作用:主要用于来分别保存每个用户信息,与请求关联的会话;
会话状态维持是Web应用开发者必须面对的问题。
(5) ServletContext类的application对象
作用:主要用于保存用户信息,代码片段的运行环境;
它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享.
(6) PageContext类的pageContext对象
作用:管理网页属性,为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中已命名对象的访问,它的创建和初始化都是由容器来完成的。
(7) ServletConfig类的config对象
作用:代码片段配置对象,表示Servlet的配置。
(8) Object类的Page(相当于this)对象
作用:处理JSP网页,是Object类的一个实例,指的是JSP实现类的实例,即它也是JSP本身,只有在JSP页面范围之内才是合法的。
(9)Exception
作用:处理JSP文件执行时发生的错误和异常
3.通过部署描述文件(web.xml)可以配置哪些功能?
【参考答案】
1、配置项目的欢迎页面。
2、配置Servlet访问URL
3、配置Web容器、Servlet的初始化参数
4、配置错误页面,可以通过异常编号进行错误页面跳转。
5、Servlet加载优先级。
6、Web容器监听器。
7、Web请求过滤器。
8、设置会话的过期时间。
4.JSP有哪些的动作?分别有什么作用?
【参考答案】
:在页面被请求的时候引入一个文件。
:寻找或者实例化一个JavaBean。
:设置JavaBean的属性。
:输出某个JavaBean的属性。
:把请求转到一个新的页面。
:在请求转发与include中进行页面传参。
:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
【分析】
主要说出常用的即可,分类罗列,一类与JavaBean相关的动作,
>\\,另一类是转发包含的指令\
d>\
5.JSP与SERVLET区别
【参考答案】
JSP在本质上就是SERVLET,但是两者的创建方式不一样.Servlet完全是JAVA程序代码构成,擅长于流程控制;而.JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页,同时在MVC设计模式中JSP充当视图层,而Servlet位于控制层。另外JSP也是Servlet技术的扩展,本质上就是Servlet,就是JSP的另一种简易体现形式,因为JSP编译后就是一个“类servlet”,再经由JVM编译生成Java类文件来执行。
6.Tomcat的class加载的优先顺序一览
【参考答案】
加载顺序图示如下:
第一步:加载JVM类库。一般是加载由虚拟机提供的基本的运行时类和系统扩展目录($JAVA_HOME/jre/lib/ext)下的JAR包。
第二步:加载系统环境变量的类库。这个加载器用来加载CLASSPATH环境变量中指定的类。
第三步:加载Tomcat下面common文件夹下面的公共类库。
第四步:加载自己需要的catalina类库。
第五步:webapps下面自己应用的类库,包括webapp1、webapp1......等。
7.BS与CS的联系与区别。【极地信息面试题】
【参考答案】
C/S是Client/Server的缩写,表示客户端需要安装专用的客户端软件与服务器交互。
B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Internet Explorer。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server同数据库进行数据交互。
C/S与B/S区别:
1.硬件环境不同:
C/S一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务.
B/S建立在广域网之上的,不必是专门的网络硬件环境,例与电话上网,租用设备.信息自己管理.有比C/S更强的适应范围,一般只要有操作系统和浏览器就行
2.对安全要求不同
C/S一般面向相对固定的用户群,对信息安全的控制能力很强.一般高度机密的信息系统采用C/S结构适宜.可以通过B/S发布部分可公开信息.
B/S建立在广域网之上,对安全的控制能力相对弱,可能面向不可知的用户。
3.对程序架构不同
C/S程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑.
B/S对安全以及访问速度的多重的考虑,建立在需要更加优化的基础之上.比C/S有更高的要求B/S结构的程序架构是发展的趋势,从MS的.Net系列的BizTalk 2000 Exchange 2000等,全面支持网络的构件搭建的系统. SUN和IBM推的JavaBean构件技术等,使B/S更加成熟.
4.软件重用不同
C/S程序可以不可避免的整体性考虑,构件的重用性不如在B/S要求下的构件的重用性好.
B/S对的多重结构,要求构件相对独立的功能.能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子
5.系统维护不同
C/S程序由于整体性,必须整体考察,处理出现的问题以及系统升级.升级难.可能是再做一个全新的系统
B/S构件组成,方面构件个别的更换,实现系统的无缝升级.系统维护开销减到最小.用户从网上自己下载安装就可以实现升级.
6.处理问题不同
C/S程序可以处理用户面固定,并且在相同区域,安全要求高需求,与操作系统相关.应该都是相同的系统
B/S建立在广域网上,面向不同的用户群,分散地域,这是C/S无法作到的.与操作系统平台关系最小.
7.用户接口不同
C/S多是建立的Window平台上,表现方法有限,对程序员普遍要求较高
B/S建立在浏览器上,有更加丰富和生动的表现方式与用户交流.并且大部分难度减低,减低开发成本.
8.信息流不同
C/S程序一般是典型的中央集权的机械式处理,交互性相对低
B/S信息流向可变化, B-B B-C B-G等信息、流向的变化,更像交易中心。
8.Servlet与CGI的区别。【大唐动力面试题】
【参考答案】
Servlet主要是运行在服务器端的一个组件,基于Java语法构建,延用Java的传统优势——可移植、稳健、易开发。CGI不可移植,为某一特定平台编写的CGI应用只能运行于这一环境中。每一个CGI应用存在于一个由客户端请求激活的进程中,并且在请求被服务后被卸载。这种模式将引起很高的内存、CPU开销,而且在同一进程中不能服务多个客户。
Servlet对CGI的最主要优势在于一个Servlet被客户端发送的第一个请求激活,然后它将继续运行于后台,等待后续请求。每个请求将生成一个新的线程,而不是一个完整的进程,多个客户能够在同一个进程中同时得到服务,也就是说它是基于多线程模式。而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
9.Servlet中的init()方法什么时候被调用?
【参考答案】
当客户端第一次请求该Servlet时,由容器调用该Servlet类的init()方法对该Servlet进行初始化,该初始始化方法只被调用一次。
10.用什么方法使服务器关闭之后,session所保存的信息不会丢失?
【参考答案】
使用cookie实现,服务器端将需要保存的信息,通过Cookie并写入客户端磁盘中,下次访问时,客户端浏览器携带写入的信息提交至服务器,这样可以使信息不会因服务器关闭而丢失。
【分析】
主要考查Cookie的相关知识,比如还有一道题问:如果登录某个网站后,想在本周内都不用重新登录,也是通过Cookie实现的
11.Forward与Redirect的区别?有哪些方式实现
【参考答案】
forward是服务器资源转发,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,客户机并不知道发送的内容是从哪儿来的,所以地址栏中还是原来的地址;redirect则是服务器收到请求后发送一个状态头给客户,客户将再请求一次,这里多了两次网络通信的来往。forward会将请求状态和信息发至下一个jsp或Servlet。redirect是送到client端后再一次请求,信息不被保留,就是我们说的无法获取request中的参数。
实现方式:
HttpServletResponse接口sendRedirect()方法进行重定向转发
RequestDispatcher.接口forward()方法进行请求转发
12.Servlet的生命周期分为3个阶段?和CGI的区别?
【参考答案】
Servlet的生命周期主要由3个过程组成。
(1)init()方法:服务器初始化servlet。
(2)service()方法:初始化完毕,servlet对象调用该方法响应客户的请求。
(3)destroy()方法:调用该方法消灭servlet对象。
其中,init()方法只在servlet第一次被请求加载的时候被调用一次,当有客户再请求servlet服务时,web服务器将启动一个新的线程,在该线程中,调用service方法响应客户的请求。
【分析】
后一个问题,与CGI的区别,可以参考前面的答案。
13.描述Cookie和Session的作用?区别和各自的应用范围?Session工作原理。【北京科瑞明】
【参考答案】
Cookie和Session都是用来服务器端和客户端进行会话跟踪的一种技术。
区别:Cookie只能传输字符数据,字符是通过加密后写到客户端,下次请求时协带至服务器端,Cookie协带的数据大小为4KB,对数据量超出4KB的数据,无法处理,Cookie数据一般是通过加密后存储在客户端,而Session在服务器端和浏览器缓存中都保存在ID的值,通过此ID来识别唯一的客户端。Session对数据存储的大小没有限制,但存储的信息加重服务器的负载,另外Session在分布式服务器的使用上也有限制,Session无法跨域,也就是多台服务器无法共享会话。
Session原理:当客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID)保存在服务器内存中,服务器响应客户端时,将Session ID写入浏览器缓存中,当下次客户端请求时,就会将该Session ID携带至服务器,服务器再根据ID比对,识别不同客户端请求,以此方式来不断维持服务器和客户端状态跟踪。
14.dao是什么及作用
【参考答案】
DAO是数据库访问接口,负责管理与数据库打交道操作对象,将对数据维护与操作的方法通过DAO封装起来,使得这些操作可以从系统的业务逻辑中独立出来,从而使系统中的数据库操作变得统一和简单化,方便开发人员对组件职责进行划分。
15.解释一下什么是servlet
【参考答案】
Servlet是用Java编写的服务器端程序,由服务器端调用和执行的Java类。是使用Java Servlet应用程序设计接口(API)及相关类和方法来构建的,而Java Servlet API定义了servlet和Java使能的服务器之间的一个标准接口,这使得Servlets具有跨服务器平台的特性,当客户机发送请求至服务器时,服务器可以将请求信息发送给Servlet,并让Servlet建立起服务器返回给客户机的响应。Servlet的功能很广泛,例如可以创建响应至客户端的所有HTML元素内容和动态数据内容,与其它组件通讯等等。
16.HTTP请求的GET与POST方式的区别
【参考答案】
GET和POST.是HTTP定义的与服务器交互的不同方法,是使用HTTP的标准协议动词,用于编码和传送变量名/变量值对参数,并且使用相关的请求语义。
1、Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交,无法在地址栏看到。
2、GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
3、GET一般用作小数据量的请求,POST一般用作大数据量的请求,如:附件。
17.什么情况下调用doGet()和doPost()?
【参考答案】
根据客户端的请求的方式来决定调用哪个方法处理请求,如果客户端采用GET方式
发送请求,服务器端则采用doGET()来处理,如果采用post方式,服务器端则采用doPOST()
18.request对象的主要方法
【参考答案】
setAttribute(String name,Object):设置名字为name的request的参数值
getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组
getCharacterEncoding():返回请求中的字符编码方式
getContentLength():返回请求的Body的长度
getHeader(String name):获得HTTP协议定义的文件头信息
getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例
getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例
getInputStream():返回请求的输入流,用于获得请求中的数据
getMethod():获得客户端向服务器端传送数据的方法
getParameter(String name):获得客户端传送给服务器端的有name指定的参数值
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
getParametervalues(String name):获得有name指定的参数的所有值
getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString():获得查询字符串
getRequestURI():获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端的名字
getSession([Boolean create]):返回和请求相关Session
getServerName():获取服务器的名字
getServletPath():获取客户端所请求的脚本文件的路径
getServerPort():获取服务器的端口号
removeAttribute(String name):删除请求中的一个属性
19.request.getAttribute()和request.getParameter()有何区别?
【参考答案】
request.getAttribute()获取在请求对象中设置的属性,该方法返回对象为Object类型,而getParameter()方法是获取指定的请求参数值,返回值为String类型的字符串。
20.jsp有哪些内置对象?作用分别是什么?分别有什么方法?【软通动力面试题】
【参考答案】
答:JSP共有以下9个内置的对象:
1)request用户端请求,此请求会包含来自GET/POST请求的参数
2)response网页传回用户端的回应
3)pageContext网页的属性是在这里管理
4)session与请求有关的会话期
5)application servlet正在执行的内容
6)out用来传送回应的输出
7)config servlet的构架部件
8)page JSP网页本身
9)exception针对错误网页,未捕捉的例外
具体说明如下:
request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header,和session数据的有用的方法。
response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)
out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
applicaton表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page表示从该页面产生的一个servlet实例
21.JSP的常用指令
【参考答案】
共三种,分别是:
1)<%@include >用来在JSP页面包含静态资源
2)<%@taglib >用来指定JSP页面标签类型
3)<%@page >用来指定页面相关属性
22.页面间对象传递的方法
【参考答案】
request、session、application、Cookie等,其中比较常用的像request、Session。request主要是应用在同一请求周期内,可能进行对象或参数的共享传递。而Session主要可以应用于同一客户端会话周期内进行参数属性的共享。
23.MVC的各个部分都有那些技术来实现?如何实现?
【参考答案】
MVC是Model-View-Controller的简写。Model代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),View是应用的表示面(由JSP页面产生),Controller是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
24.我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
【参考答案】
public String translate (String str) {
String tempStr = "";
try {
tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
tempStr = tempStr.trim();
}
catch (Exception e) {
System.err.println(e.getMessage());
}
return tempStr;
}
25.Web系统安全因素有哪些?
【参考答案】
1)操作系统、后台数据库的安全问题:这里指操作系统和后台数据库的漏洞,配置不当,如弱口令等等,导致黑客、病毒可以利用这些缺陷对网站进行攻击。
2)Web发布系统的漏洞:Web业务常用的发布系统(即Web服务器),如IIS、Apache
等,这些系统存在的安全漏洞,会给入侵者可乘之机。
3)Web应用程序的漏洞:主要指Web应用程序的编写人员,在编程的过程中没有考虑到
安全的因素,使得黑客能够利用这些漏洞发起对网站的攻击,比如SQL注入、跨站脚本攻击等等。
4)自身网络的安全状况:网站服务器所处的网络安全状况也影响着网站的安全,比如网络中存在的DoS攻击等,也会影响到网站的正常运营。
26.web运用程序的稳定、安全需要考虑哪些?
【参考答案】
Web服务器的性能考虑主要有:并发用户数、事务安全、负载均衡、时段流量、网络带宽
网格安全等。
网络安全方面:
·关键数据的保护,例如用户数据等
·功能服务的正常提供。
·网站的防攻击能力。
·对异常灾害的恢复能力。
程序性能:
·响应请求并运行得出结果的时间。
·错误的检测和拦截。
·扩展性。
27.介绍几种WEB服务器,问Tomcat里面的文件组成?
【参考答案】
Apache、Tomcat、Jetty、Jboss、Websphere、WebLogic
bin:启动、关闭Tomcat的命令。
common/lib:网络编程的jar文件。
conf:配置文件。
logs:日志文件.
server:自带的web应用(三个).
shared:所有web应用都可以访问的内容.
temp:临时.
webapps:默认站点文件夹.
work:jsp生成的类.
Tomcat是一个开放源代码、运行servlet和JSP Web应用软件的基于Java的Web应用软件容器。Tomcat Server是根据servlet和JSP规范进行执行的,因此我们就可以说Tomcat Server也实行了Apache-Jakarta规范且比绝大多数商业应用软件服务器要好。
28.将ISO8859-1字符串转成GB2312编码,语句为?
【参考答案】
String s=new String(text.getBytes(“iso8859-1”),”gb2312”)
29.与<%@include>的区别
【参考答案】
上面两种都是在当前页面加载或包含另一页面内容,而使用动作标签实现时它总是会检查所含文件中的变化,适合用于包含动态页面,并且包含的页页要符合web容器语法要求,因为被包含的页面会被web引擎进行编译和加载,同时包含时会发送http请求,所以可以携带参数。
而<%@include>是用伪码实现,定不会检查所含文件的变化,只是简单的将被加载的资源拷贝到了当前,而这种包含更多的是一种重用,不能实现参数共享。
30.说出数据连接池的工作机制是什么?
【参考答案】
web服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
实现方式,返回的Connection是原始Connection的代理,代理Connection的close方法不是真正关连接,而是把它代理的Connection对象还回到连接池中。
31.如何实现Servlet单线程
【参考答案】
<%@ page isThreadSafe="false"%>
32.哪些方法可以提高JDBC性能?
【参考答案】
1.使用数据连接池(Connection Pool),避免使用DriverManager.getConnection()。
2.合理的配置数据连接池参数,合理如何设置数据连接池的初始大小
3.选择合适的事务等级,按照不同的数据库操作类型选择不同的事务等级。
4.及时关闭Connection,不关闭的话会严重影响系统的性能,甚至造成系统罢工
5.优化Statement
1)选择合适的Statement,根据不同的数据库操作选择Statement, PreparedStatement或者CallableStatement
2)尽可能的使用batch,这样可以减少调用JDBC的次数。
3) Statement执行完毕后关闭Statement
6.优化你的SQL,尽量减少你的结果集,不要每次都"select * from XXX"
7.使用一些缓存工具进行缓存,特别是大数据查询。
33.实现会话跟踪有哪几个方式?
【参考答案】
1、URL重写
2、隐藏表单域
3、Cookie
4、Session
34.Web容器里面的对象存活周期?
【参考答案】
当然由web容器进行创建管理的对象主要有application,session,request,page这四个级别的对象,而这4种级别的对象,根据它们自身的特点来管理所持的对象,如:request中的对象的生命周期就是在请求范围内,Session在是会话周期内,page是在当前JSP Page内,Application是在服务器启、停的周期内。
【分析】
总的来说这道题有点没明白,提问者想问的是东西是什么。看到题第一反应以为是问Servlet的生存周期,因为说到Web容器对象,一般指的是Servlet,Servlet组件是由容器进行创建、调用和管理的,所以首先想到了Servlet的存活周期。
35.浏览器页面与Tomcat的交互过程?
【参考答案】
当一个JSP页面第一次被访问的时候,JSP引擎将执行以下步骤:
(1)将JSP页面翻译成一个Servlet,这个Servlet是一个java文件,同时也是一个完整的java程序
(2)再由java编译器对这个Servlet进行编译,得到可执行class文件
(3)再由JVM解释器来解释执行class文件,生成向客户端发送的应答,然后发送给客户端
以上三个步骤仅仅在JSP页面第一次被访问时才会执行,以后的访问速度会因为class文件已经生成而大大提高。
36.什么是断点续传,HTTP是否支持上传下载,原理?【大唐动力面试题】
所谓断点续传,也就是要从文件已经下载的地方开始继续下载。客户端在请求时,除了其它的信息外,需要增加一条参数,告诉服务器从哪里开始传,在读取时从指定的字节数的开始位向后读取。简单示例:
RandomAccess oSavedFile = new RandomAccessFile("down.zip","rw");
long nPos = 100000; //表示从100000字节位置开始读取。
//定位文件指针到nPos位置
oSavedFile.seek(nPos);
byte[] b = new byte[1024];
int nRead;
//从输入流中读入字节流,然后写到文件中
while((nRead=input.read(b,0,1024)) > 0)
{
oSavedFile.write(b,0,nRead);