下面我们来看看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 {
@Override
protected 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{
@Override
protected 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注解,不然会报错 @Singleton public class MyServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp) ; } @Override protected 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)得到的结果是: