目录

JSP面试问题(JSP Interview Questions)

亲爱的读者,这些JSP Interview Questions专门设计用于让您熟悉在JSP主题面试中可能遇到的问题的本质。 根据我的经验,很好的面试官在你的面试中几乎不打算问任何特定的问题,通常问题从这个主题的一些基本概念开始,然后他们继续基于进一步的讨论和你回答的问题 -

JavaServer Pages(JSP)是一种用于开发支持动态内容的Web页面的技术,它可以帮助开发人员通过使用特殊的JSP标记在HTML页面中插入Java代码,其中大部分以

JSP提供了以下列出的几个优点 -

  • 性能明显更好,因为JSP允许在HTML页面中嵌入动态元素。

  • JSP总是在服务器处理之前进行编译,这与CGI/Perl不同,后者要求服务器在每次请求页面时加载解释器和目标脚本。

  • JavaServer Pages构建于Java Servlets API之上,因此与Servlet一样,JSP也可以访问所有强大的Enterprise Java API,包括JDBC,JNDI,EJB,JAXP等。

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

JSP的优点是双重的。

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

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

编写(和修改!)常规HTML比使用大量生成HTML的println语句更方便。 其他优点是 -

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

  • 平台独立性。

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

  • 服务器端编程功能。

SSI实际上仅用于简单包含,而不是用于使用表单数据,进行数据库连接等的“真实”程序。

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

当然,常规HTML不能包含动态信息。

JSP生命周期包括以下步骤 -

  • Compilation - 当浏览器要求JSP时,JSP引擎首先检查是否需要编译页面。 如果页面从未编译过,或者自上次编译后JSP已被修改,则JSP引擎将编译该页面。

    编译过程包括三个步骤 -

    • 解析JSP。

    • 将JSP转换为servlet。

    • 编译servlet。

  • Initialization - 当容器加载JSP时,它会在为任何请求提供服务之前调用jspInit()方法

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

  • Cleanup - JSP生命周期的销毁阶段表示从容器中删除JSP的时间.jspDestroy()方法是servlet的destroy方法的JSP等价物。

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

以下是Scriptlet的语法 -

<% code fragment %>

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

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

JSP表达式元素包含一个脚本语言表达式,该表达式被计算,转换为String,并插入表达式出现在JSP文件中的位置。

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

它的语法是 -

<%= expression %>

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

以下是JSP注释的语法 -

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

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

<%@ directive attribute = "value" %>

类型指令标签如下 -

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

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

  • 《%@ taglib ... %》 - 声明包含页面中使用的自定义操作的标记库。

JSP操作使用XML语法中的构造来控制servlet引擎的行为。 您可以动态插入文件,重用JavaBeans组件,将用户转发到另一个页面,或为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表达式语言定义了以下文字 -

  • Boolean - true和false

  • Integer - 与Java一样

  • Floating point - 就像在Java中一样

  • String - 带单引号和双引号; “被转义为\”,“被转义为\”,\被转义为\\。

  • Null - 无效

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

Page指令包含以下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语句具有相同的功能,其行为与Java 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)启用scriptlet,表达式和声明。 如果属性的值设置为false,那么如果JSP使用任何scriptlet,表达式(非EL)或声明,则会引发转换时错误。

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

该指令的一般使用形式如下 -

<%@ include file = "relative url" >

taglib指令遵循以下语法 -

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

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

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

taglib指令遵循以下语法 -

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

  • Scope attribute - 此属性标识Action元素的生命周期。 id属性和scope属性直接相关,因为scope属性确定与id关联的对象的生命周期。 scope属性有四个可能的值:(a)页面,(b)请求,(c)会话和(d)应用程序。

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

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

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

Flush是布尔属性,用于确定包含的资源在包含之前是否刷新了缓冲区。

include directive不同, include directive在JSP页面转换为servlet时插入文件, include action在请求页面时插入文件。

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页面。 它确定浏览器的类型,并根据需要插入“对象”或“嵌入”标签。

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

scope属性标识Action元素的生命周期。 它有四个可能的值:(a)页面,(b)请求,(c)会话和(d)应用程序。

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

请求,响应,输出,会话,应用程序,配置,页面上下文,页面,例外

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

请求对象提供了获取HTTP头信息的方法,包括表单数据,cookie,HTTP方法等。

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

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

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

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

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

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

应用程序对象是生成的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页面。

此对象存储对每个请求的请求和响应对象的引用。 应用程序,配置,会话和输出对象是通过访问此对象的属性派生的。

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

此对象是对页面实例的实际引用。 它可以被认为是表示整个JSP页面的对象。

页面对象实际上是此对象的直接同义词。

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

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

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

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

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

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

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

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

JSP过滤器是可用于JSP编程的Java类,用于以下目的 -

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

  • 在将服务器发送回客户端之前操纵服务器的响应。

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

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

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

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

使用JSP设置cookie涉及三个步骤 -

  • Creating a Cookie object - 使用cookie名称和cookie值调用Cookie构造函数,两者都是字符串。

  • Setting the maximum age期限 - 使用setMaxAge指定cookie应该有效的时间长度(以秒为单位)。

  • Sending the Cookie into the HTTP response headers - 您可以使用response.addCookie在HTTP响应标头中添加Cookie

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

删除cookie非常简单。 如果您想删除cookie,那么您只需要按照以下三个步骤进行操作 -

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

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

  • 将此cookie添加回响应头。

会话管理可以通过以下方式实现 -

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

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

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

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

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

  • The session Object -JSP利用servlet提供的HttpSession接口,该接口提供了一种在多个页面请求中识别用户或访问网站并存储有关该用户的信息的方法。

完成用户的会话数据后,您有多种选择 -

  • Remove a particular attribute - 您可以调用public void removeAttribute(String name)方法来删除与特定键关联的值。

  • Delete the whole session - 您可以调用public void invalidate()方法来丢弃整个会话。

  • Setting Session timeout - 您可以调用public void setMaxInactiveInterval(int interval)方法来单独设置会话的超时。

  • Log the user out - 支持servlet 2.4的服务器,您可以调用logout将客户端记录到Web服务器之外,并使属于所有用户的所有会话无效。

  • web.xml Configuration - 如果您使用的是Tomcat,除了上述方法之外,您还可以在web.xml文件中配置会话超时,如下所示。

要上传单个文件,您应该使用带有属性type =“file”的单个标记。要允许多个文件上载,请包含多个具有不同name属性值的输入标记。

您可以在程序中对此进行硬编码,也可以使用外部配置(例如web.xml中的context-param元素)添加此目录名称。

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

元素将包含客户机请求信息的请求对象从一个JSP文件转发到另一个文件。 目标文件可以是HTML文件,另一个JSP文件或servlet,只要它与转发JSP文件位于相同的应用程序上下文中即可。

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

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

要实现命中计数器,您可以使用Application Implicit对象和相关方法getAttribute()和setAttribute()。

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

您可以按照以下步骤 -

  • 使用单个计数定义数据库表,让我们说hitcount。 为其分配零值。

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

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

  • 显示hitcount的新值作为总页数命中数。

  • 如果要计算所有页面的命中数,请为所有页面实现上述逻辑。

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

JSP为您提供了一种机制,您可以通过这种机制创建一个网页,使其在给定的时间间隔后自动刷新。

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

public void setIntHeader(String header, int headerValue)

此方法将标题“Refresh”发送回浏览器以及一个整数值,该值表示以秒为单位的时间间隔。

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

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

JSTL标签的类型是 -

  • Core Tags

  • Formatting tags

  • SQL tags

  • XML tags

  • JSTL Functions

标记是setProperty操作的JSTL友好版本。 标记很有用,因为它评估表达式并使用结果设置JavaBean或java.util.Map对象的值。

标记从指定范围或找到变量的第一个范围(如果未指定范围)中删除变量。

标记捕获在其正文中发生的任何Throwable并可选地公开它。 它只是用于错误处理并更好地处理问题。

标记仅在表达式求值为true时计算表达式并显示其正文内容。

的工作方式类似于Java switch语句,因为它允许您在多种备选方案之间进行选择。 如果switch语句包含case语句,则标记具有标记。 一个switch语句有default子句来指定默认操作,类似的方式作为默认子句。

标记作为通过scriptlet嵌入Java for,while或do-while循环的良好替代方法而存在。

标记允许使用URL指定正确的URL请求参数,并且它执行所需的任何必要的URL编码。

标记通过提供自动URL重写将浏览器重定向到备用URL,它支持上下文相关URL,并且它支持标记。

标记将URL格式化为字符串并将其存储到变量中。 必要时,此标记会自动执行URL重写。

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

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

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

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

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

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

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

自定义标记是用户定义的JSP语言元素。 当包含自定义标记的JSP页面被转换为servlet时,标记将转换为对称为标记处理程序的对象的操作。 然后Web容器在执行JSP页面的servlet时调用这些操作。

JSP表达式语言(EL)使得可以轻松访问存储在JavaBeans组件中的应用程序数据。 JSP EL允许您创建表达式(a)算术和(b)逻辑。 JSP EL的一个简单语法是 -

 
${expr}

这里expr指定表达式本身。

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

  • pageScope - 来自页面范围的范围变量

  • requestScope - 来自请求范围的范围变量

  • sessionScope - 来自会话范围的Scoped变量

  • applicationScope - 来自应用程序范围的Scoped变量

  • param - 请求参数作为字符串

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

  • headerHTTP - 请求标头为字符串

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

  • initParam - 上下文初始化参数

  • cookie - Cookie值

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

我们可以禁用页面指令的isELIgnored属性 -

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

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

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

  • Runtime exceptions - 运行时异常是程序员可能已经避免的异常。 与已检查的异常相反,在编译时忽略运行时异常。

  • Errors - 这些根本不是例外,而是超出用户或程序员控制的问题。 代码中通常会忽略错误,因为您很少对错误做任何事情。 例如,如果发生堆栈溢出,则会出现错误。 它们在编译时也被忽略。

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

示例:

如果在请求处理期间遇到未捕获的异常,它会将浏览器重定向到JSP页面error.jsp。 在error.jsp中,必须使用指令指示它是一个错误处理页面:

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

本地化意味着向网站添加资源以使其适应特定的地理或文化区域,例如印地语翻译到网站。

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

是JSP注释,JSP引擎会忽略它。

是HTML注释,浏览器会忽略它。

是。 JSP技术可通过开发自定义操作或标记进行扩展,这些操作或标记封装在标记库中。

应始终使用JSP include directive包含静态资源。 这样,包含在翻译阶段仅执行一次。 请注意,您应始终提供文件属性的相对URL。 虽然您也可以使用该操作包含静态资源,但这是不可取的,因为随后会对每个请求执行包含。

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

使用以下方法将请求从一个servlet传递到另一个servlet或从一个jsp传递到另一个servlet -

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

  • 使用response.sendRedirect方法。

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

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

Using <%jsp:param> tag.

We can override jspinit() and jspDestroy() methods but not _jspService().

_jspService() method will be written by the container hence any methods which are not to be overridden by the end user are typically written starting with an '_'. This is the reason why we don't override _jspService() method in any JSP page.

It causes compilation error, as two variables with same name can't be declared. This happens because, when a page is included statically, entire code of included page becomes part of the new page. at this time there are two declarations of variable 'a'. Hence compilation error.

Scripting is disabled by setting the scripting-invalid element of the deployment descriptor to true. It is a subelement of jsp-property-group. Its valid values are true and false. The syntax for disabling scripting is as follows −

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

If we want to make our data available to the entire application then we have to use application scope.

In JSP, we can perform inclusion in the following ways −

  • By include directive − For example −

<%@ include file = ”header.jsp” %>
  • By include action − For example −

<%@ include file = ”header.jsp” %>
  • By using pageContext implicit object For example −

<% pageContext.include(“/header.jsp”); %>
  • By using RequestDispatcher object − For example −

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

JSP engines will always instantiate a new tag handler instance every time a tag is encountered in a JSP page. A pool of tag instances are maintained and reusing them where possible. When a tag is encountered, the JSP engine will try to find a Tag instance that is not being used and use the same and then release it.

JavaBeans and taglib fundamentals were introduced for reusability. But following are the major differences between them −

  • Taglibs are for generating presentation elements while JavaBeans are good for storing information and state.

  • Use custom tags to implement actions and JavaBeans to present information.

接下来是什么? (What is Next ?)

此外,您可以查看您对该主题所做的过去作业,并确保您能够自信地说出这些作业。 如果你更新鲜,那么面试官不会指望你会回答非常复杂的问题,而是你必须使你的基本概念非常强大。

↑回到顶部↑
WIKI教程 @2018