“jsp”标记库TLD在哪里?

4xy9mtcn  于 2022-12-07  发布在  其他
关注(0)|答案(4)|浏览(147)

在一个特殊的情况下,我需要使Java中的类与<jsp:useBean相同。
听起来像是使用org.apache.commons.beanutils.BeanUtils.cloneBean(Object bean)就可以完成这项工作。
但让我抓狂的是,我找不到与<jsp:标记关联的TLD,也找不到<jsp:useBean使用的类。
即使是Google上的<short-name>jsp</short-name>也没有给我任何信息,JSP specs I found让我相信它不是一个像其他标签一样的标签,<jsp:useBean背后的代码是在Java的核心。
我说的对吗?我错过了什么吗?

mqkwyuun

mqkwyuun1#

JSP页中没有<jsp:元素的TLD。这些元素是JSP语言的一部分。使用此语言可以创建JSP页,但如果需要使用自定义TLD(如JSTL),则应使用taglib指令。
JSP的有趣之处在于:它现在被称为Jakarta Server Pages。您可以在文章What is JSP? Introduction to Jakarta Server Pages中阅读更多有关此内容的信息。
JSP是最早的Java Web技术之一,现在仍然广泛地与servlet和JSTL一起使用。下面介绍如何使用Jakarta Server Pages来构建连接到Java后端的动态网页。

6tqwzwtp

6tqwzwtp2#

<jsp:useBean>是一个动作标签,不是标签库的一部分,请参阅https://en.wikipedia.org/wiki/Jakarta_Server_Pages#Syntax,向下滚动到“附加标签”。
代码可能是J2EE的一部分,或者在servlet容器中。现在,它显然是一个eclipse项目:https://projects.eclipse.org/projects/ee4j.jsp

42fyovps

42fyovps3#

<jsp:useBean>实际上是“JSP服务器标记标记”“服务器在JSP规范服务器中知道”,* 您所想到的“标记”是标准标记库c:f:是使用TLD标签库描述符(存储在jar包中,作为资源加载)的资源 ,来自 * 原始“自定义标签”API系统
自定义标记不需要放在.jar中,如果不使用jar,则必须将它们放在 /webapplication/WEB-INF/tags/ 中,这些标记通常与非编程标记相关联,其操作类似于包含标记文件。jar打包的标记位于文件夹结构/webapplication
/META-INF/tags/
任何标记无论位于何处,都需要在XML标记(如包的顶级目录中的.tld文件)中命名为它们的完整路径。

vhipe2zx

vhipe2zx4#

如果您对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%>

相关问题