JavaWeb 高频面试题

本文整理了JavaWeb面试中的核心知识点,包括语言和框架、JavaScript、JSP和Servlet的相关概念与特性,如HTML/CSS/JavaScript的基础,JSP与Servlet的融合方式,以及Servlet的生命周期和HttpServletRequest/HttpServletResponse的应用。
摘要由CSDN通过智能技术生成

之前以为面经只是死记硬背的东西,后来发现记住了它们,对自己对知识的理解确实有帮助,难怪语文的文章老是要求背背背。

前言

这次的面经整理分为以下几个部分,希望对大家的工作有帮助。

内容链接地址
Java 基础传送门
Java 集合传送门
Java 多线程传送门
Java虚拟机传送门
计算机网络传送门
数据结构和算法传送门
数据库传送门
JavaWeb传送门
设计模式传送门
Spring、MyBatis传送门

1 语言和框架

1 什么是 JavaWeb

JavaWeb 是所有通过 Java 语言编写的、且可以通过浏览器访问的程序的总称。JavaWeb 是基于请求和响应来开发的。

2 JavaWeb 目前的技术和框架有哪些

HTML、CSS、JavaScript:这三门语言是前端语言,其中 HTML 主要负责定义网页的内容,CSS 规定网页的布局,而 JavaScript 则对网页行为进行编程。

JSP:全称是 Java Server Page,它表示的是 Java 的服务器页面,主要作用是代替 Servlet 程序回传 HTML 页面的数据。实际上,我的所有前端网页都是通过 JSP 来完成的。

Servlet: Servlet 是运行在服务器上的一个 Java 程序,它可以接收客户端发送过来的请求,并响应数据给客户端。前端和后端就这么产生了。

Tomcat:Tomcat 实际上是一个服务器。

MySQL:MySQL 是一个关系型数据库管理系统,它使用 SQL 语言来作为开发。

3 介绍一下 HTML 和 CSS

关于这两部分,参考博客:

HTML:传送门

CSS:传送门

 

2 JavaScript

1 如何进行 JavaScript 与 HTML 的融合

JavaScript 是 HTML 的默认脚本语言,所以无需在 HTML 文件头部加上引入标签。不过在 HTML 中,JavaScript 代码必须位于 <script></script>标签之间。

拓展:

JSP 与 HTML 的融合方式是重新定义一个 .jsp 的文件,然后将 HTML 文件进行复制,而 JavaScript 是 HTML 的默认脚本语言,所以在 HTML 文件头部通过 <script type="text/javascript">引入不是必须的。

2 JavaScript 与 HTML 的融合的代码实例

1)在 head 或者 body 标签内,用 script 标签来书写 JavaScript 代码

例如在 head 中:

<!DOCTYPE html>
<html>
<head>
<script>
function myFunction() {
    document.getElementById("demo").innerHTML = "段落被更改。";
}
</script>
</head>

<body>
<h1>一张网页</h1>
<p id="demo">一个段落</p>
<button type="button" onclick="myFunction()">试一试</button>
</body>
</html>

在 body 中:

<!DOCTYPE html>
<html>
<body> 
<h1>A Web Page</h1>
<p id="demo">一个段落</p>
<button type="button" onclick="myFunction()">试一试</button>
<--!把脚本置于 <body> 元素的底部,可改善显示速度,-->
<script>
function myFunction() {
   document.getElementById("demo").innerHTML = "段落被更改。";
}
</script>
</body>
</html>

2)使用 script 标签引入单独的 JavaScript 代码文件

略。

3 JavaScript 的语法是怎样的

JavaScript 是弱类型的语言,同时 JavaScript 的数组会自动扩容。

4 介绍一下 JavaScript 的 DOM 模型

JavaScript 中的 DOM (Document Object Model) ,即文档对象模型,是把文档中的标签,属性,文本等转换成对象来管理的模型,通过将其进行对象化,使得我们可以直接根据 DOM 来访问 HTML 文档内容。

DOM 模型常用的方法如下:

方法功能
document.getElementById(elementId)通过标签的 id 属性查找元素
document.getElementsByName(elementName)通过标签的 name 属性查找元素
document.getElementsByTagName(tagname)通过标签名查找元素

三者的优先级从上到下以此递减。

5 介绍一下 JavaScript 的事件

事件是电脑输入设备与网页页面进行交互的一种响应,可分为静态注册(直接赋予)和动态注册(通过 DOM 模型)。

常用的事件:

事件名作用
onload 加载完成事件浏览器页面加载完成后,所执行的 JS 初始化代码
onclick 单击事件用户点击了 HTML 元素
onblur 失去焦点事件用户的光标从原本的某个地方移开就算失去焦点
onchange 内容发生改变事件下拉列表或者输入框的内容发生改变
onsubmit 表单提交事件常用于表单提交前,验证所有表单项是否合法

 

3 JSP

1 说一说 JSP 的定义

JSP 表示的是服务器页面,它的主要作用是代替 Servlet 程序回传 HTML 页面的数据。尽管 JSP 的代码是写在前端的,但其本质是后端语言。

JSP HTML 的融合方式是重新定义一个 .jsp 的文件,然后将 HTML 文件进行复制。

  • 与 JavaScript 相比:虽然 JavaScript 可以在客户端动态生成 HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等;
  • 与纯 Servlet 相比:JSP 可以很方便的编写或者修改 HTML 网页而不用去面对大量的 println 语句;
  • 与静态 HTML 相比:静态 HTML 不包含动态信息。

因此,JSP 的优点:可以动态地生成 HTML 页面,而且还可以方便地与服务器进行交互。

2 说一说 JSP 标签

JSP 共有六种标签,分别为指令标签、声明标签、表达式标签、代码标签、注释标签、动作标签。

指令标签有三种,分别如下:

指令描述
<%@ page … %>定义网页依赖属性,比如缓存信息、导入的 Java 类等
<%@ include … %>包含其他文件
<%@ taglib … %>引入标签库的定义

三个脚本标签为:声明标签、表达式标签、代码标签,其作用是在 JSP 页面中加入 Java 代码来实现功能。

脚本类型格式作用示例
声明脚本<%! %>申明变量或者方法,供后面的 Java 代码使用<%! int a, b, c; %>
表达式脚本<%= %>在 jsp 页面上输出数据Today's date: <%= (new java.util.Date()).toLocaleString()%>
代码脚本<% %>在 jsp 页面中定义自己需要的 Java 代码

动作标签示例:

名称作用
jsp:forward把请求转到一个新的页面。

3 说一说 JSP 的九大内置对象

JSP 中的内置对象,是指 Tomcat 在翻译 JSP 页面成为 Servlet 源代码后,内部提供的九大对象。此时翻译而来的 Java 源代码就是由这九大内置对象组合而成的。

对象名作用
request请求对象
response响应对象
pageContextJSP 的上下文对象
session会话对象
applicationServletContext对象
configServletConfig对象
outJSP输出流对象
page指向当前JSP的对象
exception异常对象

4 说一说 JSP 的四大域对象

域对象是可以像Map 一样存取数据的对象。四个域对象功能一样。不同的是它们对数据的存取范围。首先说明这四大域对象是属于九大内置对象的,四个域对象分别为:

域对象所属类作用域
pageContextPageContextImpl 类只在当前 JSP 页面范围内有效
requestHttpServletRequest 类一次请求内有效
sessionHttpSession 类一个会话范围内有效(即打开浏览器访问服务器到关闭浏览器)
applicationServletContext 类整个 web 工程范围内都有效(只要 web 工程不停止,数据都在)

5 介绍一下静态包含和动态包含的区别

静态包含的代码为:<%@ include file="/include/include2.jsp"%>
动态包含的代码为:<jsp:include page="/include/include2.jsp"></jsp:include>

静态包含不可以传递参数,而动态包含可以,静态包含适合没有大量 Java 代码的 JSP,而动态包含适合需要传递参数,且含有大量 Java 代码的 JSP。

6 简述转发和重定向的区别

// 转发
request.getRequestDispatcher("/SecondServlet?addParam=newParam").forward(request, response);
// 重定向     
response.sendRedirect("/WebSocket/SecondServlet");
  1. 转发只访问服务器一次,而重定向访问服务器两次;
  2. 转发页面的 URL 不会改变,而重定向地址会改变;
  3. 转发只能转发到自己的 web 应用内,重定向可以重定义到任意资源路径;
  4. 转发时两个文件属于同一次请求,所以共用一个 request 域;而重定向会产生一个新的请求,所以无法共享之前的 request 域信息;

可以这么理解:

转发相当于,张三向你借钱,但是你兜里没钱,所以你去找李四借到钱之后借给张三。对于张三而言并不知道你的钱是和李四借的。

重定向相当于,张三向你借钱,你兜里没钱,你告诉他李四有钱,所以张三再次去找李四借钱。

7 简述 JSP 的生命周期

JSP 生命周期定义了 JSP 从创建到销毁的整个过程。JSP 与Servlet 生命周期类似,不同的是,JSP 需要先被编译成 Servlet。

JSP 生命周期阶段如下:

  1. 编译:JSP 通过 servlet 容器编译生成 servlet 类;
  2. 初始化:加载该类,创建其实例,并调用它的初始化方法;
  3. 处理请求:利用该实例处理请求;
  4. 销毁:销毁该实例。

 

4 Servlet

简述 Servlet 的定义

Servlet 是运行在服务器上的一个 Java 程序,它可以接收客户端发送过来的请求,并响应数据给客户端。

JSP 是 Servlet 技术的扩展,本质上是 Servlet 的简易方式,更强调应用的外表表达。JSP 侧重于视图,Servlet 主要用于控制逻辑。

2 简述 Servlet 的生命周期

  1. 初始化:Web 容器加载 Servlet,调用初始化方法,且只会在第一次访问 Servlet 程序时调用;
  2. 处理请求:利用该实例处理请求,每次访问 Servlet 程序时都会调用;
  3. 销毁:销毁该程序。

3 简述 HttpServletRequest 类

只要有请求进入Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 HttpServletRequest 对象中,我们可以通过该对象,获取到所有请求的信息。

4 简述 HttpServletResponse 类

HttpServletResponse 类和 HttpServletRequest 类一样。每次请求进来,Tomcat 服务器都会创建一个Response 对象传递给 Servlet 程序去使用。HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息,我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse 对象来进行设置。

5 简述 url 地址到 Servlet 程序的访问

我们在浏览器的Tomcat服务器主页上的 url 地址添加后缀/hello,实际上,我们在 web.xml 这个 XML 配置文件中已经配置好了/hello与 TestHelloServlet 这个类的映射,所以,才有了前端与后端之间的连接。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值