jetty / jetty.project

Eclipse Jetty® - Web Container & Clients - supports HTTP/2, HTTP/1.1, HTTP/1.0, websocket, servlets, and more
https://eclipse.dev/jetty
Other
3.86k stars 1.91k forks source link

Jetty seems to compile anew precompiled classes #1699

Closed ghost closed 7 years ago

ghost commented 7 years ago

Hi

I use Jetty 9.4.6 v20170531. My JSP classes are precompiled by jetty-jspc-maven-plugin:

<plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-jspc-maven-plugin</artifactId>
        <version>9.4.6.v20170531</version>
        <executions>
          <execution>
            <id>jspc</id>
            <goals>
              <goal>jspc</goal>
            </goals>
            <configuration>
              <mergeFragment>true</mergeFragment>
            </configuration>
          </execution>
        </executions>
      </plugin>

The merged file web.xml is included in my WAR:

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.1.0</version>
        <configuration>
          <webXml>${project.basedir}/target/web.xml</webXml>
        </configuration>
      </plugin>

web.xml contains the expected lines about jspc:

<context-param><param-name>org.eclipse.jetty.jsp.precompiled</param-name><param-value>true</param-value></context-param>

<!--
Automatically created by Apache Tomcat JspC.
Place this fragment in the web.xml before all icon, display-name,
description, distributable, and context-param elements.
-->

followed by the servlets and the servlet mappings of my JSPs...

However, the very first time I access one of those JSPs, the web page takes about 12 seconds to load, it looks like my JSPs get compiled anew whereas it's useless. When I access this JSP after this first try, it's as fast as expected, it takes about 100 milliseconds. The first JSP I tried contains this:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
<body>
<%@ page import="java.util.Locale" %>
<%@ page import="java.util.Objects" %>
<%  
    final Locale locale = request.getLocale();
    if (locale != null && Objects.equals(locale.getLanguage(), Locale.FRENCH.getLanguage())) {
        response.sendRedirect("fr/");
    } else {
        response.sendRedirect("en/");
    }
  %>
</body>
</html>

I don't see how such a rudimentary JSP could take several seconds to execute. Is there anything I can add to check whether Jetty precompiled my JSPs?

gregw commented 7 years ago

twelve seconds is a long time to compile such a simple JSP, so it may be something else in your app is taking that time to initialise???? So it would be good if you could get a debug log or some other indication (file datestamps) that it is actually compilation that is causing this 12s delay.

cheers

janbartel commented 7 years ago

@gouessej I can't reproduce this with the standard jetty test webapp, and precompiling the jsps.

If your web.xml contains servlet definitions and path mappings, then the jsp servlet is never invoked so no on-the-fly compilations are done. Could it be a filter or other initialization in your webapp that is taking the time? Things to look at:

ghost commented 7 years ago

Thank you for your help.

@gregw How can I enable the debug log? I've already enabled for the logs (I see the info and warn levels), I use StdErrLog (console-capture). As far as I remember, I shouldn't use org.eclipse.jetty.util.log.DEBUG.

I haven't modified webdefault.xml but I have modified web.xml. I'll post it as soon as possible.

My webapp is currently terribly simple, there is nothing in my WEB-INF/lib. I don't use Spring, I don't use JSTL. Actually, I use no third party library for the moment, even the JDBC part isn't ready. I'll look at /opt/jetty/temp.

Yesterday, I removed 2 other JSPs, I kept only the rudimentary JSP above and it still took 3 seconds at the first access. Should I insert <load-on-startup>0</load-on-startup> into web.xml for each JSP? It would require to modify the file web.xml generated by jetty-jspc-maven-plugin before it gets included into the WAR or to run mvn package twice (once to generate web.xml with jetty-jspc-maven-plugin, once again to insert web.xml modified by me into the WAR).

extractWar is set to true in my webapp configuration file.

gregw commented 7 years ago

https://www.eclipse.org/jetty/documentation/9.4.x/configuring-logging.html

ghost commented 7 years ago

@gregw Thanks. By the way, jetty-logging.xml has to be renamed console-capture.xml here too.

ghost commented 7 years ago

This is my web.xml file:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" metadata-complete="false" version="3.1">
<description>
web.xml file. This file is applied to a Web application after its default (etc/webdefault.xml) file
</description>
<!--
 ==================================================================== 
-->
<!--
 Removes static references to beans from javax.el.BeanELResolver to   
-->
<!--
 ensure webapp classloader can be released on undeploy                
-->
<!--
 ==================================================================== 
-->
<listener>
<listener-class>
org.eclipse.jetty.servlet.listener.ELContextCleaner
</listener-class>
</listener>
<!--
 ==================================================================== 
-->
<!--
 Removes static cache of Methods from java.beans.Introspector to      
-->
<!--
 ensure webapp classloader can be released on undeploy                
-->
<!--
 ==================================================================== 
-->
<listener>
<listener-class>
org.eclipse.jetty.servlet.listener.IntrospectorCleaner
</listener-class>
</listener>
<!--
 ==================================================================== 
-->
<!--  Context params to control Session Cookies                             -->
<!--
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
-->
<!--

    UNCOMMENT TO ACTIVATE 
    <context-param> 
      <param-name>org.eclipse.jetty.servlet.SessionDomain</param-name> 
      <param-value>127.0.0.1</param-value> 
    </context-param> 
    <context-param>
      <param-name>org.eclipse.jetty.servlet.SessionPath</param-name>
      <param-value>/</param-value>
    </context-param>
    <context-param>
      <param-name>org.eclipse.jetty.servlet.MaxAge</param-name>
      <param-value>-1</param-value>
    </context-param>

-->
<!--
 ==================================================================== 
-->
<!--  The default servlet.                                                  -->
<!--
 This servlet, normally mapped to /, provides the handling for static 
-->
<!--
 content, OPTIONS and TRACE methods for the context.                  
-->
<!--  The following initParameters are supported:                           -->
<!--

 *  acceptRanges      If true, range requests and responses are
 *                    supported
 *
 *  dirAllowed        If true, directory listings are returned if no
 *                    welcome file is found. Else 403 Forbidden.
 *
 *  welcomeServlets   If true, attempt to dispatch to welcome files
 *                    that are servlets, but only after no matching static
 *                    resources could be found. If false, then a welcome
 *                    file must exist on disk. If "exact", then exact
 *                    servlet matches are supported without an existing file.
 *                    Default is true.
 *
 *                    This must be false if you want directory listings,
 *                    but have index.jsp in your welcome file list.
 *
 *  redirectWelcome   If true, welcome files are redirected rather than
 *                    forwarded to.
 *
 *  gzip              If set to true, then static content will be served as
 *                    gzip content encoded if a matching resource is
 *                    found ending with ".gz"
 *
 *  resourceBase      Set to replace the context resource base
 *
 *  resourceCache     If set, this is a context attribute name, which the servlet
 *                    will use to look for a shared ResourceCache instance.
 *
 *  relativeResourceBase
 *                    Set with a pathname relative to the base of the
 *                    servlet context root. Useful for only serving static content out
 *                    of only specific subdirectories.
 *
 *  pathInfoOnly      If true, only the path info will be applied to the resourceBase
 *
 *  stylesheet        Set with the location of an optional stylesheet that will be used
 *                    to decorate the directory listing html.
 *
 *  aliases           If True, aliases of resources are allowed (eg. symbolic
 *                    links and caps variations). May bypass security constraints.
 *                    
 *  etags             If True, weak etags will be generated and handled.
 *
 *  maxCacheSize      The maximum total size of the cache or 0 for no cache.
 *  maxCachedFileSize The maximum size of a file to cache
 *  maxCachedFiles    The maximum number of files to cache
 *
 *  useFileMappedBuffer
 *                    If set to true, it will use mapped file buffers to serve static content
 *                    when using an NIO connector. Setting this value to false means that
 *                    a direct buffer will be used instead of a mapped file buffer.
 *                    This file sets the value to true.
 *
 *  cacheControl      If set, all static content will have this value set as the cache-control
 *                    header.
 *

-->
<!--
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
-->
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
<init-param>
<param-name>aliases</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>acceptRanges</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>dirAllowed</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>welcomeServlets</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>redirectWelcome</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>maxCacheSize</param-name>
<param-value>256000000</param-value>
</init-param>
<init-param>
<param-name>maxCachedFileSize</param-name>
<param-value>200000000</param-value>
</init-param>
<init-param>
<param-name>maxCachedFiles</param-name>
<param-value>2048</param-value>
</init-param>
<init-param>
<param-name>gzip</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>etags</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>useFileMappedBuffer</param-name>
<param-value>true</param-value>
</init-param>
<!--

    <init-param>
      <param-name>resourceCache</param-name>
      <param-value>resourceCache</param-value>
    </init-param>

-->
<init-param>
<param-name>cacheControl</param-name>
<param-value>
max-age=0,no-cache,no-store,must-revalidate,no-transform
</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--
 ==================================================================== 
-->
<!--  JSP Servlet                                                           -->
<!--  This is the jasper JSP servlet.                                       -->
<!--
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
-->
<!--
 The JSP page compiler and execution servlet, which is the mechanism  
-->
<!--
 used by the jsp container to support JSP pages.  Traditionally,      
-->
<!--
 this servlet is mapped to URL pattern "*.jsp".  This servlet         
-->
<!--
 supports the following initialization parameters (default values     
-->
<!--  are in square brackets):                                              -->
<!--                                                                        -->
<!--
   checkInterval       If development is false and reloading is true, 
-->
<!--                        background compiles are enabled. checkInterval  -->
<!--                        is the time in seconds between checks to see    -->
<!--                        if a JSP page needs to be recompiled. [300]     -->
<!--                                                                        -->
<!--
   compiler            Which compiler Ant should use to compile JSP   
-->
<!--                        pages.  See the Ant documentation for more      -->
<!--                        information. [javac]                            -->
<!--                                                                        -->
<!--
   classdebuginfo      Should the class file be compiled with         
-->
<!--                        debugging information?  [true]                  -->
<!--                                                                        -->
<!--
   classpath           What class path should I use while compiling   
-->
<!--                        generated servlets?  [Created dynamically       -->
<!--                        based on the current web application]           -->
<!--                        Set to ? to make the container explicitly set   -->
<!--                        this parameter.                                 -->
<!--                                                                        -->
<!--
   development         Is Jasper used in development mode (will check 
-->
<!--                        for JSP modification on every access)?  [true]  -->
<!--                                                                        -->
<!--
   enablePooling       Determines whether tag handler pooling is      
-->
<!--                        enabled  [true]                                 -->
<!--                                                                        -->
<!--
   fork                Tell Ant to fork compiles of JSP pages so that 
-->
<!--                        a separate JVM is used for JSP page compiles    -->
<!--                        from the one Tomcat is running in. [true]       -->
<!--                                                                        -->
<!--
   ieClassId           The class-id value to be sent to Internet      
-->
<!--                        Explorer when using <jsp:plugin> tags.          -->
<!--                        [clsid:8AD9C840-044E-11D1-B3E9-00805F499D93]    -->
<!--                                                                        -->
<!--
   javaEncoding        Java file encoding to use for generating java  
-->
<!--                        source files. [UTF-8]                           -->
<!--                                                                        -->
<!--
   keepgenerated       Should we keep the generated Java source code  
-->
<!--                        for each page instead of deleting it? [true]    -->
<!--                                                                        -->
<!--
   logVerbosityLevel   The level of detailed messages to be produced  
-->
<!--                        by this servlet.  Increasing levels cause the   -->
<!--                        generation of more messages.  Valid values are  -->
<!--                        FATAL, ERROR, WARNING, INFORMATION, and DEBUG.  -->
<!--                        [WARNING]                                       -->
<!--                                                                        -->
<!--
   mappedfile          Should we generate static content with one     
-->
<!--                        print statement per input line, to ease         -->
<!--                        debugging?  [false]                             -->
<!--                                                                        -->
<!--                                                                        -->
<!--
   reloading           Should Jasper check for modified JSPs?  [true] 
-->
<!--                                                                        -->
<!--
   suppressSmap        Should the generation of SMAP info for JSR45   
-->
<!--                        debugging be suppressed?  [false]               -->
<!--                                                                        -->
<!--
   dumpSmap            Should the SMAP info for JSR45 debugging be    
-->
<!--                        dumped to a file? [false]                       -->
<!--                        False if suppressSmap is true                   -->
<!--                                                                        -->
<!--
   scratchdir          What scratch directory should we use when      
-->
<!--                        compiling JSP pages?  [default work directory   -->
<!--                        for the current web application]                -->
<!--                                                                        -->
<!--
   tagpoolMaxSize      The maximum tag handler pool size  [5]         
-->
<!--                                                                        -->
<!--
   xpoweredBy          Determines whether X-Powered-By response       
-->
<!--                        header is added by generated servlet  [false]   -->
<!--                                                                        -->
<!--
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
-->
<servlet id="jsp">
<servlet-name>jsp</servlet-name>
<servlet-class>org.eclipse.jetty.jsp.JettyJspServlet</servlet-class>
<init-param>
<param-name>logVerbosityLevel</param-name>
<param-value>DEBUG</param-value>
</init-param>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>compilerTargetVM</param-name>
<param-value>1.7</param-value>
</init-param>
<init-param>
<param-name>compilerSourceVM</param-name>
<param-value>1.7</param-value>
</init-param>
<!--

    <init-param>
        <param-name>classpath</param-name>
        <param-value>?</param-value>
    </init-param>

-->
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspf</url-pattern>
<url-pattern>*.jspx</url-pattern>
<url-pattern>*.xsp</url-pattern>
<url-pattern>*.JSP</url-pattern>
<url-pattern>*.JSPF</url-pattern>
<url-pattern>*.JSPX</url-pattern>
<url-pattern>*.XSP</url-pattern>
</servlet-mapping>
<!--
 ==================================================================== 
-->
<!--  Default session configuration                                         -->
<!--
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
-->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<!--
 ==================================================================== 
-->
<!--  Default MIME mappings                                                 -->
<!--
 The default MIME mappings are provided by the mime.properties        
-->
<!--
 resource in the jetty-http.jar file.  Additional or modified         
-->
<!--  mappings may be specified here                                        -->
<!--
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
-->
<!--
 UNCOMMENT TO ACTIVATE
  <mime-mapping>
    <extension>mysuffix</extension>
    <mime-type>mymime/type</mime-type>
  </mime-mapping>

-->
<!--
 ==================================================================== 
-->
<!--  Default welcome files                                                 -->
<!--
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
-->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!--
 ==================================================================== 
-->
<!--  Default locale encodings                                              -->
<!--
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
-->
<locale-encoding-mapping-list>
<locale-encoding-mapping>
<locale>ar</locale>
<encoding>ISO-8859-6</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>be</locale>
<encoding>ISO-8859-5</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>bg</locale>
<encoding>ISO-8859-5</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>ca</locale>
<encoding>ISO-8859-1</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>cs</locale>
<encoding>ISO-8859-2</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>da</locale>
<encoding>ISO-8859-1</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>de</locale>
<encoding>ISO-8859-1</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>el</locale>
<encoding>ISO-8859-7</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>en</locale>
<encoding>ISO-8859-1</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>es</locale>
<encoding>ISO-8859-1</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>et</locale>
<encoding>ISO-8859-1</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>fi</locale>
<encoding>ISO-8859-1</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>fr</locale>
<encoding>ISO-8859-1</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>hr</locale>
<encoding>ISO-8859-2</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>hu</locale>
<encoding>ISO-8859-2</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>is</locale>
<encoding>ISO-8859-1</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>it</locale>
<encoding>ISO-8859-1</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>iw</locale>
<encoding>ISO-8859-8</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>ja</locale>
<encoding>Shift_JIS</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>ko</locale>
<encoding>EUC-KR</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>lt</locale>
<encoding>ISO-8859-2</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>lv</locale>
<encoding>ISO-8859-2</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>mk</locale>
<encoding>ISO-8859-5</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>nl</locale>
<encoding>ISO-8859-1</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>no</locale>
<encoding>ISO-8859-1</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>pl</locale>
<encoding>ISO-8859-2</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>pt</locale>
<encoding>ISO-8859-1</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>ro</locale>
<encoding>ISO-8859-2</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>ru</locale>
<encoding>ISO-8859-5</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>sh</locale>
<encoding>ISO-8859-5</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>sk</locale>
<encoding>ISO-8859-2</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>sl</locale>
<encoding>ISO-8859-2</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>sq</locale>
<encoding>ISO-8859-2</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>sr</locale>
<encoding>ISO-8859-5</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>sv</locale>
<encoding>ISO-8859-1</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>tr</locale>
<encoding>ISO-8859-9</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>uk</locale>
<encoding>ISO-8859-5</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>zh</locale>
<encoding>GB2312</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>zh_TW</locale>
<encoding>Big5</encoding>
</locale-encoding-mapping>
</locale-encoding-mapping-list>
<!--
 ==================================================================== 
-->
<!--  Disable TRACE method with security constraint                         -->
<!--
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
-->
<security-constraint>
<web-resource-collection>
<web-resource-name>Disable TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Enable everything but TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method-omission>TRACE</http-method-omission>
</web-resource-collection>
</security-constraint>
<context-param>
<param-name>org.eclipse.jetty.jsp.precompiled</param-name>
<param-value>true</param-value>
</context-param>
<!--

Automatically created by Apache Tomcat JspC.
Place this fragment in the web.xml before all icon, display-name,
description, distributable, and context-param elements.
-->
<servlet>
<servlet-name>org.apache.jsp.index_jsp</servlet-name>
<servlet-class>org.apache.jsp.index_jsp</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>org.apache.jsp.index_jsp</servlet-name>
<url-pattern>/index.jsp</url-pattern>
</servlet-mapping>
<!--

All session-config, mime-mapping, welcome-file-list, error-page, taglib,
resource-ref, security-constraint, login-config, security-role,
env-entry, and ejb-ref elements should follow this fragment.
-->
</web-app>
ghost commented 7 years ago

@janbartel Do you see anything special in the file above?

ghost commented 7 years ago

/tmp/jetty-0.0.0.0-8080-beta.***.org.war-_-beta.**.org-3115377452863405265.dir/jsp/ is totally empty even after going to the homepage using JSP. I don't understand what's wrong. The class files are in the WAR in WEB-INF/classes/org/apache/jsp, WEB-INF/web.xml contains the necessary definition and servlet mappings.

gregw commented 7 years ago

Julien,

this kind of indicates that whatever the delay is, it is not JSP compilation.

Try taking some thread dumps during the delay and looking for active threads.

regards

On 6 August 2017 at 09:11, Julien Gouesse notifications@github.com wrote:

/tmp/jetty-0.0.0.0-8080-beta.*.org.war-_-beta..org-3115377452863405265.dir/jsp/ is totally empty even after going to the homepage using JSP. I don't understand what's wrong. The class files are in the WAR in WEB-INF/classes/org/apache/jsp, WEB-INF/web.xml contains the necessary definition and servlet mappings.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/eclipse/jetty.project/issues/1699#issuecomment-320475511, or mute the thread https://github.com/notifications/unsubscribe-auth/AAEUreiUG1joRCfqaOyjjV2drkxkDEtLks5sVPajgaJpZM4Onuva .

-- Greg Wilkins gregw@webtide.com CTO http://webtide.com

ghost commented 7 years ago

I can probably use jstack to do that.

janbartel commented 7 years ago

@gouessej I'm going to close this issue since you've confirmed that the precompiled jsps aren't being recompiled. If you find some other problem with jetty, please go ahead and open a fresh issue and attach all the relevant information such as thread dumps, stack traces, config files and repro test case if possible.