guice基本使用,guice整合guice-servlet,web開發(五)


介紹

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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM