﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Kava Pava Gava Tava Nava Zava Java-随笔分类-GUI</title><link>http://www.blogjava.net/bing/category/43039.html</link><description>everything about Java</description><language>zh-cn</language><lastBuildDate>Wed, 17 Mar 2010 04:35:15 GMT</lastBuildDate><pubDate>Wed, 17 Mar 2010 04:35:15 GMT</pubDate><ttl>60</ttl><item><title>GUICE 与 Servlet 以及 Vaadin 的集成</title><link>http://www.blogjava.net/bing/archive/2010/03/16/vaadin_guice_servlet_integration.html</link><dc:creator>bing</dc:creator><author>bing</author><pubDate>Tue, 16 Mar 2010 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/bing/archive/2010/03/16/vaadin_guice_servlet_integration.html</guid><wfw:comment>http://www.blogjava.net/bing/comments/315569.html</wfw:comment><comments>http://www.blogjava.net/bing/archive/2010/03/16/vaadin_guice_servlet_integration.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bing/comments/commentRss/315569.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bing/services/trackbacks/315569.html</trackback:ping><description><![CDATA[<strong>部分（1）：GUICE 与 Servlet 集成</strong><br />
<br />
http://code.google.com/p/google-guice/wiki/Servlets<br />
<br />
Guice 提供了与 Servlet 的集成，可以完全替代 web.xml，使用类型安全，Java程序员所习惯的方式对 servlet 和 filter 进行配置。<a name="Introduction"><br />
<br />
</a>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">guiceFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.google.inject.servlet.GuiceFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">guiceFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span></div>
<a name="Introduction"><br />
首先，下载最新版本的 guice-servlet jar 包，将其与 guice 的包共同放在 classpath 路径下。然后将 GuiceFilter 放在 web.xml 的起始位置，</a>这样，对于任何路径，guiceFilter 都会被使用，得到控制。<br />
<br />
下面，要对 Guice 进行配置，方法是：&nbsp;&nbsp; Guice.createInjector(newServletModule());<br />
<br />
这句话可以在任何时候被调用，但推荐的做法是在一个 ServletContextListener 中被调用，这个 Listener 在 Web 应用启动时被调用，在任何请求到来之前。做法如下，首先扩展 Google 提供的基类：<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyGuiceServletConfig&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;GuiceServletContextListener&nbsp;{<br />
<br />
&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;Injector&nbsp;getInjector()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;Guice.createInjector(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ServletModule());<br />
&nbsp;&nbsp;}<br />
}</span></div>
<br />
然后在 web.xml 中进行注册<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.example.MyGuiceServletConfig</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span></div>
<br />
配置 servlet 是在 ServletModule 中进行的。以下是一个匿名类的例子：<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">&nbsp;&nbsp;&nbsp;Guice.createInjector(<img alt="" src="http://www.blogjava.net/Images/dot.gif" />,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ServletModule()&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;configureServlets()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serve(</span><span style="color: #000000">"</span><span style="color: #000000">*.html</span><span style="color: #000000">"</span><span style="color: #000000">).with(MyServlet.</span><span style="color: #0000ff">class</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}</span></div>
<br />
可以用 web.xml风格的路径限制法 serve("/my/*").with(MyServlet.class)。<br />
<br />
也可以类似地配置 filter: <br />
filter("/*").through(MyFilter.class);<br />
<br />
注意：每个 servlet 和 filter 都必须是 @Singleton，必须在标注或者 module 里面指明，所有不是 Singleton 的 scope 都是错误。这与 Servlet 的规范一致。<br />
<br />
安装了 ServletModule 模块后，任何 Guice 注入的实例都可以被注入下面的对象：<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">@RequestScoped<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SomeNonServletPojo&nbsp;{<br />
<br />
&nbsp;&nbsp;@Inject<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;SomeNonServletPojo(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response,&nbsp;HttpSession&nbsp;session)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /><br />
&nbsp;&nbsp;}<br />
<br />
}</span></div>
<br />
此外，http请求的参数可以如此注入： @Inject @RequestParameters Map&lt;String, String[]&gt; params;<br />
<br />
分配顺序：<br />
<br />
filter 和 servlet 将会按照在&nbsp;ServletModule 里面出现的顺序分配。<br />
<br />
此外，可以一次匹配多个路径：&nbsp;serve("*.html", "/my/*").with(MyServlet.class);<br />
<br />
正则文法匹配：serveRegex("(.)*ajax(.)*").with(MyAjaxServlet.class)<br />
<br />
指定初始化参数：<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;Map</span><span style="color: #000000">&lt;</span><span style="color: #000000">String,&nbsp;String</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;params&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HashMap</span><span style="color: #000000">&lt;</span><span style="color: #000000">String,&nbsp;String</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;params.put(</span><span style="color: #000000">"</span><span style="color: #000000">coffee</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Espresso</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;params.put(</span><span style="color: #000000">"</span><span style="color: #000000">site</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">google.com</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serve(</span><span style="color: #000000">"</span><span style="color: #000000">/*</span><span style="color: #000000">"</span><span style="color: #000000">).with(MyServlet.</span><span style="color: #0000ff">class</span><span style="color: #000000">,&nbsp;params)</span></div>
<br />
这些参数可以用 <a name="Initialization_Parameters"><tt>getInitParams</tt></a>&nbsp;得到。<br />
<br />
其他高级特性省略不再讨论。<br />
<br />
<strong>部分（2）：GUICE 与&nbsp;Vaadin 集成</strong><br />
<br />
http://vaadin.com/wiki/-/wiki/Main/Integrating Vaadin with Guice 2.0<br />
<br />
首先，下载 guice-2.0.jar, guice-servlet-2.0.jar, aopalliance.jar，将这些包拷贝到 <span style="font-family: monospace; white-space: pre">WebContent/WEB-INF/lib/ 目录。<br />
</span><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.ServletException;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpServletRequest;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.google.inject.Inject;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.google.inject.Provider;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.google.inject.Singleton;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.vaadin.Application;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.vaadin.terminal.gwt.server.AbstractApplicationServlet;<br />
<br />
@Singleton<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;GuiceApplicationServlet&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;AbstractApplicationServlet&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;Provider</span><span style="color: #000000">&lt;</span><span style="color: #000000">Application</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;applicationProvider;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Inject<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;GuiceApplicationServlet(Provider</span><span style="color: #000000">&lt;</span><span style="color: #000000">Application</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;applicationProvider)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.applicationProvider&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;applicationProvider;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;Class&nbsp;getApplicationClass()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ClassNotFoundException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;Application.</span><span style="color: #0000ff">class</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;Application&nbsp;getNewApplication(HttpServletRequest&nbsp;request)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ServletException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;applicationProvider.get();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
&nbsp;<br />
上面这个class 可以直接拷贝到项目中不需要改变。Provider 由 Guice 注入，为每个用户创建一个 Application 实例。<br />
<br />
下面是一个简单的 Application 的例子。其中参数 text 是被注入的。<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">#</span><span style="color: #000000">!</span><span style="color: #000000">java<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.google.inject.Inject;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.google.inject.name.Named;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.vaadin.Application;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.vaadin.ui.Label;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.vaadin.ui.Window;<br />
<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyApplication&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Application&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Inject&nbsp;@Named(</span><span style="color: #000000">"</span><span style="color: #000000">welcome</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;String&nbsp;text;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Window&nbsp;window&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Window();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.addComponent(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Label(text));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setMainWindow(window);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
<br />
初始化，需要写一个 Guice 的 GuiceServletContextListener来配置 ServletModule，配置 Servlet，Application，以及其他 Guice 管理的实例，比如上面例子用到的 text。<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">#</span><span style="color: #000000">!</span><span style="color: #000000">java<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.google.inject.Guice;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.google.inject.Injector;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.google.inject.name.Names;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.google.inject.servlet.GuiceServletContextListener;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.google.inject.servlet.ServletModule;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.google.inject.servlet.ServletScopes;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.vaadin.Application;<br />
<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyServletConfig&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;GuiceServletContextListener&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;Injector&nbsp;getInjector()&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletModule&nbsp;module&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ServletModule()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;configureServlets()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serve(</span><span style="color: #000000">"</span><span style="color: #000000">/*</span><span style="color: #000000">"</span><span style="color: #000000">).with(GuiceApplicationServlet.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bind(Application.</span><span style="color: #0000ff">class</span><span style="color: #000000">).to(MyApplication.</span><span style="color: #0000ff">class</span><span style="color: #000000">).in(ServletScopes.SESSION);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bindConstant().annotatedWith(Names.named(</span><span style="color: #000000">"</span><span style="color: #000000">welcome</span><span style="color: #000000">"</span><span style="color: #000000">)).to(</span><span style="color: #000000">"</span><span style="color: #000000">This&nbsp;is&nbsp;my&nbsp;first&nbsp;Vaadin/Guice&nbsp;Application</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Injector&nbsp;injector&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Guice.createInjector(module);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;injector;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<br />
web.xml 需要如此配置，来启动 Guice Filter 和上面的那个配置模块 (Listener)<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">&lt;</span><span style="color: #800000">web-app</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">guiceFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.google.inject.servlet.GuiceFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">guiceFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">de.timedout.vaadin.guice.MyServletConfig</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">web-app</span><span style="color: #0000ff">&gt;</span></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/bing/aggbug/315569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bing/" target="_blank">bing</a> 2010-03-16 15:05 <a href="http://www.blogjava.net/bing/archive/2010/03/16/vaadin_guice_servlet_integration.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于 Vaadin / Hibernate 应用开发的结构的考虑</title><link>http://www.blogjava.net/bing/archive/2010/01/06/307894.html</link><dc:creator>bing</dc:creator><author>bing</author><pubDate>Wed, 06 Jan 2010 03:41:00 GMT</pubDate><guid>http://www.blogjava.net/bing/archive/2010/01/06/307894.html</guid><wfw:comment>http://www.blogjava.net/bing/comments/307894.html</wfw:comment><comments>http://www.blogjava.net/bing/archive/2010/01/06/307894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bing/comments/commentRss/307894.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bing/services/trackbacks/307894.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 关于 vaadin 应用的构架的思考。特别是结合 hibernate 以及 hibernate validate&nbsp;&nbsp;<a href='http://www.blogjava.net/bing/archive/2010/01/06/307894.html'>阅读全文</a><img src ="http://www.blogjava.net/bing/aggbug/307894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bing/" target="_blank">bing</a> 2010-01-06 11:41 <a href="http://www.blogjava.net/bing/archive/2010/01/06/307894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Exploring Vaadin (6) - summary of several classes</title><link>http://www.blogjava.net/bing/archive/2009/12/30/307121.html</link><dc:creator>bing</dc:creator><author>bing</author><pubDate>Wed, 30 Dec 2009 06:05:00 GMT</pubDate><guid>http://www.blogjava.net/bing/archive/2009/12/30/307121.html</guid><wfw:comment>http://www.blogjava.net/bing/comments/307121.html</wfw:comment><comments>http://www.blogjava.net/bing/archive/2009/12/30/307121.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bing/comments/commentRss/307121.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bing/services/trackbacks/307121.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Something about:<br>Abstract Class PropertyFormatter<br>Abstract Class AbstractSelect<br>Interface FormFieldFactory<br>Abstract Class AbstractField&nbsp;&nbsp;<a href='http://www.blogjava.net/bing/archive/2009/12/30/307121.html'>阅读全文</a><img src ="http://www.blogjava.net/bing/aggbug/307121.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bing/" target="_blank">bing</a> 2009-12-30 14:05 <a href="http://www.blogjava.net/bing/archive/2009/12/30/307121.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Exploring Vaadin (4) 阅读 com.vaadin.data.util.MethodProperty 源代码 </title><link>http://www.blogjava.net/bing/archive/2009/12/23/reading_vaadin_methodproperty_source.html</link><dc:creator>bing</dc:creator><author>bing</author><pubDate>Wed, 23 Dec 2009 09:35:00 GMT</pubDate><guid>http://www.blogjava.net/bing/archive/2009/12/23/reading_vaadin_methodproperty_source.html</guid><wfw:comment>http://www.blogjava.net/bing/comments/307063.html</wfw:comment><comments>http://www.blogjava.net/bing/archive/2009/12/23/reading_vaadin_methodproperty_source.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bing/comments/commentRss/307063.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bing/services/trackbacks/307063.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 阅读 com.vaadin.data.util.MethodProperty 源代码的笔记。阅读 MethodProperty 的目的是因为这个类是 Property，同时处理 Bean 的属性。本以为可能会牵扯到 Vaadin 处理类型转换的地方，可以了解一下 Vaadin 是如何操作的。结果发现错了。应该看看 com.vaadin.data.util.PropertyFormatter ，才是用来进行类型转换的。&nbsp;&nbsp;<a href='http://www.blogjava.net/bing/archive/2009/12/23/reading_vaadin_methodproperty_source.html'>阅读全文</a><img src ="http://www.blogjava.net/bing/aggbug/307063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bing/" target="_blank">bing</a> 2009-12-23 17:35 <a href="http://www.blogjava.net/bing/archive/2009/12/23/reading_vaadin_methodproperty_source.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Exploring Vaadin (2) - Vaadin + Hibernate discussions on Internet</title><link>http://www.blogjava.net/bing/archive/2009/12/16/vaadin_hibernate.html</link><dc:creator>bing</dc:creator><author>bing</author><pubDate>Wed, 16 Dec 2009 07:52:00 GMT</pubDate><guid>http://www.blogjava.net/bing/archive/2009/12/16/vaadin_hibernate.html</guid><wfw:comment>http://www.blogjava.net/bing/comments/306038.html</wfw:comment><comments>http://www.blogjava.net/bing/archive/2009/12/16/vaadin_hibernate.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bing/comments/commentRss/306038.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bing/services/trackbacks/306038.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Study of discussions on Internet about Vaadin + Hibernate&nbsp;&nbsp;<a href='http://www.blogjava.net/bing/archive/2009/12/16/vaadin_hibernate.html'>阅读全文</a><img src ="http://www.blogjava.net/bing/aggbug/306038.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bing/" target="_blank">bing</a> 2009-12-16 15:52 <a href="http://www.blogjava.net/bing/archive/2009/12/16/vaadin_hibernate.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Exploring Vaadin (1) - Data</title><link>http://www.blogjava.net/bing/archive/2009/12/11/vaadin_data.html</link><dc:creator>bing</dc:creator><author>bing</author><pubDate>Fri, 11 Dec 2009 10:35:00 GMT</pubDate><guid>http://www.blogjava.net/bing/archive/2009/12/11/vaadin_data.html</guid><wfw:comment>http://www.blogjava.net/bing/comments/305542.html</wfw:comment><comments>http://www.blogjava.net/bing/archive/2009/12/11/vaadin_data.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bing/comments/commentRss/305542.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bing/services/trackbacks/305542.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: This article examines com.vaadin.data pacakge - the data source model for vaadin - and provide a summary. It also examine the relationship between data source and some UI classes.<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/bing/archive/2009/12/11/vaadin_data.html'>阅读全文</a><img src ="http://www.blogjava.net/bing/aggbug/305542.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bing/" target="_blank">bing</a> 2009-12-11 18:35 <a href="http://www.blogjava.net/bing/archive/2009/12/11/vaadin_data.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>