web-dev-qa-db-fra.com

_jspService dépasse la limite de 65 535 octets

Je traite donc avec un code de servlet hérité qui s'exécute sur Websphere 7 (JDK 6). La configuration de l'environnement de développement utilise Tomcat 6 (JDK 6). 

  1. Pourquoi cela fonctionne-t-il sur Websphere 7 et Pas dans Tomcat 6?
  2. Est-ce quelque chose lié au serveur d'application ?

Si votre réponse est oui pour non. 2, avez-vous une solution de contournement à cela sur Tomcat 6 (JDK 6) en dehors de la décomposition du code ou de l'utilisation d'inclusions dynamiques?

La planification ne correspond pas à la modification d'inclusions statiques en inclus dynamiques, principalement parce que la plupart des pages sont associées au code du modèle d'entreprise, y compris le modèle principal de l'application.

21
setzamora

On dirait que vous atteignez une limite de méthode 64k , probablement en raison de la façon dont Tomcat construit une classe à partir de votre JSP. Cette page suggère de changer votre statique inclut comme ceci:

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

Pour inclure dynamique comme ceci pour éviter le problème:

<jsp:include page="test.jsp" /> 
20
WhiteFang34

J'ai manqué de blocs html/jss/css statiques que je pouvais externaliser en jsp:include (du html essentiellement non statique a été laissé) ... 

Vous pouvez mettre dans votre web.xml, le fichier mappé étant défini sur false, pour vous débarrasser de nombreuses lignes statiques qui ne sont pas forcément de bons blocs à inclure dans une inclusion, mais qui s'ajoutent pour économiser de l'espace:

<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>

La solution <c:catch> de Peter Hart sonne également comme une option intéressante.

11
armyofda12mnkeys

Mieux vaut indiquer directement où le modifier, comme indiqué dans le lien suivant: https://www.assetbank.co.uk/support/documentation/knowledge-base/byte-limit-exceeded-error/

Recherchez le fichier [Tomcat_Home] /conf/web.xml et recherchez le fichier 'JspServlet'. Cela devrait renvoyer un noeud xml de <servlet> contenant des valeurs <init-param>. Vous devrez ajouter un <init-param> additionnel identique à celui ci-dessous.

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

C'est plus clair et direct pour l'utilisateur Tomcat

Autres solutions de référence qui, bien sûr, ont pour la plupart déjà été mentionnées dans un commentaire précédent, mais toutes au même endroit, à lire ici: http://answered.site/development-environment-setup-uses-Tomcat-6-jdk-6-why- fait-il-travail/603017/

Le problème a également été détecté dans Tomcat-8 avec JDK1.8 (Java8)

9
Osify

Pour JBoss eap 6 dans standalone.xml, ajoutez le code ci-dessous dans le sous-système Web.

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

Cela a résolu mon problème.

4
suresh sahu

Parfois, diviser votre JSP en Inclus n'a pas de sens ou ne fonctionne pas. Une autre façon de forcer votre JSP à être divisée en méthodes distinctes lors de la compilation consiste à séparer votre JSP en segments à l'aide de <c:catch>.

4
Peter J. Hart

Pourquoi cela fonctionne-t-il sur Websphere 7 et non dans Tomcat 6?

Parce qu'ils ont différents compilateurs JSP qui traduisent les JSP en différents codes Java. Le compilateur Tomcat JSP (Jasper) n'est apparemment pas capable de gérer de grands fichiers JSP.

La prochaine question est peut-être: est-il possible de changer la limite de taille de méthode de la machine virtuelle Java?

Non. Ces limites sont câblées dans le format/la structure des fichiers de classe. 

Les détails se trouvent dans la spécification JVM ... mais c'est assez compliqué, et votre question ne dit pas clairement quelle limite vous avez atteinte. (Mais c'est immatériel ... ils ne peuvent pas être changés.)

2
Stephen C

En définissant le paramètre d'initialisation "mappedFile" sur "false" a fonctionné pour moi. 

Mais en utilisant le plugin Eclipse quelque temps, il est supprimé et doit être à nouveau configuré dans la maison de Tomcat.

1
Chaitu

Je suis tombé sur cette question aujourd'hui
Mon problème a été résolu car je prenais Tomcat 8.0.30 au lieu de Tomcat 8.0.39 

1
Shinigami

Eidt: La solution proposée n'était pas une solution, mais une erreur d'interprétation (problème ne pouvant pas être reproduit sur toutes les versions de Tomcat).

0
Frank

Pour le serveur wildfly, dans standalone.xml -> sous-système de ressac interne: remplacer jsp-config par

<jsp-config development="true" mapped-file="false"/>
0
Krishna Bs