JavaWeb面试知识点总结

JavaWeb面试知识点总结

2019/11/2 周六
内容:Servlet、JSP、Cookie、Session、MVC架构模式、DAO、JDBC、AJAX、JSON、forward和redirect、GET和POST


一、Servlet

详细笔记链接

1. 什么是Servlet

Servlet由Server和let的组成,let在英文的构词中,一般充当词尾,表示“小部件”的意思,因此Servlet表达的是服务器端的小应用程序的意思。

Servlet就是 运行在Web服务器端的Java程序,处理客户浏览器发送来的请求 。一般来说,Servlet主要用来处理HTTP的请求,但是Servlet本身不局限于用来开发基于HTTP协议的应用,也可以开发其他协议的应用。

Servlet从设计上来讲,主要应用了设计模式中的模板模式,定义几个接口和抽象类,如果你需要编写Servlet程序,只要继承或者实现特定的抽象类、接口,实现抽象方法。而被重写的方法中应包含能处理用户发来的特定请求的代码。

2. Servlet的应用

Servlet能够编写很多基于服务器端的应用,例如:
(1)动态处理用户提交上来的HTML表单。
(2)提供动态的内容给浏览器进行显示,例如,动态从数据库获取的查询数据。
(3)在HTTP客户请求维护用户的状态信息,例如,利用Servlet技术实现虚拟购物车功能,利用虚拟的购物车保持用户在不同购物页面购买的商品信息。

3. Servlet的生命周期

(1)实例化
当Servlet部署到Web容器中以后,客户机发送调用这个Servlet的请求到达Web容器,Web容器会先判断所调用的Servlet的实例是否存在。如果存在,新创建一个线程,并在新建线程中调用这个实例的service()方法。如果不存在,装载当前所调用的Servlet的类,调用构造方法生成这个Servlet的实例。
(2)初始化
然后立即调用这个实例的init()方法进行初始化,特别强调init()这个方法只会在Servlet初始化的时候调用一次,创建后的servlet对象会一直驻留在服务器内部,为后续的请问提供服务,除非这个Servlet被重新部署。
(3)处理请求服务
只要有请求访问servlet,服务就会在新建的线程中调用这个Servlet实例的service()方法,处理用户的请求,回应给用户相应的内容。
(4)对象销毁
当Servlet不再需要使用的时候,比如其所在的Web应用被卸载或Web服务器关闭时,它会被卸载掉,卸载前调用destroy()方法,完成所有相关资源的释放。

二、JSP(Java Server Pages)

详细笔记链接

1. 什么是JSP

JSP(Java Server Pages)就是 运行在服务器端的Java页面 ,是Servlet更高级别的扩展,通过JSP可以让开发人员 把普通的Java代码镶嵌到HTML页面中 ,最终JSP文件会通过Web服务器的Web容器编译成一个Servlet,用来处理各种请求。

2. JSP与Servlet的联系和区别

Servlet与JSP可以认为是Java实现Web编程的第一代和第二代技术。就是由于Servlet不便于快速开发包括大量HTML代码的动态网页,于是Sun公司推出了JSP技术用来快速开发动态的Web页面。

Servlet和JSP是实现同一种编程效果的不同的两种实现方式。JSP更擅长表现于页面显示,servlet更擅长于逻辑控制。

从根本上来说JSP就是Servlet。因为JVM虚拟机只能识别Java的类,不能识别JSP的代码,因此JSP在web服务器中运行时,就是先转化成Servlet,Servlet则是个完整的Java类,JVM能够识别,然后再调用转化后Servlet的方法,把输出的动态HTML内容返回给客户的浏览器。

3. JSP的9个内置对象

(1) request对象 ,javax.servlet.httpServletRequest类型的对象。该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。

(2) response对象 ,代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。

(3) session对象 ,由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。

(4) application对象 ,可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。

(5) out对象 ,用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用out对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

(6) pageContext对象 ,作用是取得任何范围的参数,通过它可以获取JSP页面的out、request、reponse、session、application等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用pageContext对象。

(7) config对象 ,主要作用是取得服务器的配置信息。通过pageConext对象的getServletConfig()方法可以获取一个config对象。当一个Servlet初始化时,容器把某些信息通过config对象传递给这个Servlet。开发者可以在web.xml文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

(8) page 对象 ,代表JSP本身,只有在JSP页面内才是合法的。page隐含对象本质上包含当前Servlet接口引用的变量,类似于Java编程中的this指针。

(9) exception 对象 ,作用是显示异常信息,只有在包含isErrorPage="true"的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况;如果在JSP页面中出现没有捕获到的异常,就会生成exception对象,并把exception对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的exception对象。

三、Cookie和Session

详细笔记链接

1. 什么是Cookie

Cookie是 Web服务器通过浏览器保存在用户计算机上的一个文本文件 ,这个文本文件中包含了小段的文本信息,可以记录每个用户独特的个人信息,这些文本信息的内容以键值对的形式进行储存,并且可以让Web开发者通过程序代码读写这个文本文件的内容。

简单来说,客户端请求服务器,如果服务器需要记录该用户的状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再次请求该网站时,浏览器就会把请求地址和Cookie一同给服务器。服务器检查该Cookie,从而判断用户的状态。服务器还可以根据需要修改Cookie的内容。

2. 什么是Session(会话)

Session是另一种记录客户状态的机制。客户端浏览器访问服务器的时候, 服务器把客户端信息以某种形式记录在服务器上 ,这就是session,客户端浏览器再次访问时,只需要从该session中查找该客户的状态就可以了。

会话所描述的是客户端和服务器端一系列连续交互的过程,在一次会话期间(从会话建立到结束/失效)通常会发生多次请求/响应操作(跨多个页面),而会话机制允许在此期间连续地记录用户的状态信息。

3. Cookie和Session的区别

(1)Cookie是保存在客户端的,因此不能在Cookie中存诸如密码之类的敏感信息,不安全;而Session是保存在Web服务器端的,但也因此会占用一定的服务器性能。
(2)Cookie能保存的信息只能是有限(4K)的文本信息,且很多浏览器都限制一个站点最多存放20个Cookie;而Session能保存对象,并且保存对象的数量和大小没有限制。

四、MVC架构模式

详细笔记链接

1. 什么是MVC

MVC架构模式是模型(Model)、视图(View)和控制器(Controller)三个英文单词的首字母组合,综合运用了多种设计模式,包括观察者(Observer)、策略(Strategy)和合成(Composite)等模式,现如今MVC已经成为Web开发中最常使用的架构模式。

(1) 模型(Model) 部分代表了 运算数据和商业逻辑 ,在实际开发中,模型部分一般通过JavaBeans和EJB(企业级JavaBean)来实现。

(2) 视图(view) 部分代表了用户交互界面,是应用的 显示模块 ,对于JavaWeb应用来说,这部分由JSP和定制标记库组成。JSP通过定制标记库来读取模型对象中的数据,模型和控制器部分负责在JSP页面中所显示的数据的更新。

(3) 控制器(Controller) 调用模型和视图部分,相当于MVC模式中的中枢神经,接收到用户不同的请求, 根据请求的内容,调用不同的模型进行处理 ,处理完成以后再通过视图部分显示最终的处理结果。控制器一般会使用Servlet技术来实现。

2. MVC的优缺点

优点:
(1)有利于开发中的 分工
在MVC模式中,用不同模块把系统分成不同部分,能更好地实现开发中的分工。美工和网页设计人员进行视图部分的开发,Java程序员进行模型和控制器部分的开发。
(2)各司其职,互不干涉
在MVC模式中,三个部分各司其职,所以如果 哪一部分的需求发生了变化,就只需要更改相应部分的代码就可以,而不会影响到其他层中的代码
(3)有利于 组件的重用
分层后更有利于组件的重用。例如,控制器部分可独立成一个能用的组件,视图也可做成通用的界面。

缺点:
使用MVC以后, 系统变得复杂 了,对开发人员的技术水平要求比较高了,同时模型和视图的分离也使得调试代码变得更困难一些。

五、DAO(Database Access Object)

详细笔记链接
DAO(Database Access Object),顾名思义就是 数据库访问对象 ,也就是和数据库打交道的对象。而这些对象执行的操作往往可以 从系统的业务逻辑中独立出来 ,从而使系统中的数据库操作变得统一和简单化,而且也可以使得系统在和数据库交互出错时,更快地定位问题。

DAO设计模式的主要作用是对数据访问进行抽象,使得控制层的代码通过DAO对象就可以完成对数据库表中数据的添加、读取、更新与删除(Create、Retrieve、Update和Delete,CRUD)操作。应用DAO模式,需要先定义所操作的数据对应的POJO类(普通JavaBeans,与EJB相对),然后再定义DAO接口和编写实现DAO接口的实现类。

六、JDBC(Java Database Connectivity)

详细笔记链接

1. 什么是JDBC

JDBC(Java Database Connectivity) Java数据库连接 ,是一种 可用于执行SQL语句的JavaAPI ,它是一些Java的类和接口组成的。JDBC给数据库应用开发人员提供标准的应用程序设计接口,同时也鼓励各家数据库厂商编写实现JDBC设计接口的驱动程序。在JDBC这种方式下,接口和实现相分离,Java程序设计人员利用JDBC的接口进行数据库访问操作,而实际上对数据库的操作由JDBC驱动程序中的接口实现类完成。

通过使用JDBC,程序开发人员可以很方便地将SQL语句传送给具有JDBC驱动程序的任何一种数据库。

2. 使用JDBC的过程

(1)导入jar包:mysql-connector-java-5.1.37-bin。
(2)建立数据库连接

// 注册驱动
Class.forName("com.mysql.jdbc.Driver");

// 根据 url(其中xxx为自己建的数据库名)、user和password,通过DriverManager类获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xxx","root","1234");

(3)向数据库中提交SQL

// 定义sql语句
String sql = "xxx";

// 获得执行sql语句对象Statement
Statement st = conn.createStatement();
// 或使用PreparedStatement预编译,参数可以使用“?”占位符,使sql语句的执行更具有柔韧性、更高效
PreparedStatement st = conn.perpareStatement(sql);
st.setXXX(1,1234); // 依次放入参数,XXX为参数类型

// 执行sql语句
int line = st.executeUpdate(sql); // 用来执行create、drop、alter、insert、delete和update等能够改变数据厍内容的SQL语句,返回值为对数据影响的条数
ResultSet rs = st.executeQuery(sql);  // 用于select等查询数据库的SQL语句,返回值为相应类型的结果集

(4)处理数据库返回的结果

// 处理增、删、改操作的结果,如打印受影响行数
System.out.println(line);
// 处理查询操作的结果,如打印所有查询到的id和name
while(rs.next()){
	System.out.println(rs.getInt("id") + "\t" + rs.getString("name");
}

(5)释放数据库连接

st.close();
conn.close();

七、AJAX(Asvnchronout JavaScript and XML)

详细笔记链接

1. 什么是AJAX

AJAX(Asvnchronout JavaScript and XML)即异步JavaScript和XML。通过使用AJAX,可以让应用 在无刷新的情况下,在客户端和服务器传递数据 ,极大地提高用户的体验度。

AJAX不是一个单一的技术,而是几个技术的组合:JavaScript、XML和JavaScript的异步调用。
(1)JavaScript用来发起对Web服务器的调用,当服务器处理完请求后,JavaScript再用来更新当前的页面。
(2)服务器端和客户端之间传递的数据格式一般采用XML。因为JavaScript中有专门用来处理XML数据的API,所以在AJAX中使用XML这种数据格式是最恰当的。
(3)浏览器和Web服务器之间的 异步调用 ,通过JavaScript中的 XMLHttpRequest对象来实现 。XMLHttpRequest对象向Web服务器发出请求,这个请求是异步的,所以这个请求不需要等待用户的反应。

2. 关于HTTP状态码
  • 1字头:消息,代表请求已被接受,需要继续处理。
  • 2字头:成功,代表请求已成功被服务器接收、理解、并接受。如200表示正常状态。
  • 3字头:重定向,代表需要客户端采取进一步的操作才能完成请求,通常这些状态码用来重定向。
  • 4字头:请求错误,代表了客户端可能发生了错误。如400表示当前请求无法被服务器理解和识别,404最有可能的原因是服务器端没有这个页面。
  • 5、6字头:服务器错误,代表了服务器在处理请求的过程中有错误或者异常状态发生。如500常在服务器端的源代码出现错误时出现,503表示临时的服务器维护或者过载。

八、JSON(JavaScript Object Notation)

详细笔记链接,滑倒最后

1. 什么是JSON

JSON(JavaScript Object Notation) 是一种 轻量级的数据交换格式 ,使用 Javascript语法 来描述数据对象。JSON解析器和JSON库 支持许多不同的编程语言 ,目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。JSON 具有自我描述性、更易理解的特点。

JSON 数据的书写格式是:名称:值对,包括字段名称(在双引号中),后面写一个冒号,然后是值,如:
var json = {“name”:“张三” , “age”:18 };

2. 结合AJAX进行前后端数据交互

AJAX与后台进行异步交互的数据有多种形式,比如HTML、XML、JSON等,大多数情况下还是JSON,具体步骤为:

(1)前端发送请求,即JSP页面向服务器发起AJAX请求。
(2)后台接收请求,从数据库获取数据,一般是 Java对象 或者对象的集合,需要转换成 JSON对象 ,再以 JSON字符串 的形式返回给前端。
(3)前端的请求成功后执行回调函数,获取后台返回的数据,即获得JSON格式的字符串,并将它转化为JS能操作的 JSON对象
(4)然后访问这个对象的键/值,从而进行页面数据渲染,通常是通过遍历输出到页面。

九、转发与重定向的区别

  1. 本质区别
    转发forward是服务器行为,重定向redirect是客户端行为。
  2. 请求次数
    转发行为是浏览器只做了一次访问请求;重定向行为是浏览器做了至少两次的访问请求。
  3. 数据共享
    转发页面和转发到的页面可以共享request里面的数据;重定向不能共享数据,传输的信息会被丢失。
  4. 地址栏显示
    转发是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,而浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址;
    重定向是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的URL。

十、GET请求和POST请求的区别

  1. 参数传递
    GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接;
    POST请求会把请求的数据放置在HTTP请求包的包体中。
    因此, GET请求的数据会暴露在地址栏中 ,而POST请求则不会。
  2. 参数类型
    GET请求只能进行URL编码,URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输;
    POST请求支持多种编码方式。
  3. 传输数据的大小
    在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制;
    对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。
  4. 安全性
    POST的安全性比GET的高。比如在进行登录操作时,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击。

你可能感兴趣的:(基础知识,JavaWeb)