blob: 530fa1cacd0a0dff9647ec6f18694fb22958e16a [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 Wed Dec 24 20:45:51 PST 2008 -->
<TITLE>
ServletModule (Guice 1.0 API)
</TITLE>
<META NAME="date" CONTENT="2008-12-24">
<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 1.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>
<strong>
As of Guice 2.0, you can 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;&nbsp;</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;&nbsp;</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#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#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 is required to be a singleton and will implicitly be bound as one if it isn't
already. 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>
<DD><DL>
</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.</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.</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.</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.</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>