blob: a9bcabe0906c1262ae904cea70a388ab48660565 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_07) on Tue May 19 00:44:48 PDT 2009 -->
<TITLE>
ServletModule (Guice 2.0 API)
</TITLE>
<META NAME="date" CONTENT="2009-05-19">
<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
<SCRIPT type="text/javascript">
function windowTitle()
{
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="ServletModule (Guice 2.0 API)";
}
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</HEAD>
<BODY BGCOLOR="white" onload="windowTitle();">
<HR>
<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../com/google/inject/servlet/RequestScoped.html" title="annotation in com.google.inject.servlet"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/google/inject/servlet/ServletModule.FilterKeyBindingBuilder.html" title="interface in com.google.inject.servlet"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../../index.html?com/google/inject/servlet/ServletModule.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ServletModule.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->
<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
com.google.inject.servlet</FONT>
<BR>
Class ServletModule</H2>
<PRE>
<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
<IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/inject/AbstractModule.html" title="class in com.google.inject">com.google.inject.AbstractModule</A>
<IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.inject.servlet.ServletModule</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/inject/Module.html" title="interface in com.google.inject">Module</A></DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>ServletModule</B><DT>extends <A HREF="../../../../com/google/inject/AbstractModule.html" title="class in com.google.inject">AbstractModule</A></DL>
</PRE>
<P>
Configures the servlet scopes and creates bindings for the servlet API
objects so you can inject the request, response, session, etc.
<p>
You should subclass this module to register servlets and
filters in the <A HREF="../../../../com/google/inject/servlet/ServletModule.html#configureServlets()"><CODE>configureServlets()</CODE></A> method.
<P>
<P>
<HR>
<P>
<!-- ======== NESTED CLASS SUMMARY ======== -->
<A NAME="nested_class_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Nested Class Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;interface</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/inject/servlet/ServletModule.FilterKeyBindingBuilder.html" title="interface in com.google.inject.servlet">ServletModule.FilterKeyBindingBuilder</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;See the EDSL examples at <A HREF="../../../../com/google/inject/servlet/ServletModule.html#configureServlets()"><CODE>configureServlets()</CODE></A></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;interface</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/inject/servlet/ServletModule.ServletKeyBindingBuilder.html" title="interface in com.google.inject.servlet">ServletModule.ServletKeyBindingBuilder</A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;See the EDSL examples at <A HREF="../../../../com/google/inject/servlet/ServletModule.html#configureServlets()"><CODE>configureServlets()</CODE></A></TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../com/google/inject/servlet/ServletModule.html#ServletModule()">ServletModule</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/inject/servlet/ServletModule.html#configure()">configure</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configures a <A HREF="../../../../com/google/inject/Binder.html" title="interface in com.google.inject"><CODE>Binder</CODE></A> via the exposed methods.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/inject/servlet/ServletModule.html#configureServlets()">configureServlets</A></B>()</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Servlet Mapping EDSL</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="../../../../com/google/inject/servlet/ServletModule.FilterKeyBindingBuilder.html" title="interface in com.google.inject.servlet">ServletModule.FilterKeyBindingBuilder</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/inject/servlet/ServletModule.html#filter(java.lang.String, java.lang.String...)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;urlPattern,
<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>...&nbsp;morePatterns)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="../../../../com/google/inject/servlet/ServletModule.FilterKeyBindingBuilder.html" title="interface in com.google.inject.servlet">ServletModule.FilterKeyBindingBuilder</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/inject/servlet/ServletModule.html#filterRegex(java.lang.String, java.lang.String...)">filterRegex</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;regex,
<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>...&nbsp;regexes)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="../../../../com/google/inject/servlet/ServletModule.ServletKeyBindingBuilder.html" title="interface in com.google.inject.servlet">ServletModule.ServletKeyBindingBuilder</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/inject/servlet/ServletModule.html#serve(java.lang.String, java.lang.String...)">serve</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;urlPattern,
<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>...&nbsp;morePatterns)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="../../../../com/google/inject/servlet/ServletModule.ServletKeyBindingBuilder.html" title="interface in com.google.inject.servlet">ServletModule.ServletKeyBindingBuilder</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/inject/servlet/ServletModule.html#serveRegex(java.lang.String, java.lang.String...)">serveRegex</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;regex,
<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>...&nbsp;regexes)</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_com.google.inject.AbstractModule"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class com.google.inject.<A HREF="../../../../com/google/inject/AbstractModule.html" title="class in com.google.inject">AbstractModule</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../com/google/inject/AbstractModule.html#addError(com.google.inject.spi.Message)">addError</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#addError(java.lang.String, java.lang.Object...)">addError</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#addError(java.lang.Throwable)">addError</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#bind(java.lang.Class)">bind</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#bind(com.google.inject.Key)">bind</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#bind(com.google.inject.TypeLiteral)">bind</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#bindConstant()">bindConstant</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#binder()">binder</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#bindInterceptor(com.google.inject.matcher.Matcher, com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor...)">bindInterceptor</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#bindListener(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeListener)">bindListener</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#bindScope(java.lang.Class, com.google.inject.Scope)">bindScope</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#configure(com.google.inject.Binder)">configure</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#convertToTypes(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeConverter)">convertToTypes</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#currentStage()">currentStage</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#getMembersInjector(java.lang.Class)">getMembersInjector</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#getMembersInjector(com.google.inject.TypeLiteral)">getMembersInjector</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#getProvider(java.lang.Class)">getProvider</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#getProvider(com.google.inject.Key)">getProvider</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#install(com.google.inject.Module)">install</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#requestInjection(java.lang.Object)">requestInjection</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#requestStaticInjection(java.lang.Class...)">requestStaticInjection</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#requireBinding(java.lang.Class)">requireBinding</A>, <A HREF="../../../../com/google/inject/AbstractModule.html#requireBinding(com.google.inject.Key)">requireBinding</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="ServletModule()"><!-- --></A><H3>
ServletModule</H3>
<PRE>
public <B>ServletModule</B>()</PRE>
<DL>
</DL>
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>
<A NAME="configure()"><!-- --></A><H3>
configure</H3>
<PRE>
protected final void <B>configure</B>()</PRE>
<DL>
<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/inject/AbstractModule.html#configure()">AbstractModule</A></CODE></B></DD>
<DD>Configures a <A HREF="../../../../com/google/inject/Binder.html" title="interface in com.google.inject"><CODE>Binder</CODE></A> via the exposed methods.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/inject/AbstractModule.html#configure()">configure</A></CODE> in class <CODE><A HREF="../../../../com/google/inject/AbstractModule.html" title="class in com.google.inject">AbstractModule</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>
<A NAME="configureServlets()"><!-- --></A><H3>
configureServlets</H3>
<PRE>
protected void <B>configureServlets</B>()</PRE>
<DL>
<DD><h3>Servlet Mapping EDSL</h3>
<p> Part of the EDSL builder language for configuring servlets
and filters with guice-servlet. Think of this as an in-code replacement for web.xml.
Filters and servlets are configured here using simple java method calls. Here is a typical
example of registering a filter when creating your Guice injector:
<pre>
Guice.createInjector(..., new ServletModule() {
@Override
protected void configureServlets() {
<b>serve("*.html").with(MyServlet.class)</b>
}
}
</pre>
This registers a servlet (subclass of <code>HttpServlet</code>) called <code>MyServlet</code> to service
any web pages ending in <code>.html</code>. You can also use a path-style syntax to register
servlets:
<pre>
<b>serve("/my/*").with(MyServlet.class)</b>
</pre>
Every servlet (or filter) is required to be a singleton. If you cannot annotate the class
directly, you should add a separate <code>bind(..).in(Singleton.class)</code> rule elsewhere in
your module. Mapping a servlet that is bound under any other scope is an error.
<p>
<h4>Dispatch Order</h4>
You are free to register as many servlets and filters as you like this way. They will
be compared and dispatched in the order in which the filter methods are called:
<pre>
Guice.createInjector(..., new ServletModule() {
@Override
protected void configureServlets() {
filter("/*").through(MyFilter.class);
filter("*.css").through(MyCssFilter.class);
// etc..
serve("*.html").with(MyServlet.class);
serve("/my/*").with(MyServlet.class);
// etc..
}
}
</pre>
This will traverse down the list of rules in lexical order. For example, a url
"<code>/my/file.js</code>" (after it runs through the matching filters) will first
be compared against the servlet mapping:
<pre>
serve("*.html").with(MyServlet.class);
</pre>
And failing that, it will descend to the next servlet mapping:
<pre>
serve("/my/*").with(MyServlet.class);
</pre>
Since this rule matches, Guice Servlet will dispatch to <code>MyServlet</code>. These
two mapping rules can also be written in more compact form using varargs syntax:
<pre>
serve(<b>"*.html", "/my/*"</b>).with(MyServlet.class);
</pre>
This way you can map several URI patterns to the same servlet. A similar syntax is
also available for filter mappings.
<p>
<h4>Regular Expressions</h4>
You can also map servlets (or filters) to URIs using regular expressions:
<pre>
<b>serveRegex("(.)*ajax(.)*").with(MyAjaxServlet.class)</b>
</pre>
This will map any URI containing the text "ajax" in it to <code>MyAjaxServlet</code>. Such as:
<ul>
<li>http://www.google.com/ajax.html</li>
<li>http://www.google.com/content/ajax/index</li>
<li>http://www.google.com/it/is_totally_ajaxian</li>
</ul>
<h3>Initialization Parameters</h3>
Servlets (and filters) allow you to pass in init params
using the <code>&lt;init-param&gt;</code> tag in web.xml. You can similarly pass in parameters to
Servlets and filters registered in Guice-servlet using a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> of parameter
name/value pairs. For example, to initialize <code>MyServlet</code> with two parameters
(<code>name="Dhanji", site="google.com"</code>) you could write:
<pre>
Map&lt;String, String&gt; params = new HashMap&lt;String, String&gt;();
params.put("name", "Dhanji");
params.put("site", "google.com");
...
serve("/*").with(MyServlet.class, <b>params</b>)
</pre>
<p>
<h3>Binding Keys</h3>
You can also bind keys rather than classes. This lets you hide
implementations with package-local visbility and expose them using
only a Guice module and an annotation:
<pre>
...
filter("/*").through(<b>Key.get(Filter.class, Fave.class)</b>);
</pre>
Where <code>Filter.class</code> refers to the Servlet API interface and <code>Fave.class</code> is a
custom binding annotation. Elsewhere (in one of your own modules) you can bind this
filter's implementation:
<pre>
bind(Filter.class)<b>.annotatedWith(Fave.class)</b>.to(MyFilterImpl.class);
</pre>
See <A HREF="../../../../com/google/inject/Binder.html" title="interface in com.google.inject"><CODE>Binder</CODE></A> for more information on binding syntax.
<p>
<h3>Multiple Modules</h3>
It is sometimes useful to capture servlet and filter mappings from multiple different
modules. This is essential if you want to package and offer drop-in Guice plugins that
provide servlet functionality.
<p>
Guice Servlet allows you to register several instances of <code>ServletModule</code> to your
injector. The order in which these modules are installed determines the dispatch order
of filters and the precedence order of servlets. For example, if you had two servlet modules,
<code>RpcModule</code> and <code>WebServiceModule</code> and they each contained a filter that mapped
to the same URI pattern, <code>"/*"</code>:
<p>
In <code>RpcModule</code>:
<pre>
filter("/*").through(RpcFilter.class);
</pre>
In <code>WebServiceModule</code>:
<pre>
filter("/*").through(WebServiceFilter.class);
</pre>
Then the order in which these filters are dispatched is determined by the order in which
the modules are installed:
<pre>
<b>install(new WebServiceModule());</b>
install(new RpcModule());
</pre>
In the case shown above <code>WebServiceFilter</code> will run first.
<P>
<DD><DL>
<DT><B>Since:</B></DT>
<DD>2.0</DD>
</DL>
</DD>
</DL>
<HR>
<A NAME="filter(java.lang.String, java.lang.String...)"><!-- --></A><H3>
filter</H3>
<PRE>
protected final <A HREF="../../../../com/google/inject/servlet/ServletModule.FilterKeyBindingBuilder.html" title="interface in com.google.inject.servlet">ServletModule.FilterKeyBindingBuilder</A> <B>filter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;urlPattern,
<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>...&nbsp;morePatterns)</PRE>
<DL>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>urlPattern</CODE> - Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.<DT><B>Since:</B></DT>
<DD>2.0</DD>
</DL>
</DD>
</DL>
<HR>
<A NAME="filterRegex(java.lang.String, java.lang.String...)"><!-- --></A><H3>
filterRegex</H3>
<PRE>
protected final <A HREF="../../../../com/google/inject/servlet/ServletModule.FilterKeyBindingBuilder.html" title="interface in com.google.inject.servlet">ServletModule.FilterKeyBindingBuilder</A> <B>filterRegex</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;regex,
<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>...&nbsp;regexes)</PRE>
<DL>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>regex</CODE> - Any Java-style regular expression.<DT><B>Since:</B></DT>
<DD>2.0</DD>
</DL>
</DD>
</DL>
<HR>
<A NAME="serve(java.lang.String, java.lang.String...)"><!-- --></A><H3>
serve</H3>
<PRE>
protected final <A HREF="../../../../com/google/inject/servlet/ServletModule.ServletKeyBindingBuilder.html" title="interface in com.google.inject.servlet">ServletModule.ServletKeyBindingBuilder</A> <B>serve</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;urlPattern,
<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>...&nbsp;morePatterns)</PRE>
<DL>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>urlPattern</CODE> - Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.<DT><B>Since:</B></DT>
<DD>2.0</DD>
</DL>
</DD>
</DL>
<HR>
<A NAME="serveRegex(java.lang.String, java.lang.String...)"><!-- --></A><H3>
serveRegex</H3>
<PRE>
protected final <A HREF="../../../../com/google/inject/servlet/ServletModule.ServletKeyBindingBuilder.html" title="interface in com.google.inject.servlet">ServletModule.ServletKeyBindingBuilder</A> <B>serveRegex</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;regex,
<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>...&nbsp;regexes)</PRE>
<DL>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>regex</CODE> - Any Java-style regular expression.<DT><B>Since:</B></DT>
<DD>2.0</DD>
</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../com/google/inject/servlet/RequestScoped.html" title="annotation in com.google.inject.servlet"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/google/inject/servlet/ServletModule.FilterKeyBindingBuilder.html" title="interface in com.google.inject.servlet"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../../index.html?com/google/inject/servlet/ServletModule.html" target="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="ServletModule.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;<SCRIPT type="text/javascript">
<!--
if(window==top) {
document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<HR>
</BODY>
</HTML>