Google Guice之Servlet

来源:互联网 发布:淘宝返利网怎么报名 编辑:程序博客网 时间:2024/05/10 19:04

下面我们来看看Guiceweb的开发,这里需要注意的是你选用的guice和guice-Servlet的jar的版本最好已知,不一致的话可能会出现问题,原先我是用guice-3.0.jar和guice-servlet.jar,但是在启动web的时候报了一个类找不到,我换成了guice-servlet-30.jar就可以了。

(1)要开发Guice的web程序,首先得在你的web.xml 文件里面加上如下配置:

<!-- 添加Guice的Filter --><filter><filter-name>MyWebGuice</filter-name><filter-class>com.google.inject.servlet.GuiceFilter</filter-class></filter><filter-mapping><filter-name>MyWebGuice</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 由于GuiceFilter中没有完成Guice的初始化工作,所以我们必须自己顶一个Listener来完成Guice Injector的初始化工作 --><listener><listener-class>guice.web.listener.MyGuiceWebListener</listener-class></listener>

(2)实现MyGuiceWebListener类

import guice.web.module.MyWebModule;import com.google.inject.Guice;import com.google.inject.Injector;import com.google.inject.Singleton;import com.google.inject.servlet.GuiceServletContextListener;/** *  * @author Java_Le * @Date 2014-5-3下午01:47:34 * @ClassName MyGuiceWebListener.java *  * 集成GuiceServletContextListener完成Guice的初始化工作 * 返回一个Injector */public class MyGuiceWebListener extends GuiceServletContextListener {@Overrideprotected Injector getInjector() {return Guice.createInjector(new MyWebModule());//这边我自己定义了一个MyWebModule,这个类集成了ServletModule}}
(3)来看看MyWebModule这个类,这里里面完成将url和Servlet之间的绑定,通过调用serve(urlPath).with(sub HttpServlet)

package guice.web.module;import guice.web.servlet.MyServlet;import com.google.inject.servlet.ServletModule;public class MyWebModule extends ServletModule{@Overrideprotected void configureServlets() {super.configureServlets();//在这里可以完成完成加一些url绑定到我们的servlet上//原先这一部分实在web.xml里面配置的serve("/myServlet").with(MyServlet.class) ;}}
(4)定义一个Servlet
package guice.web.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.google.inject.Singleton;//由于Servlet是单例的,所以必须加上@Singleton注解,不然会报错@Singletonpublic class MyServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doPost(req, resp) ;}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.getWriter().write("I am MtServlet print information to front page.") ;}}


(4)启动web,然后在浏览器里面输入(GuiceWeb是我这个web的工程名)

http://localhost:8080/GuiceWeb/myServlet

(5)得到的结果是:



0 0