blob: 8d39eb283af611f519c388e6241231be35b3be11 [file] [log] [blame]
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Chapter&nbsp;8.&nbsp;Configuring JSP Support</title><link rel="stylesheet" type="text/css" href="css/docbook.css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"><meta name="keywords" content="jetty, servlet, servlet-api, cometd, http, websocket, eclipse, maven, java, server, software"><link rel="home" href="index.html" title="Jetty : The Definitive Reference"><link rel="up" href="configuring.html" title="Part&nbsp;II.&nbsp;Jetty Configuration"><link rel="prev" href="spnego-support.html" title="Spnego Support"><link rel="next" href="administration.html" title="Part&nbsp;III.&nbsp;Jetty Administration Guide"><link xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" rel="shortcut icon" href="images/favicon.ico"><script type="text/javascript" src="js/shCore.js"></script><script type="text/javascript" src="js/shBrushJava.js"></script><script type="text/javascript" src="js/shBrushXml.js"></script><script type="text/javascript" src="js/shBrushBash.js"></script><script type="text/javascript" src="js/shBrushJScript.js"></script><script type="text/javascript" src="js/shBrushSql.js"></script><script type="text/javascript" src="js/shBrushProperties.js"></script><script type="text/javascript" src="js/shBrushPlain.js"></script><link type="text/css" rel="stylesheet" href="css/shCore.css"><link type="text/css" rel="stylesheet" href="css/shThemeEclipse.css"><link type="text/css" rel="stylesheet" href="css/font-awesome.min.css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times"><tr><td style="width: 25%"><a href="http://www.eclipse.org/jetty"><img src="images/jetty-header-logo.png" alt="Jetty Logo"></a><br><span style="font-size: small">
Version: 9.3.0.v20150612</span></td><td style="width: 50%"><script type="text/javascript"> (function() {
var cx = '016459005284625897022:obd4lsai2ds';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
'//www.google.com/cse/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script><gcse:search></gcse:search></td></tr></table><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&nbsp;8.&nbsp;Configuring JSP Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="spnego-support.html"><i class="icon-chevron-left"></i> Previous</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Jetty Configuration<br><a accesskey="p" href="index.html"><i class="icon-home"></i> Home</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="administration.html">Next <i class="icon-chevron-right"></i></a></td></tr></table><hr></div><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="jetty-callout"><h5 class="callout"><a href="http://www.webtide.com/">Contact the core Jetty developers at
<span class="website">www.webtide.com</span></a></h5><p>
private support for your internal/customer projects ... custom extensions and distributions ... versioned snapshots for indefinite support ...
scalability guidance for your apps and Ajax/Comet projects ... development services from 1 day to full product delivery
</p></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="configuring-jsp"></a>Chapter&nbsp;8.&nbsp;Configuring JSP Support</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="configuring-jsp.html#jsp-support">Configuring JSP</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="jsp-support"></a>Configuring JSP</h2></div></div></div><div class="toc"><dl><dt><span class="section"><a href="configuring-jsp.html#which-jsp-implementation">Which JSP Implementation</a></span></dt><dt><span class="section"><a href="configuring-jsp.html#d0e6586">Precompiling JSPs</a></span></dt><dt><span class="section"><a href="configuring-jsp.html#compiling-jsps">Runtime Compiling JSPs</a></span></dt><dt><span class="section"><a href="configuring-jsp.html#modifying-configuration">Modifying Configuration</a></span></dt><dt><span class="section"><a href="configuring-jsp.html#using-jstl-taglibs-for-jetty7-jetty8">Using JSTL Taglibs</a></span></dt><dt><span class="section"><a href="configuring-jsp.html#using-jsf-taglibs">Using JSF Taglibs</a></span></dt></dl></div><p>This document provides information about configuring Java Server Pages
for Jetty.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="which-jsp-implementation"></a>Which JSP Implementation</h3></div></div></div><p>From jetty-9.2 onwards, we are using Jasper from <a class="link" href="http://tomcat.apache.org/tomcat-8.0-doc/jasper-howto.html" target="_top">Apache</a>
as the default JSP container implementation. In previous versions we used
Jasper from <a class="link" href="http://jsp.java.net" target="_top">Glassfish</a>, and if
you wish to, you can continue to do so.</p><p>The jetty-distribution by default enables the jsp <a class="link" href="startup-modules.html" title="Managing Startup Modules">module</a>, and by default, this <a class="link" href="startup-modules.html" title="Managing Startup Modules">module</a> is set to Apache Jasper. To change
to use Glassfish Jasper instead, edit the
<code class="filename">$JETTY_HOME/start.d/jsp.mod</code> file and change the line
indicated:</p><div class="informalexample"><script type="syntaxhighlighter" class="brush: plain;toolbar: false">
<![CDATA[#
# Jetty JSP Module
#
[depend]
servlet
annotations
apache-jsp
]]>
</script></div><p>Note that the availability of some JSP features may depend on which
JSP container implementation you are using. Note also that it may not be
possible to precompile your jsps with one container and deploy to the
other.</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6559"></a>JSPs and Embedding</h4></div></div></div><p>If you have an embedded setup for your webapp and wish to use
jsps, you will need to ensure that a JSP engine is correctly
initialized.</p><p>For both Apache and Glassfish JSP engines, a Servlet Specification
3.1 style <a class="link" href="using-annotations.html#servlet-container-initializers" title="ServletContainerInitializers">ServletContainerInitializer</a>
is used to accomplish this. You will need to ensure that this
ServletContainerInitializer is run by jetty. Perhaps the easiest way to
do this is to enable annotations processing so that jetty automatically
discovers and runs it. The <a class="link" href="embedded-examples.html" title="Embedded Examples">Embedded
Examples</a> section includes a <a class="link" href="embedded-examples.html#embedded-webapp-jsp" title="Web Application with JSP">worked code example</a> of how to do
this.</p><p>Alternatively, you can manually wire in the appropriate
ServletContainerInitializer as shown in the <a class="link" href="https://github.com/jetty-project/embedded-jetty-jsp/blob/master/src/main/java/org/eclipse/jetty/demo/Main.java" target="_top">embedded-jetty-jsp</a>
example on <a class="link" href="https://github.com/jetty-project" target="_top">github</a>, in which case
you will not need the jetty-annotations jar on your classpath, nor
include the AnnotationConfiguration in the list of <a class="link" href="configuring-webapps.html#webapp-configurations" title="Configuration Classes">configuration classes</a>.</p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e6586"></a>Precompiling JSPs</h3></div></div></div><p>You can either follow the instructions on precompilation provided by
the JSP container of your choice (either <a class="link" href="http://jsp.java.net" target="_top">Glassfish</a> or <a class="link" href="http://tomcat.apache.org/tomcat-8.0-doc/jasper-howto.html" target="_top">Apache</a>),
or if you are using maven for your builds, you can use the <a class="link" href="jetty-jspc-maven-plugin.html" title="Jetty Jspc Maven Plugin">jetty-jspc-maven</a> plugin to do it
for you.</p><p>If you have precompiled your jsps, and have customized the output
package prefix (which is <code class="literal">org.apache.jsp</code> by default),
you should configure your webapp context to tell Jetty about this custom
package name. You can do this using a servlet context init-param called
<code class="literal">org.eclipse.jetty.servlet.jspPackagePrefix</code>.</p><p>For example, suppose you have precompiled your jsps with the custom
package prefix of <code class="literal">com.acme</code>, then you would add the
following lines to your web.xml file:</p><div class="informalexample"><p><script type="syntaxhighlighter" class="brush: xml;toolbar: false">
<![CDATA[ <context-param>
<param-name>org.eclipse.jetty.servlet.jspPackagePrefix</param-name>
<param-value>com.acme</param-value>
</context-param>
]]>
</script></p></div><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title"><i class="icon-asterisk"></i> Note</h3><p>both jetty maven plugins - <a class="link" href="jetty-jspc-maven-plugin.html" title="Jetty Jspc Maven Plugin">jetty-jspc-maven-plugin</a> and the
<a class="link" href="jetty-maven-plugin.html" title="Configuring the Jetty Maven Plugin">jetty-maven-plugin</a> - will only
use Apache Jasper</p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="compiling-jsps"></a>Runtime Compiling JSPs</h3></div></div></div><p>Depending on which JSP container you elect to use, the configuration
and compilation characteristics will be different.</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6632"></a>Apache JSP Container</h4></div></div></div><p>By default, the Apache JSP container will look for the Eclipse
Java Compiler (jdt). The jetty distribution ships a copy of this in
$JETTY_HOME/lib/apache-jsp. If you wish to use a different compiler, you
will need to configure the <code class="literal">compilerClassName</code>
init-param on the <code class="literal">JspServlet</code> with the name of the
class.</p><div class="table"><a name="d0e6643"></a><p class="title"><b>Table&nbsp;8.1.&nbsp;Understanding Apache JspServlet Parameters</b></p><div class="table-contents"><table summary="Understanding Apache JspServlet Parameters" border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th align="left">init param</th><th align="left">Description</th><th align="left">Default</th><th align="left"><code class="filename">webdefault.xml</code></th></tr></thead><tbody><tr><td>classpath</td><td><code class="code">Classpath used for jsp compilation. Only used if
org.apache.catalina.jsp_classpath context attribute is not
set, which it is in Jetty.</code></td><td>-</td><td>&#8211;</td></tr><tr><td>classdebuginfo</td><td>Include debugging info in class file.</td><td>TRUE</td><td>&#8211;</td></tr><tr><td>checkInterval</td><td>Interval in seconds between background recompile
checks. Only relevant if <code class="code">
development=false</code>.</td><td>0</td><td>&#8211;</td></tr><tr><td>development</td><td><code class="code">development=true</code>, recompilation checks
occur on each request. See also <code class="code">
modificationTestInterval</code>.</td><td>TRUE</td><td>&#8211;</td></tr><tr><td>displaySourceFragment</td><td>Should a source fragment be included in exception
messages</td><td>TRUE</td><td>&#8211;</td></tr><tr><td>errorOnUseBeanInvalidClassAttribute</td><td>Should Jasper issue an error when the value of the
class attribute in an useBean action is not a valid bean
class</td><td>TRUE</td><td>&#8211;</td></tr><tr><td>fork</td><td>Should Ant fork its Java compiles of JSP pages?</td><td>TRUE</td><td>FALSE</td></tr><tr><td>keepgenerated</td><td>Do you want to keep the generated Java files
around?</td><td>TRUE</td><td>&#8211;</td></tr><tr><td>trimSpaces</td><td>Should white spaces between directives or actions be
trimmed?</td><td>FALSE</td><td>&#8211;</td></tr><tr><td>enablePooling</td><td>Determines whether tag handler pooling is
enabled.</td><td>TRUE</td><td>&#8211;</td></tr><tr><td>engineOptionsClass</td><td>Allows specifying the Options class used to configure
Jasper. If not present, the default EmbeddedServletOptions
will be used.</td><td>&#8211;</td><td class="auto-generated">&nbsp;</td></tr><tr><td>mappedFile</td><td>Support for mapped Files. Generates a servlet that has
a print statement per line of the JSP file&nbsp;</td><td>TRUE</td><td>&#8211;</td></tr><tr><td>suppressSmap</td><td>Generation of SMAP info for JSR45 debugging.</td><td>FALSE</td><td>&#8211;</td></tr><tr><td>dumpSmap</td><td>Dump SMAP JSR45 info to a file.</td><td>FALSE</td><td>&#8211;</td></tr><tr><td>genStrAsCharArray</td><td>Option for generating Strings.</td><td>FALSE</td><td>&#8211;</td></tr><tr><td>ieClassId</td><td>The class-id value to be sent to Internet Explorer when
using &lt;jsp:plugin&gt; tags.</td><td>clsid:8AD9C840-044E-11D1-B3E9-00805F499D93</td><td>&#8211;</td></tr><tr><td>maxLoadedJsps</td><td>The maximum number of JSPs that will be loaded for a
web application. If more than this number of JSPs are loaded,
the least recently used JSPs will be unloaded so that the
number of JSPs loaded at any one time does not exceed this
limit. A value of zero or less indicates no limit.</td><td>-1</td><td>&#8211;</td></tr><tr><td>jspIdleTimeout</td><td>The amount of time in seconds a JSP can be idle before
it is unloaded. A value of zero or less indicates never
unload.</td><td>-1</td><td>&#8211;</td></tr><tr><td>scratchDir</td><td>Directory where servlets are generated. See</td><td>&#8211;</td><td>&#8211;</td></tr><tr><td>compilerClassName</td><td>If not set, defaults to the Eclipse jdt
compiler.</td><td>&#8211;</td><td class="auto-generated">&nbsp;</td></tr><tr><td>compiler</td><td>Used if the Eclipse jdt compiler cannot be found on the
classpath. It is the classname of a compiler that Ant should
invoke.</td><td>&#8211;</td><td>&#8211;</td></tr><tr><td>compilerTargetVM</td><td>Target vm to compile for.</td><td>1.7</td><td>&#8211;</td></tr><tr><td>compilerSourceVM</td><td>Sets source compliance level for the jdt
compiler.</td><td>1.7</td><td>&#8211;</td></tr><tr><td>javaEncoding</td><td>Pass through the encoding to use for the
compilation.</td><td>UTF8</td><td>&#8211;</td></tr><tr><td>modificationTestInterval</td><td>If <code class="code">development=true</code>, interval between
recompilation checks, triggered by a request.</td><td>4</td><td>&#8211;</td></tr><tr><td>xpoweredBy</td><td>Generate an X-Powered-By response header.</td><td>FALSE</td><td>FALSE</td></tr><tr><td>recompileOnFail</td><td>If a JSP compilation fails should the
modificationTestInterval be ignored and the next access
trigger a re-compilation attempt? Used in development mode
only and is disabled by default as compilation may be
expensive and could lead to excessive resource usage.</td><td>-</td><td>&#8211;</td></tr></tbody></table></div></div><p><br class="table-break"></p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6910"></a>Glassfish JSP Container</h4></div></div></div><div class="section"><div class="titlepage"></div><p>To compile <code class="filename">.jsp</code> files into Java classes,
you need a Java compiler. You can acquire a Java compiler from the JVM
if you are using a full JDK, or from a third party Jar.</p><p>By default, the Glassfish JSP container tries to use the
compiler that is part of the JDK. <span class="bold"><strong>NOTE:</strong></span> when using the JDK compiler, the system
does <span class="emphasis"><em>not</em></span> save your class files to disk unless you
use the <code class="code">saveBytecode</code> init-param as described
below.</p><p>If you do not have a full JDK, you can configure the Eclipse
Java Compiler that Jetty ships in the distro in
<code class="filename">$JETTY_HOME/lib/jsp/.</code>You need to define a
SystemProperty that prevents the Glassfish JSP engine from defaulting
to the in-JVM compiler.</p><p>This is best done when using the standalone distro by
uncommenting the System property
<code class="literal">org.apache.jasper.compiler.disablejsr199</code> in the jsp
<a class="link" href="startup-modules.html" title="Managing Startup Modules">module</a>:</p><div class="informalexample"><script type="syntaxhighlighter" class="brush: plain;toolbar: false">
<![CDATA[
-Dorg.apache.jasper.compiler.disablejsr199=true
]]>
</script></div><p>Or for embedded usages, simply define this as a normal System
property.</p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="configuring-jsp-for-jetty"></a>Configuration</h4></div></div></div><p>The JSP engine has many configuration parameters. Some parameters
affect only precompilation, and some affect runtime recompilation
checking. Parameters also differ among the various versions of the JSP
engine. This page lists the configuration parameters, their meanings,
and their default settings. Set all parameters on the
<code class="code">org.apache.jasper.JspServlet</code> instance defined in the <a class="link" href="webdefault-xml.html" title="webdefault.xml"><code class="filename">webdefault.xml</code></a>
file.</p><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title"><i class="icon-asterisk"></i> Note</h3><p>Be careful: for all of these parameters, if the value you set
doesn't take effect, try using all lower case instead of camel case,
or capitalizing only some of the words in the name, as JSP is
inconsistent in its parameter naming strategy.</p></div><div class="table"><a name="d0e6963"></a><p class="title"><b>Table&nbsp;8.2.&nbsp;Understanding Glassfish JSP Parameters</b></p><div class="table-contents"><table summary="Understanding Glassfish JSP Parameters" border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th align="left">init param</th><th align="left">Description</th><th align="left">Default</th><th align="left"><code class="filename">webdefault.xml</code></th></tr></thead><tbody><tr><td>development</td><td><code class="code">development=true</code>, recompilation checks occur
on each request. See also <code class="code">
modificationTestInterval</code>.</td><td>TRUE</td><td>&#8211;</td></tr><tr><td>fork</td><td>Should Ant fork its Java compiles of JSP pages?</td><td>TRUE</td><td>FALSE</td></tr><tr><td>keepgenerated</td><td>Do you want to keep the generated Java files
around?</td><td>FALSE</td><td>&#8211;</td></tr><tr><td>saveBytecode</td><td>If class files are generated as byte arrays, should they
be saved to disk at the end of compilations?</td><td>FALSE</td><td>&#8211;</td></tr><tr><td>trimSpaces</td><td>Should white spaces between directives or actions be
trimmed?</td><td>FALSE</td><td>&#8211;</td></tr><tr><td>enablePooling</td><td>Determines whether tag handler pooling is
enabled.</td><td>TRUE</td><td>&#8211;</td></tr><tr><td>mappedFile</td><td>Support for mapped Files. Generates a servlet that has a
print statement per line of the JSP file./</td><td>TRUE</td><td>&#8211;</td></tr><tr><td>sendErrorToClient</td><td>If false, stack traces, etc., are sent to std error
instead of the client's browser.</td><td>FALSE</td><td>&#8211;</td></tr><tr><td>classdebuginfo</td><td>Include debugging info in class file.</td><td>TRUE</td><td>&#8211;</td></tr><tr><td>checkInterval</td><td>Interval in seconds between background recompile checks.
Only relevant if <code class="code"> development=false</code>.</td><td>0</td><td>&#8211;</td></tr><tr><td>suppressSmap</td><td>Generation of SMAP info for JSR45 debugging.</td><td>FALSE</td><td>&#8211;</td></tr><tr><td>dumpSmap</td><td>Dump SMAP JSR45 info to a file.</td><td>FALSE</td><td>&#8211;</td></tr><tr><td>genStrAsCharArray</td><td>Option for generating Strings.</td><td>FALSE</td><td>&#8211;</td></tr><tr><td>genStrAsByteArray</td><td>Option for generating Strings.</td><td>TRUE</td><td>&#8211;</td></tr><tr><td>defaultBufferNone</td><td>&nbsp;</td><td>FALSE</td><td>&#8211;</td></tr><tr><td>errorOnUseBeanInvalidClassAttribute</td><td>&nbsp;</td><td>FALSE</td><td>&#8211;</td></tr><tr><td>scratchDir</td><td>Directory where servlets are generated. Jetty sets this
value according to the [/display/JETTY/Temporary+Directories
work dir] settings for the webapp.</td><td>&#8211;</td><td>&#8211;</td></tr><tr><td>compiler</td><td>Determined at runtime. For Jetty this is the Eclipse jdt
compiler.</td><td>&#8211;</td><td>&#8211;</td></tr><tr><td>compilerTargetVM</td><td>Target vm to compile for.</td><td>1.5</td><td>&#8211;</td></tr><tr><td>compilerSourceVM</td><td>Sets source compliance level for the jdt
compiler.</td><td>1.5</td><td>&#8211;</td></tr><tr><td>javaEncoding</td><td>Pass through the encoding to use for the
compilation.</td><td>UTF8</td><td>&#8211;</td></tr><tr><td>modificationTestInterval</td><td>If <code class="code">development=true</code>, interval between
recompilation checks, triggered by a request.</td><td>0</td><td>&#8211;</td></tr><tr><td>xpoweredBy</td><td>Generate an X-Powered-By response header.</td><td>FALSE</td><td>FALSE</td></tr><tr><td>usePrecompiled/use-precompiled</td><td>&nbsp;</td><td>FALSE</td><td>&#8211;</td></tr><tr><td>validating/enableTldValidation</td><td>Whether or not to validate tag files against the
schema.</td><td>FALSE</td><td>&#8211;</td></tr><tr><td>reload-interval</td><td>If <code class="code">reload-interval=0</code>, then no runtime
checking of JSP, otherwise sets the checking interval for both
<code class="code">development=true</code> and
<code class="code">development=false</code>.</td><td>&#8211;</td><td>&#8211;</td></tr><tr><td>initial-capacity/initialCapacity</td><td>The initial capacity of the hash maps mapping the name of
the JSP to class and JSP file.</td><td>&#8211;</td><td>&#8211;</td></tr></tbody></table></div></div><br class="table-break"><p>Much confusion generally ensues about the
<code class="code">development</code>, <code class="code">checkInterval</code> and <code class="code">
modificationTestInterval</code> parameters and JSP runtime
recompilation. Here is a factoring out of the various options:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Check the JSP files for possible recompilation on every
request: </p><div class="informalexample"><script type="syntaxhighlighter" class="brush: xml;toolbar: false">
<![CDATA[
<init-param>
<param-name>development></param-name>
<param-value>true></param-value>
</init-param>
]]>
</script></div></li><li class="listitem"><p>Only check approximately every N seconds, where a request
triggers the time-lapse calculation. This example checks every 60
seconds: </p><div class="informalexample"><script type="syntaxhighlighter" class="brush: xml;toolbar: false">
<![CDATA[
<init-param>
<param-name>development></param-name>
<param-value>true></param-value>
</init-param>
<init-param>
<param-name>modificationTestInterval></param-name>
<param-value>60></param-value>
</init-param>
]]>
</script></div></li><li class="listitem"><p>Do no checking whatsoever, but still compile the JSP on the
very first hit. (Be aware that this ''reload-interval'' parameter is
shorthand for a ''development=false'' and ''checkInterval=0''
combination.): </p><div class="informalexample"><script type="syntaxhighlighter" class="brush: xml;toolbar: false">
<![CDATA[
<init-param>
<param-name>reload-interval></param-name>
<param-value>-1></param-value>
</init-param>
]]>
</script></div></li><li class="listitem"><p>Don't do any request-time checking, but instead start a
background thread to do checks every N seconds. This example checks
every 60 seconds: </p><div class="informalexample"><script type="syntaxhighlighter" class="brush: xml;toolbar: false">
<![CDATA[
<init-param>
<param-name>development></param-name>
<param-value>false></param-value>
</init-param>
<init-param>
<param-name>checkInterval></param-name>
<param-value>60></param-value>
</init-param>
]]>
</script></div></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="modifying-configuration"></a>Modifying Configuration</h3></div></div></div><p>Regardless of which JSP container you are using, there are several
options for modifying the JspServlet configuration.</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="overriding-webdefault.xml"></a>Overriding <code class="filename">webdefault.xml</code></h4></div></div></div><p>You can make a copy of the <a class="link" href="webdefault-xml.html" title="webdefault.xml">$JETTY_HOME/etc/webdefault.xml</a> that
ships with Jetty, apply your changes, and use it instead of the shipped
version. The example below shows how to do this when using the Jetty
Maven plugin.</p><div class="informalexample"><script type="syntaxhighlighter" class="brush: xml;toolbar: false">
<![CDATA[
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<webApp>
<defaultsDescriptor>src/main/resources/webdefault.xml</defaultsDescriptor>
</webApp>
</plugin>
]]>
</script></div><p>If you are using the Jetty distro, and you want to change the JSP
settings for just one or a few of your webapps, copy the
<code class="filename">$<a class="link" href="webdefault-xml.html" title="webdefault.xml">JETTY_HOME/etc/webdefault.xml</a></code>
file somewhere, modify it, and then use a <a class="link" href="quickstart-config-what.html#intro-jetty-configuration-contexts" title="Configuring Contexts">context xml</a> file to
set this file as the defaultsDescriptor for your webapp. Here's a
snippet:</p><div class="informalexample"><script type="syntaxhighlighter" class="brush: xml;toolbar: false">
<![CDATA[
<Configure class=>"org.eclipse.jetty.webapp.WebAppContext">
<Set name=>"contextPath">/foo</Set>
<Set name=>"war"><SystemProperty name=>"jetty.home" >default=>"."/>/webapps/foobar.war</Set>
<Set name=>"defaultsDescriptor">/home/smith/dev/webdefault.xml</Set>
</Configure>
]]>
</script></div><p>If you want to change the JSP settings for all webapps, edit
the<code class="filename"> $JETTY_HOME/etc/webdefaults.xml</code> file directly
instead.</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="configuring-jsp-servlet-in-web.xml"></a>Configuring the JSP Servlet in
<code class="filename">web.xml</code></h4></div></div></div><p>Another option is to add an entry for the JSPServlet to the
<code class="filename">WEB-INF/web.xml</code> file of your webapp and change or
add init-params. You may also add (but not remove) servlet-mappings. You
can use the entry in <a class="link" href="webdefault-xml.html" title="webdefault.xml">$JETTY_HOME/etc/webdefault.xml</a> as a
starting point.</p><div class="informalexample"><script type="syntaxhighlighter" class="brush: xml;toolbar: false">
<![CDATA[
<servlet id=>"jsp">
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</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>keepgenerated</param-name>
<param-value>>true</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>
<servlet id=>"my-servlet">
<servlet-name>myServlet</servlet-name>
<servlet-class>com.acme.servlet.MyServlet</servlet-class>
...
]]>
</script></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="using-jstl-taglibs-for-jetty7-jetty8"></a>Using JSTL Taglibs</h3></div></div></div><p>The JavaServer Pages Standlard Tag Library (JSTL) is part of the
Jetty distribution and is automatically put on the classpath when you
<a class="link" href="configuring-jsp.html#which-jsp-implementation" title="Which JSP Implementation">select your flavour of
JSP</a>. It is also automatically on the classpath for the jetty maven
plugin, which uses the Apache JSP engine as of jetty-9.2.</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="d0e7335"></a>Embedding</h4></div></div></div><p>If you are using jetty in an embedded scenario, and you need to
use JSTL, then you must ensure that the JSTL jars are included on the
<span class="emphasis"><em>container's</em></span> classpath - that is the classpath that
is the <span class="emphasis"><em>parent</em></span> of the webapp's classpath. This is a
restriction that arises from the Java EE specification.</p><p>The jars that you will include will depend on the flavour of JSP
that you are using. </p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a name="d0e7348"></a>With Glassfish JSP</h5></div></div></div><p>You will need to put the jstl jars that are present in
$jetty.home/lib/jsp onto the <span class="emphasis"><em>container's</em></span>
classpath. The Glassfish JSP engine will find the jstl tag definitions
inside these jars during startup.</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a name="d0e7356"></a>With Apache JSP</h5></div></div></div><p>You will need to put the jars that are present in the
$jetty.home/lib/apache-jstl directory onto the
<span class="emphasis"><em>container's</em></span> classpath. The Apache JSP engine will
find the jstl tag definitions inside these jars during startup.</p><p>As an efficiency enhancement, you can have jetty examine the
jstl jars to find the tags, and pre-feed them into the Apache JSP
engine. This is more efficient, because jetty will only scan the jars
you tell it to, whereas the Apache JSP engine will scan every jar,
which can be time-consuming in applications with a lot of jars on the
container classpath.</p><p>To take advantage of this efficiency enhancement, set up the
<a class="link" href="configuring-webapps.html#container-include-jar-pattern" title="org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern">org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern</a>
to include a <a class="link" href="http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html" target="_top">pattern</a>
that will match the names of the jstl jars. The <a class="link" href="embedded-examples.html" title="Embedded Examples">Embedded Examples</a> section includes
a <a class="link" href="embedded-examples.html#embedded-webapp-jsp" title="Web Application with JSP">worked code example</a> of
how to do this, here's a snippet from it:</p><div class="informalexample"><p><script type="syntaxhighlighter" class="brush: java;toolbar: false">
<![CDATA[ webapp.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",".*/[^/]*taglibs.*\\.jar$");]]>
</script></p></div></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="using-jsf-taglibs"></a>Using JSF Taglibs</h3></div></div></div><p>The following sections provide information about using JSF taglibs
with Jetty Standalone and the Jetty Maven Plugin.</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="using-jsf-taglibs-with-jetty-standalone"></a>Using JSF Taglibs with Jetty Distribution</h4></div></div></div><p>If you want to use JSF with your webapp, you need to copy the JSF
implementation Jar (whichever Jar contains the
<code class="filename">META-INF/*.tld</code> files from your chosen JSF
implementation) into Jetty's shared container lib directory. You can
either put them into the lib directory matching your JSP container of
choice (either $JETTY_HOME/lib/jsp for Glassfish JSP, or
$JETTY_HOME/lib/apache-jsp for Apache JSP), or put them into
$JETTY_HOME/lib/ext.</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="using-jsf-taglibs-with-jetty-maven-plugin"></a>Using JSF Taglibs with Jetty Maven Plugin</h4></div></div></div><p>You should make your JSF jars dependencies of the plugin and
<span class="emphasis"><em>not</em></span> the webapp itself. For example:</p><div class="informalexample"><script type="syntaxhighlighter" class="brush: xml;toolbar: false">
<![CDATA[
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<webApp>
<contextPath>/${artifactId}</contextPath>
</webApp>
<scanIntervalSeconds>5</scanIntervalSeconds>
</configuration>
<dependencies>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.0.8</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.0.8</version>
</dependency>
</dependencies>
</plugin>
]]>
</script></div></div></div></div></div><script type="text/javascript">
SyntaxHighlighter.all()
</script><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="spnego-support.html"><i class="icon-chevron-left"></i> Previous</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="configuring.html"><i class="icon-chevron-up"></i> Top</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="administration.html">Next <i class="icon-chevron-right"></i></a></td></tr><tr><td width="40%" align="left" valign="top">Spnego Support&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html"><i class="icon-home"></i> Home</a></td><td width="40%" align="right" valign="top">&nbsp;Part&nbsp;III.&nbsp;Jetty Administration Guide</td></tr></table></div><p xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times"><div class="jetty-callout">
See an error or something missing?
<span class="callout"><a href="http://github.com/jetty-project/jetty-documentation">Contribute to this documentation at
<span class="website"><i class="icon-github"></i> Github!</span></a></span><span style="float: right"><i>(Generated: 2015-06-15T13:18:17-05:00)</i></span></div></p><script xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-1149868-7']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script></body></html>