介紹
Guice Servlet 為使用web應用程序和Servlet容器提供了一個完整的模式。. Guice's servlet 擴展允許從你的servlet應用中完全淘汰web.xml,並且具有類型安全(type-safe)的優勢。 符合Java方式的配置你的servlet和filter組件。
這不僅在於可以使用更好的API來配置你的web應用程序,而且也在於在web應用組件中加入依賴注入,意味着你的servlet和filter得益於以下幾個方面:
- 構造方法注入(Constructor injection)
- 類型安全,更符合習慣的配置方式(Type-safe, idiomatic configuration)
- 模塊化(打包和發布個性化的Guice Servlet類庫
- Guice 面向切面編程
在標准的servlet生命周期都將受益。
guice servlet簡化了傳統servlet的開發。
具體如下:
1 <filter> 2 <filter-name>guiceFilter</filter-name> 3 <filter-class>com.google.inject.servlet.GuiceFilter</filter-class><!--這個是guice servlet的過濾器--> 4 </filter> 5 <filter-mapping> 6 <filter-name>guiceFilter</filter-name> 7 <url-pattern>/*</url-pattern> 8 </filter-mapping> 9 <listener> 10 <listener-class>com.ming.core.web.listener.GoogleGuiceServletContextListener</listener-class><!--這個是用於注冊module及servlet的--> 11 </listener>
1 package com.ming.core.web.listener; 2 3 import com.google.inject.Guice; 4 import com.google.inject.Injector; 5 import com.google.inject.servlet.GuiceServletContextListener; 6 import com.ming.user.UserModule; 7 8 public class GoogleGuiceServletContextListener extends GuiceServletContextListener { 9 10 @Override 11 protected Injector getInjector() { 12 13 return Guice.createInjector(new UserModule()); 14 //如果綁定多個module,需要像下面這樣就可以了 15 //return Guice.createInjector(new UserModule(),new UserModule()); 16 } 17 18 }
1 package com.ming.user; 2 3 import com.google.inject.AbstractModule; 4 import com.google.inject.servlet.ServletModule; 5 import com.ming.core.web.filter.EncodeFilter; 6 import com.ming.user.action.UserServlet; 7 public class UserModule extends AbstractModule { 8 9 10 @Override 11 protected void configure() { 12 install(new ServletModule(){ 13 @Override 14 protected void configureServlets() { 15 16 //配置你訪問的servlet 17 //serve("/UserServlet").with(UserServlet.class); 18 19 //如果你一個servlet擁有多個訪問地址,這樣配置就可以了 20 serve("/UserServlet","/UserController").with(UserServlet.class); 21 22 //如果你想你的url支持正則匹配,可以像下面這樣寫 23 //serveRegex("^user").with(UserServlet.class); 24 25 //同理filter配置如下 26 //filter("/encodeFilter").through(EncodeFilter.class); 27 28 //多個地址 29 //filter("/encodeFilter","/haha").through(EncodeFilter.class); 30 31 //支持正則 32 //filterRegex("^aaa").through(EncodeFilter.class); 33 34 } 35 }); 36 37 } 38 39 40 }
1 package com.ming.user.action; 2 3 import java.io.IOException; 4 import java.util.ArrayList; 5 import java.util.List; 6 7 import javax.servlet.ServletException; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletResponse; 11 12 import com.google.inject.Inject; 13 import com.google.inject.Singleton; 14 import com.ming.user.entity.User; 15 import com.ming.user.service.UserService; 16 17 /** 18 * 19 * @author mingge 20 * 21 */ 22 @Singleton 23 public class UserServlet extends HttpServlet { 24 25 26 private static final long serialVersionUID = 1L; 27 28 @Inject 29 private UserService userService; 30 31 protected void doGet(HttpServletRequest request, HttpServletResponse response) 32 throws ServletException, IOException { 33 34 String account = request.getParameter("account"); 35 int userId = Integer.valueOf(request.getParameter("userid")); 36 User u = new User(); 37 u.setAccount(account); 38 u.setUser_id(userId); 39 List<User> ulist=new ArrayList<>(); 40 ulist.add(u); 41 try { 42 userService.add(u); 43 System.out.println("ok"); 44 } catch (Exception e) { 45 System.out.println("error"); 46 e.printStackTrace(); 47 // 注意:調用service層的方法出異常之后,繼續將異常拋出,這樣在TransactionFilter就能捕獲到拋出的異常,繼而執行事務回滾操作 48 throw new RuntimeException(e); 49 } 50 51 } 52 53 protected void doPost(HttpServletRequest request, HttpServletResponse response) 54 throws ServletException, IOException { 55 56 doGet(request, response); 57 } 58 59 }
看起簡單吧。具體例子下載:http://pan.baidu.com/s/1geMXE1t