"jsp"标签库顶级域名在哪里?



在特殊情况下,我需要在Java类中制作与<jsp:useBean相同的内容。

听起来使用org.apache.commons.beanutils.BeanUtils.cloneBean(Object bean(就可以完成这项工作。

但让我抓狂的是,我找不到与<jsp:标签相关的TLD,也找不到<jsp:useBean使用的类。

即使是谷歌上的<short-name>jsp</short-name>也没有给我任何东西。我发现的JSP规范让我相信它不像其他标签那样是一个标签,<jsp:useBean背后的代码是Java的核心。

我说得对吗?我错过什么了吗?

JSP页面中没有<jsp:元素的TLD。这些元素是JSP语言的一部分。使用这种语言可以创建JSP页面,但如果需要使用像JSTL这样的自定义TLD,则应该使用taglib指令。

JSP的有趣之处在于:它现在被称为JakartaServerPages。您可以在What is JSP?雅加达服务器页面介绍。

JSP是最初的Java web技术之一,目前仍被servlet和JSTL广泛使用。以下是如何使用Jakarta Server Pages构建连接到Java后端的动态网页。

<jsp:useBean>是一个操作标记,而不是标记库的一部分。https://en.wikipedia.org/wiki/Jakarta_Server_Pages#Syntax,向下滚动到";附加标签";。

该代码可能是当时J2EE的一部分,或者在servlet容器中。今天,它显然是一个eclipse项目:https://projects.eclipse.org/projects/ee4j.jsp.

<jsp:useBean>实际上是"JSP服务器标记标签"服务器在JSP规范服务器中知道">;标签";您正在考虑的是标准标记库c:f:是使用TLD标记库描述符(存储在要作为资源加载的jar包中(的资源;自定义标签";API系统。

自定义标记不需要在.jar中,必须将它们放在/webapplication/WEB-INF/tags/中,这些标记通常与操作类似于包含标记文件的非编程标记相关联。jar封装的标签位于文件夹结构/webapplication*/META-INF/tags/*中。任何标签所在的位置都需要在包顶部目录中的类似XML标记的.tld文件中命名为其完整路径。

如果您对bean的需求很简单,那么您可以直接将代码添加到JSP中。要了解我的意思,请查看从JSP生成的Servlet。每个JSP都被翻译成Servlet。例如,考虑下面的JSP。

<jsp:useBean id="myList" class="java.util.ArrayList"/>
${myList.add("My first element")}
<%myList.add("My second element");%>
${myList}

翻译(在Tomcat的工作文件夹中(是

java.util.ArrayList myList = null;
myList = (java.util.ArrayList) _jspx_page_context.getAttribute("myList", jakarta.servlet.jsp.PageContext.PAGE_SCOPE);
if (myList == null){
myList = new java.util.ArrayList();
_jspx_page_context.setAttribute("myList", myList, jakarta.servlet.jsp.PageContext.PAGE_SCOPE);
}
out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${myList.add("My first element")}", java.lang.String.class, (jakarta.servlet.jsp.PageContext)_jspx_page_context, null));
myList.add("My second element");
out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${myList}", java.lang.String.class, (jakarta.servlet.jsp.PageContext)_jspx_page_context, null));

useBean操作标记只创建一个脚本变量并设置一个作用域变量。你可以在没有任何特殊标签的情况下做到这一点。下面的JSP也做同样的事情。

<%@ page import="java.util.ArrayList"%>
<%
ArrayList myList2 = new ArrayList();
myList2.add("one");
pageContext.setAttribute("myList2", myList2);
%>
${myList2}
<%=myList2%>