33

因此,我正在处理在 Websphere 7 (JDK 6) 上运行的遗留 servlet 代码。开发环境设置使用 Tomcat 6 (JDK 6)。

  1. 为什么它在 Websphere 7 上运行而不在 Tomcat 6 上运行?
  2. 这与应用程序服务器有关吗?

如果你的答案是肯定的。2,除了分解代码或使用动态包含之外,您在 Tomcat 6 (JDK 6) 上是否有解决方法?

该计划不同意将静态包含更改为动态包含,主要是因为大多数页面都与包括应用程序主模板在内的业务模型代码相结合。

4

11 回答 11

23

听起来您达到了64k 方法限制,这可能是由于 Tomcat 如何从您的 JSP 中构建一个类。这个页面建议改变你的静态包括这样的:

<%@ include file="test.jsp" %>

像这样动态包含以避免该问题:

<jsp:include page="test.jsp" /> 
于 2011-03-30T09:30:49.127 回答
21

我用完了可以外部化的静态 html/jss/css 块jsp:include(大部分是非静态 html)...

您可以web.xml像这样将您的 , mappedfile 设置为 false 以摆脱许多静态行,这些静态行不一定是放入包含的好块,但它们加起来可以节省空间:

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    ...
    <init-param>
        <param-name>mappedfile</param-name>
        <param-value>false</param-value>
    </init-param>
    ...
</servlet>

Peter Hart 的<c:catch>解决方案听起来也是不错的选择。

于 2011-06-29T17:36:57.150 回答
13

最好直接指出在哪里更改它,如以下链接所述: https ://www.assetbank.co.uk/support/documentation/knowledge-base/byte-limit-exceeded-error/

找到文件 [Tomcat_Home]/conf/web.xml 并在文件中搜索“JspServlet”。<servlet>这应该返回一个包含一些<init-param>值的 xml 节点。您将需要添加<init-param>与以下相同的附加内容。

<init-param>
    <param-name>mappedfile</param-name>
    <param-value>false</param-value>
</init-param> 

这对tomcat用户来说更加清晰和直接

当然,其他参考解决方案主要在之前的评论中说,但都在一个地方阅读,这里:http ://answered.site/development-environment-setup-uses-tomcat-6-jdk-6-why-does-它工作/603017/

在 JDK1.8 (Java8) 的 tomcat-8 中也发现了该问题

于 2015-11-30T10:26:50.443 回答
4

有时将您的 JSP 分解为包含没有意义或不起作用。另一种在编译时强制将 JSP 分解为单独方法的方法是使用<c:catch>.

于 2011-04-27T19:18:38.943 回答
4

For JBoss eap 6 in standalone.xml add the below code under web subsytem.

<configuration>
    <jsp-configuration development="true" mapped-file="false"/>
</configuration>

It resolved my issue.

于 2015-05-26T07:21:21.057 回答
3

为什么它适用于 Websphere 7 而不是 Tomcat 6

因为它们有不同的 JSP 编译器,可以将 JSP 转换为不同的 Java 代码。Tomcat JSP 编译器 (Jasper) 显然无法处理大型 JSP。

也许下一个问题是,是否可以更改 JVM 的方法大小限制?

不,这些限制是硬连线到类文件的格式/结构中的。

详细信息在JVM 规范中......但它相当复杂,并且从你的问题中并不完全清楚你已经达到了哪个限制。(但这无关紧要……它们无法更改。)

于 2011-03-30T09:57:48.053 回答
2

我今天偶然发现了这个问题
我的问题得到了解决,因为我使用了 Tomcat 8.0.30 而不是 Tomcat 8.0.39

于 2017-01-12T15:53:30.793 回答
1

通过将初始化参数“mappedFile”设置为“false”对我有用。

但是有时使用 eclipse 插件会被删除,需要在 tomcat home 中再次设置。

于 2014-05-28T06:19:10.290 回答
1

如果您要_jspService is exceeding the 65535 bytes limit在带有嵌入式 tomcat 的 Spring Boot 上修复此错误,您可以在您的以下配置中使用此配置application.properties

server.servlet.jsp.init-parameters.mappedfile=false
于 2020-09-16T16:32:04.867 回答
1

Eidt:给定的解决方案没有解决方案,但误解(问题无法在所有 tomcat 版本上重现)抱歉。

于 2016-10-26T09:06:49.257 回答
0

对于 wildfly 服务器,在standalone.xml -> undertow 子系统内:将 jsp-config 替换为

<jsp-config development="true" mapped-file="false"/>
于 2016-08-18T10:06:09.400 回答