欢迎访问沈阳爱尚优才官方网站!
沈阳爱尚优才

初心至善,匠心育人专注于职业教育培训

Practical Training
Information新闻资讯
网站首页   >   新闻资讯   >   IT技术
Java EE面试题解析发布时间:2024-02-27

1、 Session和Cookie的区别?【掌握】

Session是存储在服务器端,Cookie是存储在客户端的:

Session的安全性要比Cookie高;

Session内容不断增加会造成服务器负担;

重要的信息存储在Session中,次要东西存储在Cookie里。

Session创建时机:调用getSession()方式时创建。

Session获取:通过存放在会话Cookie里的Sessionid获取的。

Session销毁时机:

浏览器关闭;

Session过期(默认时间30分钟);

调用invalidate()方法销毁。

Cookie分为两大类,分别为会话Cookie和持久化Cookie。

会话Cookie:存放在客户端浏览器内存中,生命周期和浏览器是一致的;

持久化Cookie存放在客户端磁盘中,持久化Cookie的生命周期在设置Cookie时候设置。

Cookie容量限制:单个Cookie保存数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie。

存储内容:Session可以存储任意类型的数据,而Cookie只能存储字符串。


2、 Servlet的生命周期?【重点】

Servlet生命周期可以分成四个阶段:加载和实例化、初始化、服务、销毁。

当客户第一次请求时,判断是否存在Servlet对象,若不存在,Web容器创建对象;

调用init()方法对其初始化,初始化方法在整个Servlet生命周期中只调用一次;

Web容器调用Servlet对象的service()方法来处理请求。

Web容器关闭或者Servlet对象从容器中被删除时,自动调用destroy()方法。


3、 什么是Web Service?【了解】

Web Service是一个能通过Web进行调用的API,调用Web Service的应用程序叫做客户端,而Web Service应用程序叫做服务端。

深层次看,Web Service是建立可互操作的分布式应用程序的新平台,是远程服务调用的一套标准;定义了应用程序如何在Web上实现互操作,可以用任何语言、在任何平台上编写Web Service,只要可以通过Web Service标准对这些服务进行查询和访问即可。


4、 JSP和Servlet的区别、共同点、各自应用的范围?【了解】

JSP是Servlet技术的扩展,本质上就是Servlet的简易方式,JSP编译后的类是Servlet。

Servlet和JSP的不同点:

Servlet是仅包含Java代码;

JSP是包括Java代码和HTML代码的扩展名为“.jsp”的文件;

JSP侧重于视图,Servlet主要用于控制逻辑;

在MVC设计模式中,JSP位于的视图层,而Servlet位于控制层。


5、 forward()与redirect()的区别?【重点】

forward即是请求转发:

地址栏显示不变;

发生在服务器端,是服务器内部的操作;

客户端向服务器端发出一次request;

转发页面和转发到的页面可以共享request里面的数据;

可以跳转到Web应用程序内的任何地方,如:WEB-INF目录;

运行效率比较高;

使用方法:request.getRequestDispatcher().forward()。

Redirect即是重定向:

地址栏显示变化;

发生在客户端,是服务器通知客户端,让客户端重新发起请求;

客户端向服务器端发出两次request;

不能共享request里面的数据;

不可以跳转到WEB-INF安全目录下,但是可以跳转到Web应用程序外部网站;

运行效率比较低;

使用方法:response.sendRedirect()。


6、 Request对象的getAttribute()和getParameter()区别?【掌握】

getParameter()方法是用来接收表单提交过来的参数;

setAttribute()与getAttribute()仅在Web容器内部流转,仅仅是请求处理阶段;

getAttribute()方法返回的是对象,getParameter()方法返回的是字符串;

getAttribute()与setAttribute()一般一起使用,必须setAttribute()设置之后,才能够通过getAttribute()来获取值,传递的是Object类型的数据,必须在同一个request对象中使用才有效。


7、 Jsp静态包含和动态包含的区别?【重点】

格式不同:

静态包含:<%@ include file="文件" %>;

动态包含:<jsp : include page = "文件" />。

处理时机不同:

静态包含是先将几个文件合并,然后再被编译,缺点就是如果含有相同的标签,会出错;

动态包含是页面被请求时编译,将结果放在一个页面。

生成的文件不同:

静态包含会生成一个包含页面名字的servlet的class文件;

动态包含会各自生成对应的servlet的class文件。

传递参数不同:

动态包含能够传递参数;

而静态包含不能。


8、 MVC的各个部分都有哪些技术来实现?如何实现?【掌握】

MVC是Model-View-Controller的简写;

Model代表的是应用程序的业务逻辑(通过 JavaBean,Mybatis等框架实现);

View代表的是应用程序的表示层,即:Jsp页面;

Controller代表的是应用程序的处理过程控制(一般是Servlet);

这种设计模型把应用逻辑,处理过程、显示逻辑分成不同的组件实现,这些组件可以进行交互和重用。


9、 JSP有哪些内置对象?作用分别是什么?【掌握】

JSP有9个内置对象:

request:封装客户端的请求,其中包含来自GET或POST请求的参数;

response:封装服务器对客户端的响应;

pageContext:通过该对象可以获取其他对象;

session:封装用户会话的对象;

servletContext:封装服务器运行环境的对象;

out:输出服务器响应的输出流对象;

config:Web应用的配置对象;

page:JSP页面本身(相当于Java程序中的this);

exception:封装页面抛出异常的对象。


10、 Http请求的get和post方法的区别?【重点】

Get是向服务器索取数据的一种请求,而Post是向服务器提交数据的一种请求;

Get 请求的参数会跟在URL后进行传递,Post请求将数据放置在HTML Header内提交;

GET请求数据传递方式:请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连,%XX中的XX为该符号以16进制表示的ASCII,如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密;

Post请求数据传递方式:以http消息的实际内容发送给web服务器。

Get请求传输的数据有大小限制,因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了,不同的浏览器对URL的长度的限制是不同的;Post请求没有限制提交的数据。

GET请求的数据会被浏览器缓存起来,数据将明文出现在URL上,不安全;Post数据不会出现在URL上,比Get安全,当数据是不敏感的数据,则用Get,对于敏感数据的数据,则用Post。


11、 Servlet、Filter、Listener的启动顺序?【重点】

启动的顺序为:Listener -> Filter -> Servlet;

执行的顺序不会因为三个标签在配置文件中的先后顺序而改变。

监听器类型:

Servlet2.4规范定义,按监听的对象划分:

用于监听应用程序环境对象(ServletContext)的事件监听器

用于监听用户会话对象(HttpSession)的事件监听器

用于监听请求消息对象(ServletRequest)的事件监听器

按监听的事件类型划分:

用于监听域对象自身的创建和销毁的事件监听器;

用于监听域对象中的属性的增加和删除的事件监听器;

用于监听绑定到HttpSession域中的某个对象的状态的事件监听器;

在一个Web应用程序的整个运行周期内, Web容器会创建和销毁三个重要的对象,ServletContext,HttpSession,ServletRequest。


12、 Filter链是什么?【重点】

在一个Web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。

Web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter()方法被调用时,Web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。

在doFilter()方法中,开发人员如果调用FilterChain对象的doFilter ()方法,web服务器会检查FilterChain对象中是否还有filter,如果有,则调用下一个filter,如果没有,则调用目标资源。


13、 Filter的工作原理?【重点】

Filter接口中有一个doFilter()方法,Web服务器每次在调用Web资源的service()方法之前,都会先调用filter的doFilter()方法,因此,在该方法内编写代码可达到如下目的:

调用目标资源之前,执行一段代码;

判断是否调用目标资源;

调用目标资源之后,执行一段代码;

Web服务器在调用doFilter()方法时,会传递一个filterChain对象,filterChain对象是filter接口中最重要的一个对象,它也提供了一个doFilter()方法,开发人员可以根据需求决定是否调用此方法,调用该方法,则服务器就会调用目标的service()方法,即Web资源就会被访问,否则Web资源不会被访问。


14、 钝化和活化?【重点】

Session与Session域中的对象一起从内存中被序列化到硬盘上的过程我们称为钝化,服务器关闭时会发生钝化。

Session与Session域中的对象一起从硬盘上反序列化到内存中的过程我们称为活化,服务器再次开启时会发生活化。

保证Session域中的对象能和Session一起被钝化和活化,必须保证对象对应的类实现Serializable接口。


15、 Session 的运行机制?【掌握】

在服务器端创建Session对象,该对象有一个全球唯一的ID。

在创建Session对象的同时创建一个特殊的Cookie对象,该Cookie对象的名字是JSESSIONID,该Cookie 对象的value值是Session对象的那个全球唯一的ID,并且会将这个特殊的Cookie对象携带发送给浏览器,以后浏览器再发送请求就会携带这个特殊的Cookie对象,服务器根据这个特殊的Cookie对象的value 值在服务器中寻找对应的Session对象,以此来区分不同的用户。


16、 Cookie对象的缺陷?【掌握】

Cookie是明文的,不安全;

Cookie对象的数量和大小有限制(不同的浏览器不同);

Cookie对象携带过多费流量;

Cookie对象中的Value值只能是字符串,不能放对象。


17、 响应乱码的原因与解决方案?【重点】

原因:服务器端默认使用ISO-8859-1字符集,而中文浏览器默认使用GBK字符集。

解决方案:方法1,设置响应头,对应代码:response.setHeader("Content-Type","text/html;charset=utf-8");

方法2,设置响应的内容类型,对应代码:response.setContentType("text/html;charset=utf-8");

通过以上两种方式可以在响应头中告诉浏览器响应体的字符集是UTF-8;但需要注意的是,两种方法一定要在response.getWriter()方法之前设置。


18、 Post请求中文乱码的原因与解决方案?【重点】

原因:因为服务器收到数据后,默认以ISO-8859-1字符集进行转换,与请求传递数据的字符集不一致。

解决方案:在获取请求参数之前调用request.setCharacterEncoding("utf-8"); 通知服务器端使用UTF8字符集进行转换。


19、 Get请求中文乱码的原因与解决方案?【重点】

原因:请求携带的数据字符集与服务器端的默认字符集ISO-8859-1不一致。

解决方案:

第一种方式:

使用URLEncoder和URLDecoder两个类来实现编解码,实现iso-8895-1转换到UTF-8字符集;

第二种方式,使用String类的方法实现字符集转换:

String str = new String (target.getBytes(“iso-8859-1”), ”utf-8” );

第三种方式,更改Tomcat的server.xml 配置文件实现字符集转换:

GET请求是URL地址栏中传递请求参数的,它会被Tomcat服务器自动转换字符集,而Tomcat服务器默认的字符集是ISO-8859-1,所以我们需要修改Tomcat服务器的字符集为UTF-8。


20、 Tomcat是如何创建Servlet实例的?原理是什么?【掌握】

容器启动时,读取在/webapps/WEB-INF/目录下的web.xml文件,对其进行解析,并读取Servlet注册信息。

然后,将每个应用中注册的Servlet类都进行加载,并通过反射的方式实例化。

Servlet注册时配置<load-on-startup></load-on-startup>,如果为正数,则在启动容器时实例化,如果不写或为负数,则第一次请求实例化。


21、 什么是Servlet?【掌握】

Servlet是使用Java Servlet应用程序接口(API)及相关类和方法的Java程序。所有的Servlet都必须要实现的核心接口是javax.servlet.servlet。每一个Servlet都必须要直接或者间接实现这个接口,或者继承javax.servlet.GenericServlet或 javax.servlet.HTTPServlet。

Servlet主要用于处理客户端传来的HTTP请求,并返回一个响应。

22、 Request对象的作用?【掌握】

获取请求参数,对应方法:getParameter();

获取当前Web应用的虚拟路径,对应方法: getContextPath();

获取当前Web应用的上下文对象ServletContext,对应方法:getServletContext();

请求转发,对应方法:getRequestDispatcher(路径).forward(request,response);

储存数据,request还是一个域对象。

23、 如何防止表单重复提交?【重点】

针对于重复提交的整体解决方案:

用redirect(重定向)来解决重复提交的问题;

点击一次按钮之后,按钮失效;

Loading原理:在点击提交时,生成Loading样式,在提交完成之后隐藏该样式;

自定义重复提交过滤器。

24、 JSP的四大作用域范围?【掌握】

Jsp中的四种作用域包括page、request、session和application,具体来说:

page代表与一个页面相关的对象和属性,对应的对象是:pageContext。

request代表Web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个Web组件;需要在页面显示的临时数据可以置于此作用域,对应的对象是:request。

session代表某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中,对应的对象是:session。

application代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域,对应的对象是:servletContext。

25、 JSP中时间格式化?【掌握】

第一步,在JSP页面添加标签库:<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

第二步,进行格式化:<fmt:formatDate pattern="yyyy-MM-dd" value="${t.time }"/>

26、 Ajax与Json的优点?【重点】

Ajax是异步JavaScript和xml,用于在web页面中实现异步数据交互。

优点:可以在页面不重复加载的情况下加载局部内容,降低数据传输量。

Json是一种轻量级的数据交互格式。

优点:轻量级,易于阅读和编写,便于解析。

27、 Ajax同步和异步的区别?【重点】

同步:提交请求->等待服务器处理->处理完毕返回,这个期间客户端浏览器不能干任何事。

异步:请求通过事件触发->服务器处理(这时浏览器仍然可以作其他事情)->处理完毕。

28、 AJAX的工作原理?以及实现步骤?【掌握】

工作原理:

客户端通过Javascript提交Ajax请求。

Ajax引擎(XMLHttpRequest对象,包含在浏览器中)服务器发送Http请求。

服务器端处理请求后返回相应(XML/JSON/HTML)格式数据。

Ajax引擎解析数据后,通过DOM+CSS修改页面元素、改变样式,实现局部刷新。

实现步骤:

创建XMLHttpRequest对象。

创建请求,并发送请求。

处理请求回调。

示例代码:

function doAjax() {

var provinceName=document.getElementById("provinceName").value;

var xhr;

try {

// Firefox, Opera 8.0+, Safari

xhr = new XMLHttpRequest();

} catch (e) {

try {

// Internet Explorer

xhr = new ActiveXObject("Msxml2.XMLHTTP");

} catch (e) {

try {

    xhr = new ActiveXObject("Microsoft.XMLHTTP");

} catch (e) {}

}

}

//使用post方式异步请求

xhr.open("post", "Test/IsExistsByProvinceName?t="+new Date().getTime(), true);

//设置回调函数

xhr.onreadystatechange = function(){

//如果XMLHttpRequest对象读取响应结束

if (xhr.readyState == 4&&xhr.status == 200) {

if(xhr.responseText=="true")

document.getElementById("provinceName_info").innerHTML="该省份已经存在";

else

document.getElementById("provinceName_info").innerHTML="";

}

};

//如果以post方式请求,必须要添加

xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");

//发送请求

xhr.send("provinceName="+provinceName);

}

29、 Web开发中,http协议工作流程是什么? 【重点】

创建Http连接。

初始化方法请求。

设置HTTP请求头。

发送请求。

读取请求。

调用方法。

初始化方法响应。

设置HTTP响应头。

发送响应。

关闭连接。

30、 BS与CS的联系与区别?【了解】

硬件环境不同:

C/S一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务。

B/S建立在广域网之上的,不必是专门的网络硬件环境,信息自己管理。比 C/S 更强的适应范围,一般只要有操作系统和浏览器就行。

安全要求不同:

C/S一般面向相对固定的用户群,对信息安全的控制能力很强,一般高度机密的信息系统采用C/S结构适宜。

B/S建立在广域网之上,对安全的控制能力相对弱,可能面向不可知的用户。

程序架构不同:

C/S程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑。

B/S对安全以及访问速度的多重的考虑,建立在需要更加优化的基础之上。比C/S有更高的要求,B/S结构的程序架构是发展的趋势。

软件重用不同:

C/S程序的重用性不如B/S的重用性好。

B/S程序构建相对独立的功能,能够相对较好的重用。

系统维护不同:

C/S程序必须整体考察,处理出现的问题以及系统升级都比较难,有可能是再做一个全新的系统;

B/S程序方便个别组件的更换,实现系统的无缝升级、系统维护开销减比较小,客户端无需升级,只针对服务器端维护即可。

处理问题不同:

C/S程序主要处理用户面相对固定、并且在相同区域、安全要求高、与操作系统相关的情况。

B/S建立在广域网上、面向不同的用户群、分散地域,与操作系统平台关系最小。

用户接口不同:

C/S多是建立的Window平台上,开发难度比较大,对程序员普遍要求较高;

B/S建立在浏览器上,开发难度相对较低,开发成本相对较低。

信息流不同:

C/S程序一般是典型的中央集权的机械式处理,交互性相对低;

B/S程序信息流向可变化,更像交易中心。


在线留言

需要咨询什么课程可以给我们留言
在线留言
姓名称呼
微信账号
联系方式
所在地址
备注信息
欢迎留言,我们将尽快回复 ——————

微信公众号 沈阳爱尚优才

新媒体培训领取课程大纲
领取视频教程
UI/UE领取课程大纲
领取视频教程
JAVA领取课程大纲
领取视频教程
Python领取课程大纲
领取视频教程
PS/PR培训领取课程大纲
领取视频教程
返回顶部