JSP - 面试问题



尊敬的读者,这些JSP 面试问题专门设计用于帮助您熟悉在 JSP 相关面试中可能遇到的问题类型。根据我的经验,优秀的访谈者在面试期间很少会计划提出特定的问题,通常是从主题的一些基本概念开始,然后根据后续讨论和您的回答继续提问。

JavaServer Pages (JSP) 是一种用于开发支持动态内容的网页的技术,它帮助开发人员通过使用特殊的 JSP 标签将 Java 代码插入 HTML 页面,大多数标签以 <% 开头,以 %> 结尾。

JSP 提供如下所示的几个优点:

  • 性能显著提高,因为 JSP 允许在 HTML 页面本身中嵌入动态元素。

  • 与 CGI/Perl 不同,JSP 在服务器处理之前始终会被编译,CGI/Perl 每次请求页面时都需要服务器加载解释器和目标脚本。

  • JavaServer Pages 建立在 Java Servlet API 之上,因此与 Servlet 一样,JSP 也能够访问所有强大的企业级 Java API,包括 JDBC、JNDI、EJB、JAXP 等。

  • JSP 页面可以与处理业务逻辑的 Servlet 结合使用,这是 Java Servlet 模板引擎支持的模型。

JSP 的优势有两个方面。

首先,动态部分是用 Java 编写的,而不是 Visual Basic 或其他特定于 MS 的语言,因此它功能更强大,也更容易使用。

其次,它可以移植到其他操作系统和非 Microsoft Web 服务器。

编写(和修改!)普通的 HTML 比使用大量 println 语句生成 HTML 更方便。其他优点包括:

  • 在 HTML 页面中嵌入 Java 代码。

  • 平台独立性。

  • 创建数据库驱动的 Web 应用程序。

  • 服务器端编程功能。

SSI 实际上只适用于简单的包含,不适用于使用表单数据、建立数据库连接等“真实”程序。

JavaScript 可以在客户端动态生成 HTML,但几乎无法与 Web 服务器交互以执行数据库访问和图像处理等复杂任务。

当然,普通的 HTML 无法包含动态信息。

JSP 的生命周期包括以下步骤:

  • 编译 - 当浏览器请求 JSP 时,JSP 引擎首先检查是否需要编译页面。如果页面从未被编译过,或者自上次编译以来 JSP 发生了修改,JSP 引擎就会编译页面。

    编译过程包括三个步骤:

    • 解析 JSP。

    • 将 JSP 转换为 Servlet。

    • 编译 Servlet。

  • 初始化 - 当容器加载 JSP 时,它会在服务任何请求之前调用 jspInit() 方法。

  • 执行 - 每当浏览器请求 JSP 并且页面已加载并初始化时,JSP 引擎就会调用 JSP 中的 _jspService() 方法。JSP 的 _jspService() 方法每次请求都会被调用一次,负责生成该请求的响应,并且该方法还负责生成对所有七种 HTTP 方法(即 GET、POST、DELETE 等)的响应。

  • 清理 - JSP 生命周期的销毁阶段表示容器正在将 JSP 从使用中移除。jspDestroy() 方法是 Servlet 的 destroy 方法在 JSP 中的等价物。

脚本片段可以包含任意数量的 JAVA 语言语句、变量或方法声明,或在页面脚本语言中有效的表达式。

以下是脚本片段的语法:

<% code fragment %>

声明声明一个或多个变量或方法,您可以在 JSP 文件中稍后的 Java 代码中使用它们。您必须在 JSP 文件中使用变量或方法之前声明它们。

<%! declaration; [ declaration; ]+ ... %>

JSP 表达式元素包含一个被求值的脚本语言表达式,该表达式被转换为字符串,并插入到 JSP 文件中表达式出现的位置。

表达式元素可以包含任何根据 Java 语言规范有效的表达式,但您不能使用分号来结束表达式。

其语法为:

<%= expression %>

JSP 注释标记 JSP 容器应忽略的文本或语句。当您想要隐藏或“注释掉”JSP 页面的一部分时,JSP 注释很有用。

以下是 JSP 注释的语法:

<%-- This is JSP comment --%>

JSP 指令会影响 Servlet 类的整体结构。它通常具有以下形式:

<%@ directive attribute = "value" %>

指令标签的类型如下:

  • <%@ page ... %> - 定义页面相关的属性,例如脚本语言、错误页面和缓冲要求。

  • <%@ include ... %> - 在翻译阶段包含一个文件。

  • <%@ taglib ... %> - 声明一个标签库,其中包含页面中使用的自定义操作。

JSP 动作使用 XML 语法中的构造来控制 Servlet 引擎的行为。您可以动态插入文件、重用 JavaBean 组件、将用户转发到另一个页面或为 Java 插件生成 HTML。

其语法如下:

<jsp:action_name attribute = "value" />

jsp:include、jsp:useBean、jsp:setProperty、jsp:getProperty、jsp:forward、jsp:plugin、jsp:element、jsp:attribute、jsp:body、jsp:text

字面量是作为程序代码的一部分按字面写出的值,例如数字或文本字符串。JSP 表达式语言定义了以下字面量:

  • 布尔值 - true 和 false

  • 整数 - 与 Java 中相同

  • 浮点数 - 与 Java 中相同

  • 字符串 - 使用单引号和双引号;" 被转义为 \", ' 被转义为 \', \ 被转义为 \\。

  • 空值 - null

page 指令用于向容器提供与当前 JSP 页面相关的指令。您可以在 JSP 页面的任何位置编写页面指令。

页面指令包含以下 13 个属性。

  1. language

  2. extends

  3. import

  4. session

  5. isThreadSafe

  6. info

  7. errorPage

  8. isErrorpage

  9. contentType

  10. isELIgnored

  11. buffer

  12. autoFlush

  13. isScriptingEnabled

buffer 属性指定服务器输出响应对象的缓冲特性。

当 buffer 设置为 “none” 时,Servlet 输出会立即定向到响应输出对象。

autoFlush 属性指定当缓冲区已满时是否应自动刷新缓冲输出,或者是否应引发异常以指示缓冲区溢出。

true(默认值)表示自动缓冲刷新,false 会引发异常。

contentType 属性设置 JSP 页面的字符编码和生成的响应页面的字符编码。默认内容类型为 text/html,这是 HTML 页面的标准内容类型。

errorPage 属性告诉 JSP 引擎如果当前页面运行时发生错误,要显示哪个页面。errorPage 属性的值是相对 URL。

isErrorPage 属性指示当前 JSP 是否可以作为另一个 JSP 的错误页面。

isErrorPage 的值可以是 true 或 false。isErrorPage 属性的默认值为 false。

extends 属性指定生成的 Servlet 必须扩展的超类。

import 属性的作用与 Java import 语句相同,行为也类似。import 选项的值是要导入的包的名称。

info 属性允许您提供 JSP 的描述。

isThreadSafe 选项将页面标记为线程安全的。默认情况下,所有 JSP 都被认为是线程安全的。如果将 isThreadSafe 选项设置为 false,JSP 引擎将确保一次只有一个线程正在执行您的 JSP。

language 属性指示在 JSP 页面脚本编写中使用的编程语言。

session 属性指示 JSP 页面是否使用 HTTP 会话。true 表示 JSP 页面可以访问内置会话对象,false 表示 JSP 页面无法访问内置会话对象。

isELIgnored 选项使您能够禁用表达式语言 (EL) 表达式的求值。

属性的默认值为 true,这意味着表达式 ${...} 将根据 JSP 规范进行求值。如果属性设置为 false,则表达式不会被求值,而是被视为静态文本。

isScriptingEnabled 属性确定是否允许使用脚本元素。

默认值 (true) 启用脚本片段、表达式和声明。如果属性的值设置为 false,则如果 JSP 使用任何脚本片段、表达式(非 EL)或声明,则会引发翻译时错误。

include 指令用于在翻译阶段包含文件。此指令告诉容器在翻译阶段将其他外部文件的内容与当前 JSP 合并。您可以在 JSP 页面的任何位置编写 include 指令。

此指令的一般用法形式如下:

<%@ include file = "relative url" >

taglib 指令遵循以下语法:

<%@ taglib uri = "uri" prefix = "prefixOfTag">

uri 属性值解析为容器理解的位置

prefix 属性通知容器哪些标记位是自定义操作。

taglib 指令遵循以下语法:

<%@ taglib uri = "uri" prefix = "prefixOfTag" >
  • Id 属性 - id 属性唯一标识 Action 元素,并允许在 JSP 页面中引用该操作。如果 Action 创建了一个对象实例,则可以使用 id 值通过隐式对象 PageContext 来引用它。

  • Scope 属性 - 此属性标识 Action 元素的生命周期。id 属性和 scope 属性直接相关,因为 scope 属性决定了与 id 关联的对象的生命周期。scope 属性有四个可能的值:(a) page,(b) request,(c) session 和 (d) application。

此操作允许您将文件插入到正在生成的页面中。语法如下所示:

<jsp:include page = "relative URL" flush = "true" />

其中page 是要包含的页面的相对 URL。

Flush 是一个布尔属性,它决定了在包含之前是否刷新包含资源的缓冲区。

include 指令(在将 JSP 页面转换为 servlet 时插入文件)不同,include 操作在请求页面时插入文件。

useBean 操作非常通用。它首先利用 id 和 scope 变量搜索现有的对象。如果找不到对象,则尝试创建指定的对象。

加载 bean 的最简单方法如下所示:

<jsp:useBean id = "name" class = "package.class" />

setProperty 操作设置 Bean 的属性。在此操作之前必须已定义 Bean。

getProperty 操作用于检索给定属性的值并将其转换为字符串,最后将其插入输出。

forward 操作终止当前页面的操作并将请求转发到另一个资源,例如静态页面、另一个 JSP 页面或 Java Servlet。

此操作的简单语法如下所示:

<jsp:forward page = "Relative URL" />

plugin 操作用于将 Java 组件插入 JSP 页面。它确定浏览器的类型并根据需要插入<object> 或<embed> 标记。

如果所需的插件不存在,它将下载插件,然后执行 Java 组件。Java 组件可以是 Applet 或 JavaBean。

scope 属性标识 Action 元素的生命周期。它有四个可能的值:(a) page,(b) request,(c) session 和 (d) application。

JSP 隐式对象是在每个页面中 JSP 容器提供给开发人员的 Java 对象,开发人员可以直接调用它们,而无需显式声明。JSP 隐式对象也称为预定义变量。

request、response、out、session、application、config、pageContext、page、Exception

request 对象是 javax.servlet.http.HttpServletRequest 对象的一个实例。每次客户端请求页面时,JSP 引擎都会创建一个新的对象来表示该请求。

request 对象提供方法来获取 HTTP 标头信息,包括表单数据、cookie、HTTP 方法等。

使用 HttpServletRequest 的 getHeaderNames() 方法读取 HTTP 标头信息。此方法返回一个包含与当前 HTTP 请求关联的标头信息的 Enumeration。

response 对象是 javax.servlet.http.HttpServletRequest 对象的一个实例。就像服务器创建 request 对象一样,它也会创建一个对象来表示对客户端的响应。

response 对象还定义了处理创建新 HTTP 标头的接口。通过此对象,JSP 程序员可以添加新的 cookie 或日期戳、HTTP 状态代码等。

out 隐式对象是 javax.servlet.jsp.JspWriter 对象的一个实例,用于在响应中发送内容。

JspWriter 对象包含与 java.io.PrintWriter 类的大多数相同方法。但是,JspWriter 有一些额外的方法用于处理缓冲。与PrintWriter 对象不同,JspWriter 会抛出 IOException。

session 对象是 javax.servlet.http.HttpSession 的一个实例,用于在客户端请求之间跟踪客户端会话。

application 对象是生成的 Servlet 的 ServletContext 对象的直接包装器,实际上是 javax.servlet.ServletContext 对象的一个实例。

此对象在其整个生命周期中表示 JSP 页面。在 JSP 页面初始化时创建此对象,并在 jspDestroy() 方法删除 JSP 页面时将其删除。

config 对象是 javax.servlet.ServletConfig 的一个实例,并且是生成的 servlet 的 ServletConfig 对象的直接包装器。

此对象允许 JSP 程序员访问 Servlet 或 JSP 引擎初始化参数,例如路径或文件位置等。

pageContext 对象是 javax.servlet.jsp.PageContext 对象的一个实例。pageContext 对象用于表示整个 JSP 页面。

此对象存储对每个请求的 request 和 response 对象的引用。application、config、session 和 out 对象是通过访问此对象的属性派生的。

pageContext 对象还包含有关发出到 JSP 页面的指令的信息,包括缓冲信息、errorPageURL 和页面范围。

此对象是页面的实例的实际引用。可以将其视为表示整个 JSP 页面的对象。

page 对象实际上是 this 对象的直接同义词。

exception 对象是一个包装器,包含从前一页抛出的异常。它通常用于生成对错误条件的适当响应。

GET 方法发送编码的用户信息,附加到页面请求中。页面和编码信息由 ? 字符分隔。

POST 方法以与 GET 方法完全相同的方式打包信息,但它不是在 URL 中 ? 后面发送为文本字符串,而是将其发送为单独的消息。此消息以标准输入的形式到达后端程序,您可以对其进行解析并用于处理。

JSP 使用以下方法根据情况自动处理表单数据解析:

  • getParameter() - 调用 request.getParameter() 方法获取表单参数的值。

  • getParameterValues() - 如果参数出现多次并返回多个值(例如复选框),则调用此方法。

  • getParameterNames() - 如果您想要当前请求中所有参数的完整列表,则调用此方法。

  • getInputStream() - 调用此方法读取来自客户端的二进制数据流。

JSP 过滤器是在 JSP 编程中可用于以下目的的 Java 类:

  • 在客户端访问后端资源之前拦截来自客户端的请求。

  • 在将服务器的响应发送回客户端之前对其进行操作。

过滤器在部署描述符文件 web.xml 中定义,然后映射到应用程序的部署描述符中的 servlet 或 JSP 名称或 URL 模式。

当 JSP 容器启动您的 Web 应用程序时,它会创建您在部署描述符中声明的每个过滤器的实例。过滤器按其在部署描述符中声明的顺序执行。

Cookie 是存储在客户端计算机上的文本文件,它们用于各种信息跟踪目的。

Cookie 通常设置在 HTTP 标头中(尽管 JavaScript 也可以直接在浏览器上设置 cookie)。如果浏览器配置为存储 cookie,它将保留此信息,直到过期日期。如果用户将浏览器指向与 cookie 的路径和域匹配的任何页面,它将重新将 cookie 发送到服务器。

使用 JSP 设置 cookie 包括三个步骤:

  • 创建 Cookie 对象 - 使用 cookie 名称和 cookie 值(均为字符串)调用 Cookie 构造函数。

  • 设置最大年龄 - 使用 setMaxAge 指定 cookie 有效期(以秒为单位)。

  • 将 Cookie 发送到 HTTP 响应标头 - 使用 response.addCookie 将 cookie 添加到 HTTP 响应标头中。

要读取 cookie,您需要通过调用 HttpServletRequest 的 getCookies() 方法创建一个 javax.servlet.http.Cookie 对象数组。然后循环遍历数组,并使用 getName() 和 getValue() 方法访问每个 cookie 和关联的值。

删除 cookie 非常简单。如果要删除 cookie,则只需执行以下三个步骤:

  • 读取已存在的 cookie 并将其存储在 Cookie 对象中。

  • 使用setMaxAge() 方法将 cookie 年龄设置为零以删除现有 cookie。

  • 将此 cookie 添加回响应标头。

会话管理可以通过使用以下方法实现:

  • Cookie - Web 服务器可以为每个 Web 客户端分配一个唯一的会话 ID 作为 cookie,并且对于客户端的后续请求,可以使用接收到的 cookie 来识别它们。

  • 隐藏表单字段 - Web 服务器可以发送一个隐藏的 HTML 表单字段以及一个唯一的会话 ID,如下所示:

<input type = "hidden" name = "sessionid" value = "12345">

    这意味着当提交表单时,指定的名称和值将包含在 GET 或 POST 方法中。

  • URL 重写 - 在 URL 重写中,会在每个 URL 的末尾添加一些额外信息以标识会话。当禁用 cookie 时,此 URL 重写非常有用。

  • 会话对象 (The session Object) − JSP 利用 Servlet 提供的 HttpSession 接口,该接口提供了一种方法来识别跨多个页面请求或访问网站的用户,并存储有关该用户的信息。

当你完成用户会话数据后,你有几个选择 −

  • 删除特定属性 − 你可以调用 public void removeAttribute(String name) 方法来删除与特定键关联的值。

  • 删除整个会话 − 你可以调用 public void invalidate() 方法来丢弃整个会话。

  • 设置会话超时 − 你可以调用 public void setMaxInactiveInterval(int interval) 方法来单独设置会话的超时时间。

  • 注销用户 − 支持 Servlet 2.4 的服务器,你可以调用 logout 方法将客户端注销 Web 服务器并使属于所有用户的会话失效。

  • web.xml 配置 − 如果你使用 Tomcat,除了上述方法外,你还可以按照以下方式在 web.xml 文件中配置会话超时。

要上传单个文件,你应该使用单个 <input .../> 标签,其属性 type = "file"。要允许上传多个文件,请包含多个 input 标签,并为 name 属性提供不同的值。

你可以在程序中硬编码此路径,或者也可以使用外部配置(例如 web.xml 中的 context-param 元素)来添加此目录名称。

页面重定向通常用于文档移动到新位置时,我们需要将客户端发送到此新位置,或者可能是由于负载均衡或简单的随机化。

<jsp:forward> 元素将包含客户端请求信息的请求对象从一个 JSP 文件转发到另一个文件。目标文件可以是 HTML 文件、另一个 JSP 文件或 Servlet,只要它与转发 JSP 文件位于同一个应用程序上下文中。

sendRedirect 向浏览器发送 HTTP 临时重定向响应,浏览器创建新的请求以转到重定向页面。

点击计数器会告诉你网站特定页面上的访问次数。

要实现点击计数器,你可以使用 Application 隐式对象以及关联的方法 getAttribute() 和 setAttribute()。

此对象在其整个生命周期中表示 JSP 页面。在 JSP 页面初始化时创建此对象,并在 jspDestroy() 方法删除 JSP 页面时将其删除。

你可以按照以下步骤 −

  • 定义一个包含单个计数的数据库表,例如 hitcount。为其分配零值。

  • 每次点击时,读取表以获取 hitcount 的值。

  • 将 hitcount 的值增加 1,并使用新值更新表。

  • 显示 hitcount 的新值作为页面总点击次数。

  • 如果你想计算所有页面的点击次数,请为所有页面实现上述逻辑。

考虑一个网页,它显示实时游戏得分或股市状态或货币汇率。对于所有此类页面,你都需要使用浏览器的刷新或重新加载按钮定期刷新网页。

JSP 通过提供一种机制使这项工作变得容易,你可以在其中以这样一种方式创建网页,使其在给定间隔后自动刷新。

刷新网页最简单的方法是使用 response 对象的 setIntHeader() 方法。以下是此方法的签名 −

public void setIntHeader(String header, int headerValue)

此方法将标头“Refresh”与一个整数值一起发送回浏览器,该整数值指示时间间隔(以秒为单位)。

JavaServer Pages 标准标签库 (JSTL) 是一个有用的 JSP 标签集合,它封装了许多 JSP 应用程序共有的核心功能。

JSTL 支持常见的结构化任务,例如迭代和条件,用于操作 XML 文档的标签,国际化标签和 SQL 标签。它还提供了一个框架,用于将现有的自定义标签与 JSTL 标签集成。

JSTL 标签的类型如下 −

  • 核心标签 (Core Tags)

  • 格式化标签 (Formatting tags)

  • SQL 标签 (SQL tags)

  • XML 标签 (XML tags)

  • JSTL 函数 (JSTL Functions)

<c:set > 标签是 setProperty 操作的 JSTL 友好版本。该标签很有用,因为它会评估表达式并使用结果来设置 JavaBean 或 java.util.Map 对象的值。

<c:remove > 标签会从指定的范围或找到变量的第一个范围(如果未指定范围)中删除变量。

<c:catch> 标签捕获其主体中发生的任何 Throwable,并可选地公开它。简单来说,它用于错误处理并更优雅地处理问题。

<c:if> 标签评估表达式,并且仅当表达式计算结果为 true 时才显示其主体内容。

<c:choose> 的工作方式类似于 Java 的 switch 语句,因为它允许你在多个选项之间进行选择。在 switch 语句具有 case 语句的地方,<c:choose> 标签具有 <c:when> 标签。switch 语句有一个 default 子句来指定默认操作,类似地,<c:choose> 有 <otherwise> 作为 default 子句。

<c:forEach >、<c:forTokens> 标签作为嵌入 Java for、while 或 do-while 循环(通过脚本程序)的良好替代方案而存在。

<c:param> 标签允许使用 URL 指定正确的 URL 请求参数,并且它会执行所需的任何 URL 编码。

<c:redirect > 标签通过自动提供 URL 重写将浏览器重定向到备用 URL,它支持上下文相关的 URL,并且支持 <c:param> 标签。

<c:url> 标签将 URL 格式化为字符串并将其存储到变量中。此标签在必要时会自动执行 URL 重写。

JSTL 格式化标签用于格式化和显示文本、日期、时间和国际化网站的数字。以下是将 Formatting 库包含在 JSP 中的语法 −

<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>

JSTL SQL 标签库提供用于与关系数据库 (RDBMS)(例如 Oracle、mySQL 或 Microsoft SQL Server)交互的标签。

以下是将 JSTL SQL 库包含在 JSP 中的语法 −

<%@ taglib prefix = "sql" uri = "http://java.sun.com/jsp/jstl/sql" %>

JSTL XML 标签提供了一种以 JSP 为中心的创建和操作 XML 文档的方法。以下是将 JSTL XML 库包含在 JSP 中的语法。

<%@ taglib prefix = "x" uri = "http://java.sun.com/jsp/jstl/xml" %>

自定义标签是用户定义的 JSP 语言元素。当包含自定义标签的 JSP 页面转换为 Servlet 时,该标签将转换为对称为标签处理器的对象的运算。然后,当执行 JSP 页面的 Servlet 时,Web 容器将调用这些运算。

JSP 表达式语言 (EL) 使你能够轻松访问存储在 JavaBeans 组件中的应用程序数据。JSP EL 允许你创建算术和逻辑表达式。JSP EL 的简单语法如下 −

 
${expr}

此处 expr 指定表达式本身。

JSP 表达式语言支持以下隐式对象 −

  • pageScope − 页面范围内的作用域变量

  • requestScope − 请求范围内的作用域变量

  • sessionScope − 会话范围内的作用域变量

  • applicationScope − 应用程序范围内的作用域变量

  • param − 作为字符串的请求参数

  • paramValues − 作为字符串集合的请求参数

  • headerHTTP − 作为字符串的请求标头

  • headerValues − 作为字符串集合的 HTTP 请求标头

  • initParam − 上下文初始化参数

  • cookie − Cookie 值

  • pageContext − 当前页面的 JSP PageContext 对象

我们可以使用 page 指令的 isELIgnored 属性禁用它 −

<%@ page isELIgnored = "true|false" %>

如果为 true,则在静态文本或标签属性中出现 EL 表达式时将忽略它们。如果为 false,则容器将评估 EL 表达式。

  • 受检异常 (Checked exceptions) − 受检异常通常是用户错误或程序员无法预见的错误。例如,如果要打开文件但找不到该文件,则会发生异常。在编译时不能简单地忽略这些异常。

  • 运行时异常 (Runtime exceptions) − 运行时异常是在可能已被程序员避免的情况下发生的异常。与受检异常相反,运行时异常在编译时会被忽略。

  • 错误 (Errors) − 这些根本不是异常,而是超出用户或程序员控制范围的问题。在代码中通常会忽略错误,因为你很少能对错误做些什么。例如,如果发生堆栈溢出,则会发生错误。它们在编译时也会被忽略。

我们可以使用 page 指令的 errorPage 属性,以便将未捕获的运行时异常自动转发到错误处理页面。

示例:<%@ page errorPage = "error.jsp" %>

如果在请求处理过程中遇到未捕获的异常,它将把浏览器重定向到JSP页面error.jsp。在error.jsp中,必须使用以下指令指示它是一个错误处理页面:<%@ page isErrorPage="true" %>

国际化是指使网站能够提供不同版本的翻译成访问者语言或国籍的内容。

本地化是指向网站添加资源以使其适应特定的地理或文化区域,例如将网站翻译成印地语。

这是一个特定的文化或地理区域。它通常被称为语言符号后跟国家/地区符号,这两个符号之间用下划线分隔。例如,“en_US”表示美国的英语区域设置。

<%-- comment --%>是JSP注释,JSP引擎会忽略它。

<!-- comment -->是HTML注释,浏览器会忽略它。

是的。JSP技术可以通过开发自定义操作或标签(封装在标签库中)来扩展。

静态资源应始终使用JSP的include指令包含。这样,包含操作只在翻译阶段执行一次。请注意,您应该始终为file属性提供相对URL。尽管您也可以使用action包含静态资源,但这并不建议,因为包含操作会在每次请求时都执行。

是的。但是,与Servlet不同,您不需要在JSP页面中实现像doGet()或doPost()这样的特定于HTTP协议的方法。您可以通过请求隐式对象在脚本或表达式中获取表单输入元素的数据。

使用以下方法将请求的控制权从一个servlet传递到另一个servlet或从一个jsp传递到另一个jsp:

  • RequestDispatcher对象的forward方法传递控制。

  • 使用response.sendRedirect方法。

不可以。您应该只使用JSPWriter对象(以隐式对象out的形式提供给您)来回复客户端。

JSPWriter可以被视为response.getWriter()返回的流对象的缓冲版本,尽管从实现的角度来看,它并非如此。

<%@ page session = "false">

使用<%jsp:param>标签。

可以重写jspinit()和jspDestroy()方法,但不能重写_jspService()方法。

_jspService()方法将由容器编写,因此任何不希望最终用户重写的方法通常都以'_'开头。这就是为什么我们不在任何JSP页面中重写_jspService()方法的原因。

会导致编译错误,因为不能声明两个同名的变量。这是因为,当一个页面被静态包含时,包含页面的整个代码成为新页面的一部分。此时有两个变量'a'的声明。因此导致编译错误。

通过将部署描述符的scripting-invalid元素设置为true来禁用脚本。它是jsp-property-group的子元素。其有效值为true和false。禁用脚本的语法如下:

<jsp-property-group>
   <url-pattern>*.jsp</url-pattern>
   <scripting-invalid>true</scripting-invalid>
</jsp-property-group>

如果我们想让我们的数据对整个应用程序可用,那么我们必须使用应用程序范围。

在JSP中,我们可以通过以下方式执行包含:

  • 使用include指令 - 例如:

<%@ include file = ”header.jsp” %>
  • 使用include动作 - 例如:

<%@ include file = ”header.jsp” %>
  • 使用pageContext隐式对象 - 例如:

<% pageContext.include(“/header.jsp”); %>
  • 使用RequestDispatcher对象 - 例如:

<%
 RequestDispatcher rd = request.getRequestDispatcher(“/header.jsp”);
 Rd.include(request,response);
%>

JSP引擎在每次在JSP页面中遇到标签时都会实例化一个新的标签处理程序实例。会维护一个标签实例池并在可能的情况下重用它们。当遇到标签时,JSP引擎会尝试找到一个未使用的Tag实例并使用它,然后释放它。

JavaBean和taglib基础知识是为了重用而引入的。但以下是在它们之间的一些主要区别:

  • Taglib用于生成表示元素,而JavaBean适合于存储信息和状态。

  • 使用自定义标签来实现操作,使用JavaBean来呈现信息。

下一步是什么?

接下来,您可以回顾一下您之前完成的与该主题相关的作业,并确保您可以自信地谈论它们。如果您是应届毕业生,面试官并不期望您能回答非常复杂的问题,而是您必须使自己的基础概念非常牢固。

其次,如果您无法回答一些问题,实际上并不重要,重要的是您回答的任何问题,都必须自信地回答。所以在面试时要充满自信。我们在tutorialspoint祝您面试顺利,并祝您未来一切顺利。干杯:-)

jsp_questions_answers.htm
广告