(一)JAVA面试题 java web部分 2018-06-06

1.Servletjsp页面过滤器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.JSPSERVLET区别

【参考答案】

JSP在本质上就是SERVLET,但是两者的创建方式不一样.Servlet完全是JAVA程序代码构成,擅长于流程控制;而.JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页,同时在MVC设计模式中JSP充当视图层,而Servlet位于控制层。另外JSP也是Servlet技术的扩展,本质上就是Servlet,就是JSP的另一种简易体现形式,因为JSP编译后就是一个“类servlet”,再经由JVM编译生成Java类文件来执行。

6.Tomcatclass加载的优先顺序一览

【参考答案】

加载顺序图示如下:

(一)JAVA面试题 java web部分 2018-06-06_第1张图片

第一步:加载JVM类库。一般是加载由虚拟机提供的基本的运行时类和系统扩展目录($JAVA_HOME/jre/lib/ext)下的JAR包。

第二步:加载系统环境变量的类库。这个加载器用来加载CLASSPATH环境变量中指定的类。

第三步:加载Tomcat下面common文件夹下面的公共类库。

第四步:加载自己需要的catalina类库。

第五步:webapps下面自己应用的类库,包括webapp1、webapp1......等。

7.BSCS的联系与区别。【极地信息面试题】

【参考答案】

C/S是Client/Server的缩写,表示客户端需要安装专用的客户端软件与服务器交互。

B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Internet Explorer。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server同数据库进行数据交互。

C/SB/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.ServletCGI的区别。【大唐动力面试题】

【参考答案】

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.ForwardRedirect的区别?有哪些方式实现

【参考答案】

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.描述CookieSession的作用?区别和各自的应用范围?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请求的GETPOST方式的区别

【参考答案】

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里面的文件组成?

【参考答案】

ApacheTomcatJettyJbossWebsphereWebLogic

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

你可能感兴趣的:((一)JAVA面试题 java web部分 2018-06-06)