Java Web面试题整理(思维导图)
Posted liruilong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Web面试题整理(思维导图)相关的知识,希望对你有一定的参考价值。
1,动态网站技术有哪些?
2,一般的Web架构是指BS 还是CS,BS架构是什么咚咚?
3,Web应用程序的流程,即把一个URL串输入地址栏后发生写什么?
4,说一说Servlet生命周期?
5,在Web应用中,客户端向服务器请求数据的方式通常有啥?
6,讲一讲你对重定向与请求转发的认识?
7,ServletConfig对象有何作用,在Servlet中如何使用?
8,关于ServletContext对象你了解多少?
9,你知道HttpServletRequest,HTTPServletResponse对象吗?
10,ServletContext对象和ServletConfig对象的getInitParameter()方法有何区别?
11,ServletContext对象如何存取自定义属性,属性的访问范围是什么?
12,HttpServletRequest对象如何自定义属性,属性的访问范围是什么?
13,Servlet如何向页面输出数据?
1,CGA,ASP,ASP.NET,php,servlet,JSP等
2,是BS,即浏览器服务器的形式,是基于特定HTTP通信协议的CS架构,对CS的一种变化或者改进,
3,浏览器请求-服务器处理请求-响应结果返回浏览器
客户通过URL地址发送的请求转换为标准的HTTP请求,Web服务器首先需要检查请求的文件地址是否正确,若错误,返回错误信息,若正确,服务器将根据请求的GET或POST方法及文件的类型进行相应的处理,将结果以html或XML或着二进制文件等数据形式表示。并按照HTTP协议的响应消息格式反馈给浏览器,浏览器会根据消息附带的信息查看并显示该信息。
4,
Servlet生命周期是由Servlet容器负责管理的,Servlet 本身并不是直接运行的虚拟机上,Servlet生命周期是指Servlet实例从创建到响应客户端请求,直至销毁的过程,会经过创建,初始化,服务可用,服务不可用,处理请求,终止服务和销毁服务7种状态。
涉及到三个方法:init(),Service(),destory()。
加载和实例化:
Servlet创建,在服务器运行中,客户机首次向Servlet发送请求,重新装入Servlet时,在为Servlet配置了自动装入选项(load-on-startup)时。
初始化:
Servlet容器调用Servlet的init(ServletConfig config)方法来对Servlet实例进行初始化。读取固定数据,初始化JDBC连接等资源连接,init()方法的参数ServletConfig对象由Servlet容器创建并传递给Servlet,一直存在,直到销毁。
处理请求:
服务器接受到客户端请求后,会为该请求创建一个请求对象和响应对象,并调用service()方法,service()方法在调用其他方法。
销毁:
当Servlet容器需要终止Servlet,它会先调用Servlet的destroy()方法.
5,
四种,
其一,通过超链接形式查询数据;语法链接文本
//即Web中以GET方式提交数据。数据部分和地址部分由?隔开,参数之间由&隔开,但安全性差,以明文方式显示。在发送的请求的URI地址可以是绝对地址,也可以是相对地址,开发中一般使用相对地址,便于开发移植。
其二,通过Form表单形式更新数据;
语法:
其三,通过Ajax实现异步访问。
$.ajax({
url:’/ExampleServlet’,
type:‘post’,
dataType:‘json’,
success:function(data){alert(‘成功!’);alert(data);},
error:function(){alert(‘内部错误’);}
});
其四,通过JS语句实现
6,
重定性和请求转发是Servlet中对新的URL地址的转向的两种主要方式:
1,重定向:指由原请求地址重新定位到某个新地址,原有的请求失效,客户端看到的是新的请求返回的响应结果,客户端浏览器地址栏变成了新的请求地址,在重定性过程中客户端和服务器会经过两次请求和两次响应,其中第二次请求由客户端发起。第一次请求到服务器后,由服务器响应指定重定向的第二请求(返回3开头的状态码),客户端第二请求发出,最后经过服务器发返回响应。
重定向通过HttpServletResponse对象的sendRedirect()方法实现的,该方法会通知客户端去重新访问新指定的URL地址,
public void sendRedirect(string location)throws java.io.IOExcetion
//location为重定向的URL地址,可以是相对路劲或绝对路径,可以重定向到当前应用程序中的资源,还可以重定向到同一站点的其他资源,使用绝对URL可以定位到其他站点的资源。
2,请求转发:指将请求转发到其他地址,使用同一个请求,转发后的浏览器地址内容不变,即经过一次请求响应,转发过程发生在服务器内部,服务器只能从当前应用内部查找相应的转发资源,而不能转发其他资源,
使用RequesDispatcher接口中的forward()方法来实现,该方法可以把请求转发给另外一个资源,并让该资源对此请求进行响应RequestDispatcher接口还有一个include()//将其他资源并入到当前请求中。RequestDispatcher是一个接口,需要通过使用HttpResquest对象的getrequesDispatcher()方法获得该接口的实例对象。
RequestDispatcher dispatcher =request
.getrequestDispatcher(String path)
.forward(ServletRequeste request,Servletresponse response);
请求转发与重定向的区别;
转发只能将请求转发给同一个Web应用中的组件,重定向可以重定向到当前资源,同一个站点的其他资源,以及其他站点资源。
重定向访问后的URL会发生改变,请求转发URL地址保持不变。
重定向是由服务器告诉浏览器去重新请求一个URL,是客户端行为,请求转发是服务器程序内部发生转发行为,
请求转发服务器之间共享请求对象和响应对象,属于同一个访问请求过程,重定向调用者与被调用者使用各自的请求和转发对象。属于两个独立的访问请求和响应过程。
7,
容器在初始化一个Servlet时,会为这个Servlet创建一个ServletConfig对象,并将这个对象通过init(ServletConfig config)方法传递并保存在此Servlet对象中,
使用ServletConfig接口中的方法主要可以访问两项内容:
Servlet初始化参数和ServletContext对象,
前者通过由容器从Servlet的配置属性中读取(在Servlet的init()方法中调用ServletConfig参数getInitParameter()方法来获取初始化参数的值,)
后者为Servlet提供有关的容器信息(调用ServletConfig对象的getServletContext()方法来获取ServletContext对象。)
8,ServletContext对象代表当前Servlet运行环境,Servlet容器在启动一个Web应用时,会为该应用创建一个唯一 的ServletContext对象供该应用中的所有Servlet对象共享,Servlet对象可以通过ServletContext来访问容器中的各种资源。
ServletContext对象可以获得应用范围的初始化参数,在应用范围内存取共享数据,访问当前Web应用的信息,访问当前容器的信息和输出日志和访问服务器端的文件系统资源。
9,
HttpServletRequest接口用于封装HTTP请求信息,对象用于获取请求报文信息,获取网络连接信息和存取请求域属性。ServletContext对象,HttpServletRequest对象具有相同的存取域的方法。
HttpServletResponse接口用于封装HTTP响应信息,创建响应报文。
10,
ServletContext对象的getInitParameter()方法用来访问整个应用范围内的初始化参数,参数通过web.xml的元素来指定,所有的servlet都可访问,ServletConfig对象对象的getInitParameter()方法用来访问当前Servlet的初始化参数,参数通过web.xml的来指定。仅当前配置的Servlet可访问。
11,
ServletContext对象通过setAttribute(name,value)方法来存取自定义属性,通过getAttribute(name)来取自定义属性值。ServletContext对象的自定义属性也被称为应用域属性,表示在web应用的整个生命周期内,可以被web应用范围内的所有组件所共享
12,
HttpServletrequest对象通过setAttribute(name,value)方法来自定义一个域属性,HttpServletRequest对象自定义属性也被称为请求域属性,表示在本次请求和响应的生命周期内供本次请求对象所访问,
13,
通过HttpServletResponse对象调用getOutputStream()方法获取字节输出流对象ServletOutputStream,用于创建包含二进制数据的响应正文,通过调用getWriter()方法获取字符输出流对象PrintWriter,用于创建包含字符数据的响应正文。
14,你知道Session和Cookie吗?说说它们的区别和联系?
15,你还知道哪些会话跟踪技术?
16,session的生命周期?
17,简述一下JSP执行原理:
18,JSP元素有哪些?
19,include指令元素与动作元素有啥区别?
20,JSP内置对象有哪些?
14,
Session和Cookie是两种会话跟踪技术,HTTP是一种无状态协议,利用Session和Cookie可以实现多次请求之间的数据共享。
Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,cookie本身有一定的大小限制,,每个cookie所存放的数据不能超过4KB。cookie由一些键值对(cookieName–value)构成,根据cookieName来检索的cookie中的信息,它可以包含有关用户的信息。当cookie到达过期时间时,cookie就会被删除,默认情况下,当浏览器关闭时cookie立即失效,对于长期的Cookie,会保存在磁盘中,无论何时用户链接到服务器,Web 站点都可以访问 Cookie 信息。
Session技术是指使用HttpSession会话实现会话跟踪技术,HttpSession对象是Javax.servlet.http.HttpSession接口的实例,也称会话对象,该对象用来保存单个用户访问时的 一些信息,是服务器在无状态的Http协议下用来识别和维护具体某个用户的重要方式。
HttpSession对象会在用户第一次访问服务器时由容器创建(在访问JSP,Servlet,等程序才会创建,只访问HTML,IMAGE等静态资源并不会创建),当用户调用其失效方法(invalidate())或超过其最大不活动时间时会失效,在此期间,用户与服务器之间的多次请求都属于同一个会话。服务器在创建会话时,会分配一个唯一的会话标识:SessionId,以“JSESSIONID”的属性名保存在客户端Cookie中,在用户随后的请求的中,通过JSESSIONID属性来识别不同的用户。实现每个用户的会话跟踪。
联系:
session是通过cookie来工作的,session依赖于Cookie,服务器在创建会话时,会分配一个唯一的会话标识:SessionId,以“JSESSIONID”的属性名保存在客户端Cookie中,在用户随后的请求的中,通过Cookie中的JSESSIONID属性来识别不同的用户。实现每个用户的会话跟踪。
区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5,对于Java Web来说,Cookie只能保存Sting类型的KV对,Session可以存放Object类型的KV。
6,Session不区分访问路径,同一个用户在访问一个网站期间,所有的请求地址都可以访问到Session,而Cookie如果设置参数路径,那么同一网站中不同路径下的Cookie是相互访问不到的。
15,
URL重写技术:在客户端浏览起完全禁用了Cookie后,通过在请求地址后附加会话标识的URL重写技术任可实现会话的跟踪技术。
隐藏表单域:利用Form表单的隐藏表单域,可以在完全脱离浏览器对Cookie的使用权限以及在用户无法显示页面看到的隐藏标识的情况下,将标识随请求一起穿送给服务器处理。实现会话跟踪。
16,
HttpSession对象会在用户第一次访问服务器有容器创建,在用户调用其失效方法或超过最大不活动时间时失效。
17,
1,客户端向服务器发送JSP页面请求。
2,容器检索请求的JSP页面,第一次请求,则将静态数据和动态数据转换为Java代码,将JSP文件翻译为一个Java文件。
3,容器将翻译后的Servlet源代码编译为字节码文件,对于Tomcat而言,生成的字节码文件默认存放在<Tomcat安装目录>work目录下。
4,编译后的字节码文件被加载到容器内存中执行,并根据用户的请求生成HTML格式的响应内容
5,容器将响应内容返回客户端
当同一个JSP页面再次被请求时,只要该JSP文件没有发生过改变,容器将直接调用已加载的字节码文件,而不会再执行翻译和编译的过程
18,
脚本元素:脚本<%%>,表达式<%=%>,声明<%!%>注释<%-- --%>
指令元素:<%@page%>,<%@include%>,<%@taglib%>
动作元素:< jsp:include>,< jsp:forward>,< jsp:param>,< jsp:userBean>’
19,
include指令元素和动作元素都是实现包含文件代码复用。
对于包含文件的处理指令和方式不同,include指令元素在翻译阶段就引入所包含的文件,被处理的文件在逻辑上和语法上依赖于当前的JSP页面,优点是执行速度快。include动作元素是JSP页面在运行时才引入包含的文件所产生的应答文本,被包含的文件在逻辑和语法上独立于当前JSP页面,其优点是可以使用param子元素更加灵活的处理所需要的文件,缺点是执行速度慢一些。
20,
| request ||请求对象,提供客户端HTTP请求数据的访问|
|response||响应对象,用来向客户端输出响应|
|out||输出对象,提供对输出流的访问,由java.io.Writer类继承得|
|session||会话对象,用来保存服务器与每个客户端会话过程中的信息|
|application||应用程序对象,保存整个应用环境信息|
|pageContext||页面上下文对象,用于存储当前JSP页面的相关信息|
|config||页面配置对象,JSP页面的配置信息对象|
|page||当前JSP页面对象,即this|
|exception||异常对象,用于处理JSP页面中的错误|
21,你知道EL吗?EI的隐含对象有哪些?
22,你知道JSTL,日常开发哪里会用到呢?
23,你对Filter与Listener了解多少?
24,谈谈你对MVC模式的理解?
21,
EL即表达式语言,最大的优势是可以方便的访问JSP的隐含对象的JavaBean组件,
EL隐含对象:
与范围有关的隐含对象:pageScope,requestScope,sessionScope,applicationScope.
与请求参数有关的对象:param,paramValues。对post与Get请求都适用
其它的隐含对象:pageConrext,header,headerValues,cookie,initParam。
22,
JSTL主要提供给Java Web开发人员一个标准通用的标签函数库,标签库同时支持EL获取数据,Web开发人员能够利用此标签函数库取代直接在页面中嵌入Java程序的做法。
核心标签库:
通用标签,用于操作变量:<c:out/>,<c:set/>,<c:remove/>,<c:catch/>标签
条件标签,用于流程控制<c:if>,<c:choose>,<c:when>,<c:otherwise>;
迭代标签,用于循环遍历集合<c:forEach>,<c:forTokens>
函数标签库:是一些对String对象的操作。
23,
过滤器(Filter):也称之为拦截器,当用户的请求到达所请求的资源之前。可以借助过滤器来改变这些请求的内容,此过程也称之为“预处理”,当执行结果要响应到用户之前,可以经过过滤器修改响应输出的内容,此过程称为"后处理"
监听器(Listener):Servlet API 提供了大量监听器接口实现对Web应用内特定的事件进行监听,当Web应用中特定事件发生时,回调监听器内的事件监听方法。
24,MVC(Model-View-Controller):模式是一种体系结构,有三个组成部分,Model(模型),View(视图)和Controller(控制器)。MVC结构的每个部分具有各自的功能,作用,并以最少的耦合协同工作,提高可扩展性和可维护性。
MVC模式是交互式应用程序最广泛使用的一种体积结构,能够有效的将界面显示,流程控制,和业务处理相分离,
模型层(Model):
是应用系统的核心层,负责封装数据和业务操作。模型层可以分为数据模型和业务模型。数据模型用来对用户请求的数据和数据库查询的数据进行封装,业务模型用来对业务处理逻辑进行封装,控制器(Controller)将用户请求数据和业务处理逻辑交给相应的模型,视图(View)从模型中获取数据,模型改变时通知视图数据更新,维护具有弹性。
视图层(View):
视图层主要是指与用户交互的界面,即应用程序的外观。当做用户的操作接口,输入数据和显示数据处理后的结果,用户通过视图输入数据,转交给控制器,控制器根据用户的请求调用相应的数据模型和业务模型进行处理,选择合适的视图,视图调用模型对结果数据进行显示,同时当模型更新数据时,视图也随之更新。
控制层(Controller):
控制整个系统的处理流程,介于视图层和模型层之间。进行数据传递和流程转向,控制层接受用户的请求和数据,做出判断将请求和数据交由那个模型来处理,最后将结果交由视图来显示模型返回的数据。
嗯,某些原因,整理了这份Java Web的面试知识点。感觉这些技术有些旧了,不太会考太多。加油生活!^_^.
2019.7.19
以上是关于Java Web面试题整理(思维导图)的主要内容,如果未能解决你的问题,请参考以下文章
2020年Java多线程与并发系列22道高频面试题(附思维导图和答案解析)
2020年最新78道JVM面试题总结(含答案解析和思维导图)
本专栏所有力扣题目的目录链接, 刷算法题目的顺序(由易到难/面试频率)/注意点/技巧, 以及思维导图源文件问题(持续更新中)