整合JavaWeb面试过程中相关问题

内容包括:Servlet、JSP、ajax、JSON、JS、HTML、xml等。

1、Servlet

1、生成动态页面的方法有两种:

1)公共网关接口(common Gateway  Interface)CGI是用Perl写的,可以用来生成动态页面。2)采用servlet技术。

2、什么是Servlet?

Servlet是采用Java语言编写的服务器端程序,它运行于Web服务器中的Servlet中,Servlet有Web服务器进行加载,该Web服务器(如Tomcat)必须包含支持Servlet的Java虚拟机。其主要功能是提供请求/响应的Web服务模式,可以生成动态的Web内容,而这正是HTML所不具有的功能。优点:较好的可移植性;执行效率高;功能强大;使用方便;可扩展性强。*****Servlet 默认是以多线程模式执行的。

3、Servlet没有main()方法,

它是在容器的控制下执行的,最常被使用的是Tomcat容器。当Web服务器获得一个队Servlet的请求时,该服务器将会把这个请求交给对应的容器来处理,容器通过调用Servlet的方法(doGet()和doPost())来响应客户端的请求。

4、Servlet处理客户端的请求的步骤:

4.1  用户单机链接向Servlet发起请求;

4.2  Web服务器接收到该请求后,会把该请求交给相应的容器来处理,当容器发现这是对Servlet发起的请求后,容器会创建两个对象:HttpServletResponse和HttpServletRequest。

4.3  容器根据请求的消息中的URL找到对应的Servlet,然后针对该请求创建一个单独的线程,同时把2)中创建的两个对象作为参数传到线程中。

4.4  容器调用Servlet的service()方法来完成对用户请求的响应,service()会调用具体的方法(doGet()或doPost())来完成响应的任务,同时把生成的动态页面返回给容器。

4.5 容器把响应消息组装成HTTP格式返回给客户端。此时线程结束,删除创建的两个对象。

5、Servlet的生命周期:

Servlet没有main()方法,因此生命周期是用容器来控制的。Servlet的生命周期定义了一个Servlet如何被加载、初始化、以及怎样接收请求、响应请求、提供服务。

有三个方法代表Servlet的生命周期:

前期还包含:a)加载:容器通过类加载器使用Servlet类对应的文件来加载Servlet。

B)创建:通过调用Servlet的构造函数来创建一个Servlet实例。

1) init  方法:负责初始化Servlet对象。

2) service 方法:负责响应客户端的请求(调用doGET或doPost等方法)。

3) destroy 方法:当Servlet对象退出生命周期时,负责释放占用的资源。

6、Servlet中forward和redirect有什么区别

Servlet中有两种实现跳转的方式:

1) forward 是服务器内部重定向,服务器直接访问目标地址URL,把那个URL的响应内容读取过来,而客户端并不知道,因此在客户端浏览器的地址中不会显示转向后的地址,还是原来的地址。整个过程使用同一个Request,因此forward会将Request的信息带到定向的JSP或Servlet中使用。

2) redirect 是客户端重定向,是完全的跳转,即客户端浏览器会获取到跳转后的地址然后重新发送请求,因此浏览器中会显示跳转后的地址。由于多发送了一次请求,因此其效率要比forward低。另外,客户端的重定向可以通过设置特定的HTTP头或写JavaScript脚本来实现。

7、filter 的作用是什么?主要实现方法?

Filter 使用户可以改变一个request并修改一个response。Filter不是一个Servlet,它不能产生一个response,但它能够在一个Request到达Servlet之前预处理Request,也可以在离开Servlet时处理response。

Filter 的作用:1)在Servlet被调用之前截获。2)在Servlet被调用之前检查Servlet Request。3)根据需要修改Request头和Request数据。4)修改Response头和Response数据。5)在Servlet被调用之后截获。

2、JSP(Java  server  pages)

在没有JSP之前,在Web应用程序中,所有业务逻辑和HTML的响应都是Servlet中实现的,但在使用这种方式时,存在的缺陷:必须把给用户响应的视图组装成一个很长的HTML格式的字符串写入println()方法中。这样导致在HTML的书写复杂,容易出错,可维护性差。

1、JSP优点

本质上嵌入了Java代码的HTML文件。提高了系统的可扩展性和可维护性,解决了Servlet在HTML显示的缺陷。

2、JSP与Servlet有何异同

2.1 相同:JSP可以看作是一个特殊的Servlet,它只不过是对Servlet的扩展,只要是JSP可以完成的工作,使用Servlet都可以完成。由于JSP页面最终要被转换成Servlet来运行,因此处理请求实际上编译后的Servlet。

2.2 不同点

1)Servlet的实现方式是在Java中嵌入HTML,编写和修改HTML不方便,所以它比较适合做流程控制、业务处理。JSP的实现方式为HTML中嵌入Java代码,比较适合做页面显示,例如:Struts框架中,Servlet位于MVC设计模式的控制层,而JSP位于视图层。

2)Servlet没有内置对象,JSP中的内置对象都是必须通过HttpServletRequest对象、HttpServletResponse对象以及HttpServlet对象得到。

3、如何使用JSP与Servlet实现MVC模型

这个模型中视图采用JSP来实现,主要负责数据的展示。视图可以从控制器上获取模型的状态,当然不是直接从控制器上获取,而是控制器把模型的数据放到一个视图可以访问的地方,通过间接方式来访问模型的数据。控制器采用Servlet来实现,客户端的所有请求都发送给Servlet,它接收请求,并根据请求消息把他们分发给对应的JSP页面来响应,同时根据需求生成JavaBean实例工JSP来使用。模型采用JavaBean来实现,这个模块实现了实际的业务逻辑。

4、jsp的内置对象有哪些?

在JSP中,内置对象又称为隐含对象,是指在不声明和不创建的情况下就可以被使用的一些成员变量。JSP有9个内置对象:request(请求对象),response,pageContext(页面上下文对象),session(回话对象),application(应用程序对象)、out(输出对象),config(配置对象),page(页面对象)与exception(例外对象)。

5、JSP有哪些动作?

一共有6个基本动作:

1) jsp:include  被请求时引用一个文件。

2) jsp:useBean  用来寻找或者实例化一个JavaBean。

3) jsp:setProperty  用来设置已经实例化的Bean的对象的属性。

4) jsp:getProperty  用来获取某个JavaBean的属性。

5) jsp:foward  用来把请求转到一个新的页面。

6) jsp:plugin  用来在一个浏览器中显示或播放一个对象。

5、JSP中include指令和include动作有什么区别?

include 的主要作用是用来在当前文件中引入另一个文件。以便在当前文件中使用。Include有两种使用方法:include指令和include动作。

二者的主要差异在于:二者的调用时间。Include指令是编译阶段的指令。Include动作是运行时的语法。

6、会话跟踪技术有哪些?

会话:从客户端打开与服务器的连接并发出请求到服务器响应客户端请求的全过程。

会话跟踪:对同一个用户对服务器的连接请求和接受响应的监视。客户端和服务器之间是通过HTTP进行通信的,而HTTP本身是无状态协议,不能保持客户的信息,即一次响应完成之后连接断开,在下一次请求时,需要重新建立连接,等到连接建立完之后就断开了,在下一次请求时需要重新建立连接,等连接建立后还需要重新判断是否是同一个用户,因此要想对会话的过程进行监控,最好的方法就是使用会话跟踪技术。

会话跟踪技术有四种:

1) page  代表一个页面相关的对象和属性。

2) request  代表与一个Web客户端发送的一个请求相关的对象和属性。

3) session  代表与用于某个Web客户端的一个用户体验相关的对象和属性。

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

3、Ajax

1、ajax的定义和目的(优点)

Ajax(Asynchronous JavaScript andXML, 异步JavaScript与xml)是一个结合了Java技术、xml技术以及JavaScript的编程技术。

主要目的:是在不断刷新页面的情况下通过与服务器进行少量数据的交互来提高页面的交互性,减少响应时间,从而改善用户体验。

2、带来的好处:

1)由于Ajax技术可以只向服务器发送并取回必需的数据内容,使得数据交互量大幅降低,从而降低了服务器的网络负载;

2)(在前端处理相关的数据减少服务端的时间)通过使用SOAP(Simple ObjectAccess Protocol,简单对象访问协议,一种交换数据的规范)或其他一些基于xml的Web Service接口,在客户端采用JavaScript来处理来自服务端的响应,也降低了Web服务器的处理时间。

3)由于不需要重新加载整个页面,有利于提高系统的稳定性和可用性。

Ajax技术是客户端技术,核心是JavaScript对象XMLHttpRequest,该对象是一种支持异步请求的技术。

3、谈谈你对ajax的认识

基于web标准(standards-based presentation)XHTML+CSS的表示; 

使用 DOM(Document Object Model)进行动态显示及交互; 

使用 XML 和 XSLT 进行数据交换及相关操作; 

使用 XMLHttpRequest 进行异步数据查询、检索; 

使用 javascript 将所有的东西绑定在一起。

4、xmlHttpRequest对象在IE和Firefox中创建方式有什么不同?

在IE中通过new ActiveXObject()得到,Firefox中通过new XMLHttpRequest()得到。

5、XMLHttpRequest对象常用的方法和属性?

Open()

Send()

Abort()停止当前请求

ReadyState属性,有5个状态,0未初始化;1正在加载;2以加载;3交互中;4完成。

responseText 属性 服务器的响应,表示为一个串

reponseXML 属性 服务器的响应,表示为XML

status    服务器的HTTP状态码,200对应ok 400对应not found

4、JSON

1、什么是JSON?

JSON(JavaScript ObjectNotation)是一种类似于xml的序列化方法。是一种可读的格式,可以被多种语言解析和处理。JSON中的类型很少:字符串包裹在引号之间,浮点数和整数没有区别,可以使使用false和true。列表中的内容用逗号隔开,两头用中括号包裹。

2、在Java应用程序中如何读取JSON?

Jackson库实现了JSON的解析和处理功能。

finalObjectMapper mapper = new ObjectMapper();

final String  json = “/com/java/…/ceshi.json”;

final ceshi(类名)  cs =mapper.readValue(getClass().getResourceAsStream(json), ceshi.Class);

一般情况下需要依赖反射保证JSON数据可以正确填入到给定的领域对象。

3、JSON能用来序列化Java对象吗?   

可以,Jackson库可以利用领域对象创建JSON格式。

5、JavaScript

6、HTML

1、HTML(超文本标记语言)

超文本标记语言的结构包括部分(英语:Head)、和主体部分(英语:Body),其中部提供关于网页的信息,主体部分提供网页的具体内容。

2、其主要特点如下:

  1. 简易性:超级文本标记语言版本升级采用超集方式,从而更加灵活方便。
  2. 可扩展性:超级文本标记语言的广泛应用带来了加强功能,增加标识符等要求,超级文本标记语言采取子类元素的方式,为系统扩展带来保证。
  3. 平台无关性:虽然个人计算机大行其道,但使用MAC等其他机器的大有人在,超级文本标记语言可以使用在广泛的平台上,这也是万维网WWW)盛行的另一个原因。
  4. 通用性:另外,HTML是网络的通用语言,一种简单、通用的全置标记语言。它允许网页制作人建立文本与图片相结合的复杂页面,这些页面可以被网上任何其他人浏览到,无论使用的是什么类型的电脑或浏览器。

7、XML

1、xml(可扩展标记语言)是什么,基础知识?

xml是定义领域对象的一种常用格式。通过一种名为XSD(xml SchemaDefinition)(schema (概要))的元语言可以在xml标记语言中定义领域对象,通过这些对象可以创建xml文档。Java有一个名为JAXB的库,这个库可以理解为XSD,并且通过XSD的定义创建Java对象。这个库通常被其他库用来序列化和反序列化对象。

2、XSD能否用来创建Java领域对象?

能。JAXB是通过独立的编译器运行的。这个编译器可以解析XSD文档的内容并创建Java源代码文件。xjc命令是随JDK发行的。

3、XSD和JAXB能用于序列化Java对象吗?

一旦通过xjc创建了JAXB绑定,解析遵循XSD的xml文档就是一件比较简单的事情了。

4、用什么方法可以保证XSD定义和源代码保持同步?

只记得好像是将生成Java源代码的过程集成到构建过程中。比如:通过在Maven POM文件中添加一个plugin标签。

猜你喜欢

转载自blog.csdn.net/qq_30507287/article/details/78071540