curious1
curious1

Reputation: 14717

Configuration of Eclipse/Jetty to solve the issue: the code of method is exceeding the 65535 bytes limit

I am developing a Java site in Eclipse. The site depends on JSP files and servlets, and I use a plugin (Eclipse Jetty 5.0.0) to run the site within Eclipse during development. I got this exception when loading a page in the browser:

XXXXX_jsp.java]<|The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit

I will eventually run this site on Tomcat, and I am able to solve this issue in Tomcat by adding the following to JspServlet within tomcat_install/conf/web.xml:

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

However, I did quite search and was unable to find a similar configuration solution to make it work in Eclipse/Jetty. I could break the method into a few smaller ones, but I want to avoid it. Hope to use a configuration (not code change) to solve this issue.

Upvotes: 1

Views: 1132

Answers (1)

Joakim Erdfelt
Joakim Erdfelt

Reputation: 49472

The JettyJspServlet supports the same init-params as Tomcat's JspServlet.

The mappedfile init-param is there (just set it to something invalid like "foo" and watch the error message pop out "Warning: Invalid value for the initParam mappedFile. Will use the default value of "false"")

You'll need to reference the existing JSP servlet and add those init-parameters to your WEB-INF/web.xml.

<servlet id="jsp">
  <servlet-name>jsp</servlet-name>
  <init-param>
    <param-name>mappedfile</param-name>
    <param-value>false</param-value>
  </init-param>
</servlet>

Or create a new webdefault.xml with this parameter and have your webapp use it with the XML deployables in ${jetty.base}/webapps/${webappid}.xml

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
   <Set name="contextPath">/foo</Set>
   <Set name="war"><Property name="jetty.webapps"/>/foobar.war</Set>
   <Set name="defaultsDescriptor"><Property name="jetty.base"/>/etc/mywebdefault.xml</Set>
</Configure>

The "mappedfile" init-param:

It appears to switch from generating normal print statements in the intermediate *.java file to 1 liner print statements.
This means you are at the razors edge of JavaC support in your JSP file. There are many hard limits to the size of the *.java file on javac, and your JSP file is tickling those limits now.

Some (but not all) javac limits:

  • Static Initializers Size: 65535 bytes max.
  • Method or Constructor Length: 65535 bytes max. (the one your JSP file is tripping on)
  • Method or Constructor Parameter Length: 255 parameters max.
  • Local Variables Size: 65535 bytes max.
  • Synthetic Parameters Length: 255 parameters max.
  • Array Dimensions: 255 max.

If this init-param works for you, then use it.
But if you need to maintain / edit that JSP file, know that you can almost certainly not add to it (only remove).
You'll likely have to refactor it into smaller pieces with imports in the future.

Upvotes: 1

Related Questions