1

我在 web.xml 中的所有 JSP 中都禁用了 scriptlet:

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

但是我需要导入一些像这样使用的自定义标签库:

<%@ taglib prefix="utils" uri="/tags-utils" %>

如何在不使用 scriptlet 的情况下导入它?另外,如何避免使用以下内容?

<%@ page language="java" contentType="text/html; charset=UTF-8" %>

删除 scriptlet 的决定是为了避免由多个开发人员编写的项目中的 scriptlet 混乱。

如果不使用 scriptlet 就无法更改导入,那么我将如何禁用它以用于除<%@ taglibor 之外的任何用途<%@ page

试图从

<%@ taglib prefix="s" uri="/struts-tags" %>

<jsp:directive.tagLib prefix="s" uri="struts-tags" />

但是 Servlet 给我一个错误:

[org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/portal].[jsp]] (http-localhost-127.0.0.1-80-3) Servlet.service() for servlet jsp throw exception: org.apache.jasper.JasperException: /index.jsp(2,18) <jsp:directive.tag 指令只能在标签文件中使用

我还有什么需要做的吗?

4

2 回答 2

2

JSP 2.2 规范

用于 JSP 语法的 JSP 1.3.10.1 EBNF 语法

ScriptlessBody ::= ( ( ‘&lt;%--’ JSPCommentBody )
                   | ( ‘&lt;%@’ DirectiveBody )
                   | ( ‘&lt;jsp:directive.’ XMLDirectiveBody )
                   | ( ‘&lt;%!’ <TRANSLATION_ERROR> )
                   | ( ‘&lt;jsp:declaration’ <TRANSLATION_ERROR> )
                   | ( ‘&lt;%=’ <TRANSLATION_ERROR> )
                   | ( ‘&lt;jsp:expression’ <TRANSLATION_ERROR> )
                   | ( ‘&lt;%’ <TRANSLATION_ERROR> )
                   | ( ‘&lt;jsp:scriptlet’ <TRANSLATION_ERROR> )
                   | ( ‘${‘ ELExpressionBody )
                   | ( ‘#{‘ ELExpressionBody )
                   | ( ‘&lt;jsp:text’ XMLTemplateText )
                   | ( ‘&lt;jsp:’ StandardAction )
                   ( ( ‘&lt;/’ ExtraClosingTag )
                   | ( ‘&lt;‘ CustomAction CustomActionBody )
                   | TemplateText
                   )*

所以,当scripting-invalid=true

非法的

<%
<%!
<%=
<jsp:scriptlet
<jsp:declaration
<jsp:expression

合法的

<%@
<jsp:directive.
<jsp:

以下是合法的:

 <%@ taglib prefix="utils" uri="/tags-utils" %>

只要“app context uri”+“/tags-utils”(taglib 的上下文相对路径)映射到“taglib absolute uri”。

或者,您可以尝试:

 <%@ taglib prefix="utils" uri="http://www.mycorp/utiltags" %>  // use your absolute taglib URI

或者

 <%@ taglib prefix="utils" uri="uri_path_relative_to_jsp_uri" %>  // no leading "/"

或者

 <%@ taglib prefix="utils" tagdir="/WEB-INF/tags" %> // include subdir if approp

发明如下。没有jsp:directive.tagLib定义标签。不要使用。

 <jsp:directive.tagLib prefix="s" uri="struts-tags" />

代替:

 <%@ page language="java" contentType="text/html; charset=UTF-8" %>

尝试:

 <%@ page contentType="text/html; charset=UTF-8" %>  // language is for scriptlets
于 2013-05-08T02:08:55.120 回答
-1

<%@taglib并且<%@page是指令,而不是小脚本。

Scriptlet 会有<%.

或者你可以这样写

<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />
于 2012-12-08T18:49:25.103 回答