You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2022/10/19 13:32:07 UTC

[tomcat] 04/08: Remove singleThreaded support - align with JSP 4.0

This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 102e4cd26c9eeb116617d1b6c6821b37a028ece8
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Wed Oct 19 12:05:05 2022 +0100

    Remove singleThreaded support - align with JSP 4.0
---
 java/org/apache/jasper/compiler/Generator.java     | 13 +---------
 java/org/apache/jasper/compiler/PageInfo.java      | 28 ----------------------
 java/org/apache/jasper/compiler/Validator.java     |  8 -------
 .../jasper/resources/LocalStrings.properties       |  3 ---
 .../jasper/resources/LocalStrings_es.properties    |  2 --
 .../jasper/resources/LocalStrings_fr.properties    |  3 ---
 .../jasper/resources/LocalStrings_ja.properties    |  3 ---
 .../jasper/resources/LocalStrings_ko.properties    |  3 ---
 .../jasper/resources/LocalStrings_zh_CN.properties |  3 ---
 test/org/apache/jasper/compiler/TestGenerator.java |  5 ----
 test/webapp/jsp/generator/single-threaded.jsp      | 17 -------------
 11 files changed, 1 insertion(+), 87 deletions(-)

diff --git a/java/org/apache/jasper/compiler/Generator.java b/java/org/apache/jasper/compiler/Generator.java
index af6f9fc1af..158cfb5f1e 100644
--- a/java/org/apache/jasper/compiler/Generator.java
+++ b/java/org/apache/jasper/compiler/Generator.java
@@ -52,8 +52,6 @@ import org.apache.jasper.TrimSpacesOption;
 import org.apache.jasper.compiler.Node.ChildInfoBase;
 import org.apache.jasper.compiler.Node.NamedAttribute;
 import org.apache.jasper.runtime.JspRuntimeLibrary;
-import org.apache.juli.logging.Log;
-import org.apache.juli.logging.LogFactory;
 import org.xml.sax.Attributes;
 
 /**
@@ -79,8 +77,6 @@ import org.xml.sax.Attributes;
 
 class Generator {
 
-    private final Log log = LogFactory.getLog(Generator.class); // must not be static
-
     private static final Class<?>[] OBJECT_CLASS = { Object.class };
 
     private static final Pattern PRE_TAG_PATTERN = Pattern.compile("(?s).*(<pre>|</pre>).*");
@@ -757,14 +753,7 @@ class Generator {
         genPreambleMethods();
 
         // Now the service method
-        if (pageInfo.isThreadSafe()) {
-            out.printin("public void ");
-        } else {
-            // This is unlikely to perform well.
-            out.printin("public synchronized void ");
-            // As required by JSP 3.1, log a warning
-            log.warn(Localizer.getMessage("jsp.warning.isThreadSafe", ctxt.getJspFile()));
-        }
+        out.printin("public void ");
         out.print(serviceMethodName);
         out.println("(final jakarta.servlet.http.HttpServletRequest request, final jakarta.servlet.http.HttpServletResponse response)");
         out.pushIndent();
diff --git a/java/org/apache/jasper/compiler/PageInfo.java b/java/org/apache/jasper/compiler/PageInfo.java
index b0c5832ae1..2d24d98427 100644
--- a/java/org/apache/jasper/compiler/PageInfo.java
+++ b/java/org/apache/jasper/compiler/PageInfo.java
@@ -62,8 +62,6 @@ class PageInfo {
     private int buffer = 8*1024;
     private String autoFlush;
     private boolean isAutoFlush = true;
-    private String isThreadSafeValue;
-    private boolean isThreadSafe = true;
     private String isErrorPageValue;
     private boolean isErrorPage = false;
     private String errorPage = null;
@@ -543,32 +541,6 @@ class PageInfo {
     }
 
 
-    /*
-     * isThreadSafe
-     */
-    public void setIsThreadSafe(String value, Node n, ErrorDispatcher err)
-        throws JasperException {
-
-        if ("true".equalsIgnoreCase(value)) {
-            isThreadSafe = true;
-        } else if ("false".equalsIgnoreCase(value)) {
-            isThreadSafe = false;
-        } else {
-            err.jspError(n, "jsp.error.page.invalid.isthreadsafe");
-        }
-
-        isThreadSafeValue = value;
-    }
-
-    public String getIsThreadSafe() {
-        return isThreadSafeValue;
-    }
-
-    public boolean isThreadSafe() {
-        return isThreadSafe;
-    }
-
-
     /*
      * info
      */
diff --git a/java/org/apache/jasper/compiler/Validator.java b/java/org/apache/jasper/compiler/Validator.java
index 8bf352e97e..e6d9ff2074 100644
--- a/java/org/apache/jasper/compiler/Validator.java
+++ b/java/org/apache/jasper/compiler/Validator.java
@@ -75,7 +75,6 @@ class Validator {
             new JspUtil.ValidAttribute("session"),
             new JspUtil.ValidAttribute("buffer"),
             new JspUtil.ValidAttribute("autoFlush"),
-            new JspUtil.ValidAttribute("isThreadSafe"),
             new JspUtil.ValidAttribute("info"),
             new JspUtil.ValidAttribute("errorPage"),
             new JspUtil.ValidAttribute("isErrorPage"),
@@ -161,13 +160,6 @@ class Validator {
                         err.jspError(n, "jsp.error.page.conflict.autoflush",
                                 pageInfo.getAutoFlush(), value);
                     }
-                } else if ("isThreadSafe".equals(attr)) {
-                    if (pageInfo.getIsThreadSafe() == null) {
-                        pageInfo.setIsThreadSafe(value, n, err);
-                    } else if (!pageInfo.getIsThreadSafe().equals(value)) {
-                        err.jspError(n, "jsp.error.page.conflict.isthreadsafe",
-                                pageInfo.getIsThreadSafe(), value);
-                    }
                 } else if ("isELIgnored".equals(attr)) {
                     if (pageInfo.getIsELIgnored() == null) {
                         pageInfo.setIsELIgnored(value, n, err, true);
diff --git a/java/org/apache/jasper/resources/LocalStrings.properties b/java/org/apache/jasper/resources/LocalStrings.properties
index eda546595f..9b3817f988 100644
--- a/java/org/apache/jasper/resources/LocalStrings.properties
+++ b/java/org/apache/jasper/resources/LocalStrings.properties
@@ -151,7 +151,6 @@ jsp.error.page.conflict.extends=Page directive: illegal to have multiple occurre
 jsp.error.page.conflict.info=Page directive: illegal to have multiple occurrences of ''info'' with different values (old: [{0}], new: [{1}])
 jsp.error.page.conflict.iselignored=Page directive: illegal to have multiple occurrences of ''isELIgnored'' with different values (old: [{0}], new: [{1}])
 jsp.error.page.conflict.iserrorpage=Page directive: illegal to have multiple occurrences of ''isErrorPage'' with different values (old: [{0}], new: [{1}])
-jsp.error.page.conflict.isthreadsafe=Page directive: illegal to have multiple occurrences of ''isThreadSafe'' with different values (old: [{0}], new: [{1}])
 jsp.error.page.conflict.language=Page directive: illegal to have multiple occurrences of ''language'' with different values (old: [{0}], new: [{1}])
 jsp.error.page.conflict.session=Page directive: illegal to have multiple occurrences of ''session'' with different values (old: [{0}], new: [{1}])
 jsp.error.page.conflict.trimdirectivewhitespaces=Page directive: illegal to have multiple occurrences of ''trimDirectiveWhitespaces'' with different values (old: [{0}], new: [{1}])
@@ -161,7 +160,6 @@ jsp.error.page.invalid.errorOnELNotFound=Page directive: invalid value for error
 jsp.error.page.invalid.import=Page directive: invalid value for import
 jsp.error.page.invalid.iselignored=Page directive: invalid value for isELIgnored
 jsp.error.page.invalid.iserrorpage=Page directive: invalid value for isErrorPage
-jsp.error.page.invalid.isthreadsafe=Page directive: invalid value for isThreadSafe
 jsp.error.page.invalid.scope=Invalid scope
 jsp.error.page.invalid.session=Page directive: invalid value for session
 jsp.error.page.invalid.trimdirectivewhitespaces=Page directive: invalid value for trimDirectiveWhitespaces
@@ -291,7 +289,6 @@ jsp.warning.enablePooling=Warning: Invalid value for the initParam enablePooling
 jsp.warning.engineOptionsClass=Failed to load engine options class [{0}]
 jsp.warning.fork=Warning: Invalid value for the initParam fork. Will use the default value of "true"
 jsp.warning.genchararray=Warning: Invalid value for the initParam genStringAsCharArray. Will use the default value of "false"
-jsp.warning.isThreadSafe=Warning: The "isThreadSafe" page directive attribute used in [{0}] has been deprecated and will be removed in version 4.0 of the JSP specification
 jsp.warning.jspIdleTimeout=Warning: Invalid value for the initParam jspIdleTimeout. Will use the default value of "-1"
 jsp.warning.keepgen=Warning: Invalid value for the initParam keepgenerated. Will use the default value of "false"
 jsp.warning.loadSmap=Unable to load SMAP data for class [{0}]
diff --git a/java/org/apache/jasper/resources/LocalStrings_es.properties b/java/org/apache/jasper/resources/LocalStrings_es.properties
index e213ba1a81..94f453a210 100644
--- a/java/org/apache/jasper/resources/LocalStrings_es.properties
+++ b/java/org/apache/jasper/resources/LocalStrings_es.properties
@@ -135,7 +135,6 @@ jsp.error.page.conflict.extends=Directiva Page: es ilegal tener múltiples ocurr
 jsp.error.page.conflict.info=Directiva Page: es ilegal tener múltiples ocurrencias de ''info'' con valores distintos (viejo: [{0}], nuevo: [{1}])
 jsp.error.page.conflict.iselignored=Directiva Page: es ilegal tener múltiples ocurrencias de ''isELIgnored'' con valores distintos (viejo: [{0}], nuevo: [{1}])
 jsp.error.page.conflict.iserrorpage=Directiva Page: es ilegal tener múltiples ocurrencias de ''isErrorPage'' con valores distintos (viejo: [{0}], nuevo: [{1}])
-jsp.error.page.conflict.isthreadsafe=Directiva Page: es ilegal tener múltiples ocurrencias de ''isThreadSafe'' con valores distintos (viejo: [{0}], nuevo: [{1}])
 jsp.error.page.conflict.language=Directiva Page: es ilegal tener múltiples ocurrencias de ''language'' con valores distintos (viejo: [{0}], nuevo: [{1}])
 jsp.error.page.conflict.session=Directiva Page: es ilegal tener múltiples ocurrencias de ''session'' con valores distintos (viejo: [{0}], nuevo: [{1}])
 jsp.error.page.conflict.trimdirectivewhitespaces=Directiva de página: es ilegal tener múltiples ocurrencias de ''trimDirectivewhitespaces'' con diferentes valores (viejo: [{0}], nuevo: [{1}])
@@ -144,7 +143,6 @@ jsp.error.page.invalid.deferredsyntaxallowedasliteral=Directiva de página: valo
 jsp.error.page.invalid.import=Directiva de página: valor inválido para importar
 jsp.error.page.invalid.iselignored=Directiva Page: valor inválido para isELIgnored
 jsp.error.page.invalid.iserrorpage==Directiva Page: valor incorrecto para isErrorPage
-jsp.error.page.invalid.isthreadsafe==Directiva Page: valor incorrecto para isThreadSafe
 jsp.error.page.invalid.session=Directiva Page: valor incorrecto para session
 jsp.error.page.invalid.trimdirectivewhitespaces=Directiva de página: valor inválido para trimDirectiveWhitespaces
 jsp.error.page.language.nonjava=Directiva Page: atributo language incorrecto
diff --git a/java/org/apache/jasper/resources/LocalStrings_fr.properties b/java/org/apache/jasper/resources/LocalStrings_fr.properties
index ccd403dfca..5e4bbf1cb4 100644
--- a/java/org/apache/jasper/resources/LocalStrings_fr.properties
+++ b/java/org/apache/jasper/resources/LocalStrings_fr.properties
@@ -150,7 +150,6 @@ jsp.error.page.conflict.extends=Directive de page : il est illégal d''avoir plu
 jsp.error.page.conflict.info=Directive de page : il est illégal d''avoir plusieurs occurrences de "info" avec des valeurs différentes (ancienne : [{0}], nouvelle [{1}])
 jsp.error.page.conflict.iselignored=Directive de page : il est illégal d''avoir plusieurs occurrences de "isELIgnored" avec des valeurs différentes (ancienne : [{0}], nouvelle [{1}])
 jsp.error.page.conflict.iserrorpage=Directive de page : il est illégal d''avoir plusieurs occurrences de "isErrorPage" avec des valeurs différentes (ancienne : [{0}], nouvelle [{1}])
-jsp.error.page.conflict.isthreadsafe=Directive de page : il est illégal d''avoir plusieurs occurrences de "isThreadSafe" avec des valeurs différentes (ancienne : [{0}], nouvelle [{1}])
 jsp.error.page.conflict.language=Directive de page : il est illégal d''avoir plusieurs occurrences de "language" avec des valeurs différentes (ancienne : [{0}], nouvelle [{1}])
 jsp.error.page.conflict.session=Directive de page : il est illégal d''avoir plusieurs occurrences de "session" avec des valeurs différentes (ancienne : [{0}], nouvelle [{1}])
 jsp.error.page.conflict.trimdirectivewhitespaces=Directive de page : il est illégal d''avoir plusieurs occurrences de "trimDirectiveWhitespaces" avec des valeurs différentes (ancienne : [{0}], nouvelle [{1}])
@@ -160,7 +159,6 @@ jsp.error.page.invalid.errorOnELNotFound=Directive de page: valeur invalide pour
 jsp.error.page.invalid.import=Directive de page : valeur invalide pour import
 jsp.error.page.invalid.iselignored=Directive de page : valeur invalide pour isELIgnored
 jsp.error.page.invalid.iserrorpage=Directive de Page : valeur incorrecte pour isErrorPage
-jsp.error.page.invalid.isthreadsafe=Directive de Page : valeur incorrecte pour isThreadSafe
 jsp.error.page.invalid.scope=Portée invalide
 jsp.error.page.invalid.session=Directive de Page : valeur incorrecte pour session
 jsp.error.page.invalid.trimdirectivewhitespaces=Directive de page : valeur invalide pour trimDirectiveWhitespaces
@@ -290,7 +288,6 @@ jsp.warning.enablePooling=WARNING : Valeur incorrecte pour le initParam enablePo
 jsp.warning.engineOptionsClass=Impossible de charger la classes des options du moteur [{0}]
 jsp.warning.fork=WARNING : Valeur invalide pour le paramètre d'initialisation fork, la valeur par défaut "true" sera utilisée
 jsp.warning.genchararray=WARNING : Valeur invalide pour le paramètre d'initialisation genStringAsCharArray, la valeur par défaut "false" sera utilisée
-jsp.warning.isThreadSafe=Attention: L''attribut de directive de page "isThreadSafe" utilisé dans [{0}] a été déprécié et sera retiré dans la version 4.0 de la spécification JSP
 jsp.warning.jspIdleTimeout=WARNING : Valeur invalide pour le paramètre d'initialisation jspIdleTimeout, la valeur par défaut "-1" sera utilisée
 jsp.warning.keepgen=WARNING : Valeur incorrecte pour le initParam keepgenerated. Utilisation de la valeur par défaut "false"
 jsp.warning.loadSmap=Impossible de charger les données SMAP pour la classe [{0}]
diff --git a/java/org/apache/jasper/resources/LocalStrings_ja.properties b/java/org/apache/jasper/resources/LocalStrings_ja.properties
index e93538e187..ffa98b1fa6 100644
--- a/java/org/apache/jasper/resources/LocalStrings_ja.properties
+++ b/java/org/apache/jasper/resources/LocalStrings_ja.properties
@@ -152,7 +152,6 @@ jsp.error.page.conflict.extends=Pageディレクティブ: ''extends''を異な
 jsp.error.page.conflict.info=Pageディレクティブ: ''info''を異なる値で複数回指定するのは無効です (旧: [{0}], 新: [{1}])
 jsp.error.page.conflict.iselignored=Pageディレクティブ: ''isELIgnored''を異なる値で複数回指定するのは無効です (旧: [{0}], 新: [{1}])
 jsp.error.page.conflict.iserrorpage=Pageディレクティブ: ''isErrorPage''を異なる値で複数回指定するのは無効です (旧: [{0}], 新: [{1}])
-jsp.error.page.conflict.isthreadsafe=Tagディレクティブ:  ''isThreadSafe''を異なる値で複数回指定するのは無効です (旧: [{0}], 新: [{1}])
 jsp.error.page.conflict.language=Pageディレクティブ: ''language''を異なる値で複数回指定するのは無効です (旧: [{0}], 新: [{1}])
 jsp.error.page.conflict.session=Pageディレクティブ: ''session''を異なる値で複数回指定するのは無効です (旧: [{0}], 新: [{1}])
 jsp.error.page.conflict.trimdirectivewhitespaces=Pageディレクティブ: ''trimDirectiveWhitespaces''を異なる値で複数回指定するのは無効です (旧: [{0}], 新: [{1}])
@@ -162,7 +161,6 @@ jsp.error.page.invalid.errorOnELNotFound=ページディレクティブ: errorOn
 jsp.error.page.invalid.import=Pageディレクティブ:importの値が無効です
 jsp.error.page.invalid.iselignored=Pageディレクティブ: isELIgnored の値は不正です
 jsp.error.page.invalid.iserrorpage=Pageディレクティブ: isErrorPage属性の値が無効です
-jsp.error.page.invalid.isthreadsafe=Pageディレクティブ: isThreadSafeの値が無効です
 jsp.error.page.invalid.scope=スコープが無効です
 jsp.error.page.invalid.session=Pageディレクティブ: session属性の値が無効です
 jsp.error.page.invalid.trimdirectivewhitespaces=Pageディレクティブ:trimDirectiveWhitespacesの値が無効です
@@ -292,7 +290,6 @@ jsp.warning.enablePooling=警告: initParam の enablePooling の値は無効で
 jsp.warning.engineOptionsClass=engineOptionsClass [{0}] のロードに失敗しました。
 jsp.warning.fork=警告: initParam の fork の値は無効です。既定値 "true" が使用されます
 jsp.warning.genchararray=警告: initParam の genStringAsCharArray の値は無効です。既定値 "false" が使用されます
-jsp.warning.isThreadSafe=警告: [{0}] で使用されている "isThreadSafe" ページディレクティブ属性は非推奨になり、JSP仕様バージョン4.0で削除されます
 jsp.warning.jspIdleTimeout=警告: initParam jspIdleTimeoutの値は無効です。既定値 "-1"を使用します。
 jsp.warning.keepgen=警告: initParam の keepgenerated の値は無効です。既定値 "false" が使用されます
 jsp.warning.loadSmap=クラス [{0}] のSMAPデータをロードできません
diff --git a/java/org/apache/jasper/resources/LocalStrings_ko.properties b/java/org/apache/jasper/resources/LocalStrings_ko.properties
index 7024698300..659124848c 100644
--- a/java/org/apache/jasper/resources/LocalStrings_ko.properties
+++ b/java/org/apache/jasper/resources/LocalStrings_ko.properties
@@ -149,7 +149,6 @@ jsp.error.page.conflict.extends=페이지 지시어: 다른 값들을 가지는
 jsp.error.page.conflict.info=페이지 지시어: 다른 값들을 가지는 ''info''가 여러 번 나타나는 것은 불허됩니다. (이전 값: [{0}], 신규 값: [{1}])
 jsp.error.page.conflict.iselignored=페이지 지시어: 다른 값들을 가지는 ''isELIgnored''가 여러 번 나타나는 것은 불허됩니다. (이전 값: [{0}], 신규 값: [{1}])
 jsp.error.page.conflict.iserrorpage=페이지 지시어: 다른 값들을 가지는 ''isErrorPage''가 여러 번 나타나는 것은 불허됩니다. (이전 값: [{0}], 신규 값: [{1}])
-jsp.error.page.conflict.isthreadsafe=페이지 지시어: 다른 값들을 가지는 ''isThreadSafe''가 여러 번 나타나는 것은 불허됩니다. (이전 값: [{0}], 신규 값: [{1}])
 jsp.error.page.conflict.language=페이지 지시어: 다른 값들로 ''language''가 여러 번 나타나는 것은 불허됩니다. (이전 값: [{0}], 신규 값: [{1}])
 jsp.error.page.conflict.session=페이지 지시어: ''session''이 다른 값들로 여러 번 나타나는 것은 불허됩니다. (이전 값: [{0}], 신규 값: [{1}])
 jsp.error.page.conflict.trimdirectivewhitespaces=페이지 지시어: 다른 값들을 가지는 ''trimDirectiveWhitespaces''가 여러 번 나타나는 것은 불허됩니다. (이전 값: [{0}], 신규 값: [{1}])
@@ -159,7 +158,6 @@ jsp.error.page.invalid.errorOnELNotFound=페이지 지시어: errorOnELNotFound
 jsp.error.page.invalid.import=페이지 지시어: 임포트를 위한 유효한 값이 아닙니다.
 jsp.error.page.invalid.iselignored=페이지 지시어: isELIgnored에 유효하지 않은 값
 jsp.error.page.invalid.iserrorpage=페이지 지시어: isErrorPage에 유효하지 않은 값
-jsp.error.page.invalid.isthreadsafe=페이지 지시어: isThreadSafe에 유효하지 않은 값
 jsp.error.page.invalid.scope=유효하지 않은 scope
 jsp.error.page.invalid.session=페이지 지시어: 세션을 위해 유효하지 않은 값
 jsp.error.page.invalid.trimdirectivewhitespaces=페이지 지시어: trimDirectiveWhitespaces에 유효하지 않은 값
@@ -289,7 +287,6 @@ jsp.warning.enablePooling=주의: initParam인 enablePooling에 유효하지 않
 jsp.warning.engineOptionsClass=엔진 옵션들의 클래스 [{0}]을(를) 로드하지 못했습니다.
 jsp.warning.fork=경고: initParam인 fork에 유효하지 않은 값. 기본 값인 "true"를 사용할 것입니다.
 jsp.warning.genchararray=경고: initParam인 genStringAsCharArray에 유효하지 않은 값. 기본 값인 "false"를 사용할 것입니다.
-jsp.warning.isThreadSafe=경고: [{0}]에서 사용되고 있는 "isThreadSafe" 페이지 지시어 속성은 더 이상 지원되지 않을 것이며 JSP 스펙 버전 4.0에서 완전히 사라질 것입니다.
 jsp.warning.jspIdleTimeout=경고: initParam인 jspIdleTimeout에 유효하지 않은 값. 기본값 "-1"을 사용할 것입니다.
 jsp.warning.keepgen=경고: initParam인 keepgenerated에 유효하지 않은 값. 기본 값인 "false"를 사용할 것입니다.
 jsp.warning.loadSmap=클래스 [{0}]을(를) 위한 SMAP 데이터를 로드할 수 없습니다.
diff --git a/java/org/apache/jasper/resources/LocalStrings_zh_CN.properties b/java/org/apache/jasper/resources/LocalStrings_zh_CN.properties
index 3afd804d30..ab341603ce 100644
--- a/java/org/apache/jasper/resources/LocalStrings_zh_CN.properties
+++ b/java/org/apache/jasper/resources/LocalStrings_zh_CN.properties
@@ -149,7 +149,6 @@ jsp.error.page.conflict.extends=页面指令:“ extends”非法多次出现
 jsp.error.page.conflict.info=页面指令:“ info”非法多次出现不同值(旧值: [{0}], 新值: [{1}])
 jsp.error.page.conflict.iselignored=页面指令:“ isELIgnored”非法多次出现不同值(旧值: [{0}], 新值: [{1}])
 jsp.error.page.conflict.iserrorpage=页面指令:“ isErrorPage”非法多次出现不同值(旧值: [{0}], 新值: [{1}])
-jsp.error.page.conflict.isthreadsafe=页面指令:“ isThreadSafe”非法多次出现不同值(旧值: [{0}], 新值: [{1}])
 jsp.error.page.conflict.language=页面指令:“ language” 非法多次出现不同值( 旧值:[{0}],新值:[{1}] )
 jsp.error.page.conflict.session=页面指令:“session” 非法多次出现不同值( 旧值:[{0}],新值:[{1}] )
 jsp.error.page.conflict.trimdirectivewhitespaces=页面指令:违法出现多个有不同的值(旧值:[{0}],新值:[{1}])的''trimDirectiveWhitespaces''
@@ -159,7 +158,6 @@ jsp.error.page.invalid.errorOnELNotFound=页面指​​令:errorOnELNotFound
 jsp.error.page.invalid.import=页面指令:import 值无效
 jsp.error.page.invalid.iselignored=页面指令:isELIgnored 值无效
 jsp.error.page.invalid.iserrorpage=页面指令:isErrorPage 值无效
-jsp.error.page.invalid.isthreadsafe=页面指令:isThreadSafe 值无效
 jsp.error.page.invalid.scope=无效的作用域
 jsp.error.page.invalid.session=页面指令:session 值无效
 jsp.error.page.invalid.trimdirectivewhitespaces=页面指令:trimDirectiveWhitespaces 值无效
@@ -289,7 +287,6 @@ jsp.warning.enablePooling=警告:initParam enablePooling的值无效。将使
 jsp.warning.engineOptionsClass=未能加载引擎选项类[{0}]
 jsp.warning.fork=警告:initParam的值无效。将使用“true”的默认值
 jsp.warning.genchararray=警告:initParam genstringascharray的值无效。将使用默认值“false”
-jsp.warning.isThreadSafe=警告:在[{0}] 中使用的“isThreadSafe”页面指令属性已被弃用,并将在 JSP 规范的 4.0 版中删除\n
 jsp.warning.jspIdleTimeout=警告:initParam jspIdleTimeout的值无效。将使用默认值“-1”
 jsp.warning.keepgen=警告:initParam keepgenerated的值无效。将使用默认值“false”
 jsp.warning.loadSmap=无法加载类[{0}]的SMAP数据
diff --git a/test/org/apache/jasper/compiler/TestGenerator.java b/test/org/apache/jasper/compiler/TestGenerator.java
index baeb8088b9..65fb6d6785 100644
--- a/test/org/apache/jasper/compiler/TestGenerator.java
+++ b/test/org/apache/jasper/compiler/TestGenerator.java
@@ -719,11 +719,6 @@ public class TestGenerator extends TomcatBaseTest {
         doTestJsp("variable-tagfile-from-attr-nested.jsp");
     }
 
-    @Test
-    public void testSingleThreaded() throws Exception {
-        doTestJsp("single-threaded.jsp");
-    }
-
     @Test
     public void testXpoweredBy() throws Exception {
         doTestJsp("x-powered-by.jsp");
diff --git a/test/webapp/jsp/generator/single-threaded.jsp b/test/webapp/jsp/generator/single-threaded.jsp
deleted file mode 100644
index 371ec50aa0..0000000000
--- a/test/webapp/jsp/generator/single-threaded.jsp
+++ /dev/null
@@ -1,17 +0,0 @@
-<%--
- Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
---%>
-<%@ page isThreadSafe="false" %>
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org