JSP 面试题(2025)
面向应届毕业生的 JSP 面试问题
1) 解释 JSP 并说明其用途。
JSP 代表 Java 服务器页面。它是一种独立于平台的表示层技术。它随 SUN 的 J2EE 平台提供。它们类似于 HTML 页面,但具有 Java 嵌入其中的代码片段。它们以 .jsp 扩展名保存。它们在后台使用 JSP 编译器进行编译,并从页面生成 Servlet。
2)标签库的要求是什么?
自定义标签的集合称为标签库。重复任务的处理更加轻松,并且可以在多个应用程序中重复使用以提高工作效率。它们由专注于演示而不是访问数据库或其他服务的 Web 应用程序设计人员使用。一些流行的库是字符串标签库和 Apache 显示标签库。
3)解释JSP技术。
JSP 是的标准扩展 Java 并定义在 Servlet 扩展之上。其目标是简化动态网页的管理和创建。它独立于平台,安全,并且利用 Java 作为服务器端脚本语言。
4) 解释 JSP 中的隐式对象。
由 Web 容器创建的对象,包含有关特定请求、应用程序或页面的信息,称为 隐式对象。 他们是 :
- 响应
- 例外
- 应用
- 请求
- 会议
- 页
- 输出
- 配置
- 页面上下文
5)如何防止因点击刷新按钮而导致的多次提交?
使用 Post/Redirect/Get 或 PRG 模式,可以解决此问题。
1)用户填写的表单通过POST或GET方法提交到服务器,数据库和业务模型中的状态被更新。
2) 重定向响应用于 servlet 对查看页面进行回复。
3) 浏览器使用 GET 命令加载视图,不发送任何用户数据。由于这是一个单独的 JSP 页面,因此无需多次提交。
6)JSP 技术是否可扩展?
是的,通过使用和修改标签或封装在标签库中的自定义操作,JSP 可以轻松扩展。
7)区分 response.sendRedirect(url) 和。
<jsp.forward>
元素将请求对象从一个 JSP 文件转发到另一个 JSP 文件。 Target 文件可以是 HTML、servlet 或其他 JSP 文件,但它应该与转发 JSP 文件位于同一个应用程序上下文中。
sendRedirect 向浏览器发送 HTTP 临时重定向响应。然后浏览器为重定向页面创建新请求。它会删除会话变量。
8) 如果已经在 JSP 中发送了请求属性,是否可以使用 servlet 代码访问后续请求?
请求超出范围,因此无法访问。但是,如果在 servlet 中设置了请求属性,则可以在 JSP 中访问它。
JSP 是服务器端组件,页面被转换成 Java servlet,然后执行。仅提供 HTML 代码作为输出。
9)如何在 JSP 页面中包含静态文件?
静态页面始终使用 JSP include 指令进行包含。这样,包含过程在翻译阶段执行一次。请注意,必须为文件属性提供相对 URL。虽然可以包含静态资源,但这不是首选,因为每个请求都需要包含。
10) 为什么 JComponent 有 add() 和 remove() 方法而 Component 没有?
JComponent 是 Container 的子类。它包含其他组件和 JComponent。
针对资深专业人士的 JSP 面试问题
以下是针对有经验的应聘者的 JSP 面试问题和答案:
11) 如何实现线程安全的 JSP 页面?
可以通过 SingleThreadModel 接口来实现。在 JSP 页面中添加 <%@page isThreadSafe=”false” %> 指令。
12) 如何防止 JSP 或 servlet 页面的输出被浏览器缓存?
使用适当的 HTTP 标头属性,防止 JSP 页面输出的动态内容被浏览器缓存。
13) 如何限制 JSP 页面中显示页面错误?
通过在JSP页面中设置PAGE目录的“ErrorPage”属性为错误页面的名称,然后在错误jsp页面中设置“isErrorpage=”TRUE”,可以阻止错误显示。
14)什么是 JSP 动作?
它们是 XML 标签,用于指示服务器使用 JSP 引擎的现有组件或控制行为。它们由典型的“jsp:”前缀和操作名称组成。
<jsp:include/> <jsp:getProperty/> <jsp:forward/> <jsp:setProperty/> <jsp:usebean/> <jsp:plugin/>
15)区分和 <%@include file=…>。
这两个标签都包含从一个页面到另一个页面的信息。
第一个标签充当两个 Jsp 之间的函数调用。每次客户端访问客户端页面时都会执行该标签。它对于模块化 Web 应用程序非常有用。输出中包含新内容。
文件的第二个标签内容以文本形式嵌入了类似的指令。更改的内容不包含在输出中。当多个 jsp 需要来自一个 jsp 的代码时,这很有用。
16) 可以使用构造函数代替 init() 来初始化 servlet 吗?
是的,这是可能的。但这不是首选,因为 init() 的开发是因为较早 Java 版本无法动态调用带参数的构造函数。因此它们无法分配 servletConfig。然而,如今 servlet 容器仍然只调用无参数构造函数。因此无法访问 servletContext 或 servletConfig。
17)解释生命周期方法。
1) jsplnit():容器调用此方法初始化 servlet 实例。此方法只针对 servlet 实例调用一次,并且先于其他所有方法调用。
2) _jsp服务():容器对每个请求调用此方法并将其传递给对象。
3) jspDestroy():它在实例销毁之前由容器调用。
18)解释 JSP 输出注释?
它们是可以在 HTML 源文件中查看的注释。
19)定义表达式
表达式标签用于插入 Java 值直接输出。其语法是
<%=expression%>
它包含一个脚本语言表达式,该表达式被评估,然后转换为字符串,然后插入到 JSP 文件中表达式的位置。
20)定义构图。
组合与对象的关系比聚合更强。
21) 定义 JSP Scriptlet。
它是一个包含 Java JSP 页面中的代码。它们的语法是 <% %>。每次运行程序时都会执行 scriptlet 中编写的代码。
22) 如何将一个 JSP 中的信息传递到另一个 JSP?
标签允许我们在多个 Jsp 之间传递信息。
23)解释标签。
<jsp:useBean> id="beanInstName" scope= "page | application" class="ABC.class" type="ABC.class" </jsp:useBean>
此标记创建 Java bean 的一个实例。它首先尝试查找 bean 实例是否已存在,然后将引用存储在变量中。还指定了类型;否则,它会从指定的类中进行实例化,并将引用存储在新变量中。
24)解释运行时异常的处理。
Errorpage 属性用于取消捕获自动转发到错误处理页面的运行时异常。
如果在处理请求期间遇到任何未捕获的异常,它会将浏览器重定向到 JSP 页面 error.jsp。这是一个错误处理页面。
25) 为什么 _jspService() 以“_”开头,而其他生命周期方法却不以“_”开头?
jsp 页面中创建的任何内容都会被容器放入 _jspService() 方法中。如果重写该方法,编译器会给出错误,但其他两个生命周期可以轻松重写。因此 '_' 表示我们无法重写该方法。
26)解释各种范围值标签。
标签用于在 jsp 页面中使用任何 java 对象。一些范围值如下:
1)应用
2)请求
3)页面
4)会话
27) 显示 JSP 中的 2 种类型的注释。
这两种类型是:
<%–JSP Comment–%> <!–HTML comment–>
28) 静态方法可以被重写吗?
我们可以在子类中声明具有相同签名的静态方法,但这不被视为覆盖,因为不会有任何运行时多态性。因此答案是“否”。
29)解释 JSP 指令。
JSP 指令 是发送给 JSP 引擎的消息。它们充当从页面到容器的消息,并控制整个页面的处理。它们可以像类声明一样设置全局值。它们不产生输出,并包含在 <%@….%> 中
30)解释 pge 指令。
页面指令向 JSP 引擎告知页面从环境接收的标头和设施。它位于所有 JSP 页面的顶部。其语法为 <%@ page attribute=”value”>
31) 显示页面指令的属性。
- 会议: 它显示会话数据是否可用于页面。
- 进口: 它显示了已导入的包。
- 是否被忽略: 它显示当 JSP 转换为 小服务程序.
- 内容类型: 它允许用户指定页面的内容类型。
32)什么是 Include 指令?
include 指令将资源的内容静态插入到当前 JSP 中。它有助于重用代码而不重复。并在翻译时包含文件的内容。其语法如下 <%@ include file=”Filename”%>
.
33) JSP 中的标准动作是什么?
它们会影响页面的整体运行时行为以及发送给客户端的响应。它们用于在请求时包含文件,以实例化 JavaBean 或查找一个。它们还用于生成特定于浏览器的代码或将请求转发到新页面。
34) 解释 jsp:setProperty 动作。
它用于为预先引用的 bean 的属性赋值。
…
<jsp:setProperty name=”ABC” property=”myProperty”…
即使实例化了新的 bean 或者找到了现有的 bean,也会执行 jsp:setproperty。
通过增加在代码的末尾,执行条件被反转,即,如果找到现有对象则不执行,只有实例化了新对象才执行。
35)定义静态块。
它用于启动静态数据成员。它在类加载之前执行。
36)解释 jsp:plugin 动作。
此操作有助于在浏览器中插入特定对象或嵌入指定小程序运行所需的元素 Java 插件。
37)解释客户端和服务器端验证。
Javascript 用于客户端验证。它在浏览器中进行。 Javascript 用于在验证成功时提交表单数据。验证错误不需要额外的网络行程,因为无法提交表单。
提交后,服务器也会进行验证。如果验证失败,则需要额外的网络行程将表单重新发送到客户端。
38)什么是翻译阶段?
JSP 引擎将 JSP 文件翻译并编译为 servlet。此 servlet 进入执行阶段,在此阶段处理请求和响应。除非事先手动编译,否则它们会在首次访问时进行编译。手动或显式编译对于冗长而复杂的程序很有用。
39) 从 JSP 页面执行浏览器重定向。
<% response.sendRedirect(URL); %>
或者我们可以按如下方式更改 HTTP 标头属性的位置:
<% response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); response.setHeader(URL); %>
40)给出对象克隆的用途。
对象克隆用于通过输入相同的代码或使用其他各种技术来创建对象的精确副本。
41)如何将请求转发到另一个来源。
<jsp:forward page="/Page2.jsp" />
42) 如何防止 JSP 页面自动创建会话?
JSP 页面会自动为请求创建会话。通过输入以下内容,可以避免这种情况。
<%@ page session=”false” %>
43) 如何避免 JSP 中的 scriptlet 代码?
Java可以使用 Bean 或自定义标签来代替脚本代码。
44) 解释 jspDestroy() 方法。
每当 JSP 页面即将被销毁时,容器都会从 javax.servlet.jsp.JspPage 接口调用 jspDestroy() 方法。Servlet 的销毁方法与此类似。它可以轻松被覆盖以执行清理,例如关闭数据库连接时。
45)解释行动。
它是与包含或转发标准操作一起使用的操作。它有助于将参数名称和值传递给资源。
46)解释静态方法。
静态方法是类的,而不是类的对象。无需类实例即可调用。静态成员也可以访问静态数据并更改其值。
47) 如何禁用脚本?
通过将部署描述符中的 scripting-invalid 元素设置为 true,可以轻松禁用脚本。它是属性组的子元素。它也可以为 false。
48)定义 JSP 声明。
JSP 声明是用于声明变量的标签。它们包含在 <%!%> 标签中。它们用于声明函数和变量。
<%@page contentType=”text/html” %> <html> <body> <%! int a=0; private int getCount(){ a++; return a; }%> <p>Values of a are:</p> <p><%=getCount()%></p> </body> </html>
49) 如何防止 HTML 输出被缓存?
<% response.setHeader("Cache-Control", "no=store"); response.setDateHeader("Expires", 0); %>
50) JSP 比 Servlet 技术有哪些优点?
JSP 是服务器端的一种技术,用于简化内容生成。它们以文档为中心,而 servlet 是程序。 Java 服务器页面可以包含 Java 程序,执行并实例化 Java 类。但是,它们出现在 HTML 模板文件内。它为 Web 应用程序的开发提供了框架。
这些面试问题也会对你的口试有帮助