springMVC框架 對BaseCtrl封裝,簡化開發

  讓你的項目有對象,你的項目如何纔會有面向對象特徵呢?沒有面向對象特徵的項目不是好項目哦。此篇博文會使用到面向對象特徵中的封裝繼承,還有就是枚舉類型。這篇博文教你如何讓你的項目體現面向對象特徵。前端

  最近公司須要作一個後臺系統,作了幾個月了老系統的維護更新,真心有點受不了,畢竟一個項目通過了幾我的的手,每一個人的代碼風格都不同,而後以爲花段時間對老架構進行優化封裝,本人作事通常喜歡先開始把準備工做作好,「磨刀不誤砍柴工」  是我作事一貫的風格,喜歡帶着匠心精神去作某件事這樣纔會有更大的進步,帶着「如何寫優質的代碼?」「如何優化程序的性能」的心去寫代碼,在公司實現我的價值。作個個精緻的人,作個豬豬男孩【滑稽】。項目遵循阿里巴巴java開發手則哦java

 

 

主題開始!!web

問題:使用springmvc 視圖框架,有個很麻煩的地方就是,咱們須要request和response 對象時咱們就須要在方法參數欄中spring

public String index(HttpServletRequest request) 添加request接口,json

做者以爲這樣很麻煩,還有就是我想從session對象中讀取登入用戶,就須要寫一條很長的代碼,鄙人內心一萬個mmp。session

 1,BaseCtrl類的編寫架構

 1 package cc.royao.mana.ctrl.base;
 2 
 3 import java.util.Map;
 4 
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 import javax.servlet.http.HttpSession;
 8 
 9 import org.springframework.web.bind.annotation.ModelAttribute;
10 
11 import com.alibaba.fastjson.JSONObject;
12 
13 import cc.royao.common.Constants;
14 import cc.royao.mana.auth.model.Manager;
15 import cc.royao.mana.auth.model.TsMember;
16 
17 /**
18  * 控制器基礎類
19  * @author 朱孝輝
20  *
21  */
22 public class BaseCtrl {
23 
24     //region HttpRequest Response Session
25     protected HttpServletRequest request;
26     
27     protected HttpServletResponse response;
28     
29     protected HttpSession session;
30     
31     // 登入用戶
32     protected Manager tsMember;
33     
34     // 前端傳來的參數
35     protected Map<String, Object> params; 
36     /**
37      * 說明:@ModelAttribute的做用
38         1)放置在方法的形參上:表示引用Model中的數據
39         2)放置在方法上面:表示請求該類的每一個Action前都會首先執行它,也能夠將一些準備數據的操做放置在該方法裏面。
40      * @param request
41      * @param response
42      */
43     @ModelAttribute
44     public void setReqAndRes(HttpServletRequest request, HttpServletResponse response){
45         this.request = request;
46         this.response = response;
47         this.session = request.getSession();
48         this.params = JSONObject.parseObject(request.getParameter("map"));// 前端傳map對象(是轉了json字符串的對象哦)到後臺,獲得json字符串最後轉json對象返回給Map
49         this.tsMember = (Manager) this.session.getAttribute(Constants.SESSION_USERINFO);//Constants.SESSION_USERINFO 爲保存用戶session的key
50     }
51     protected String getIp(HttpServletRequest request) { //獲得請求用戶的ip地址
52         String ip = request.getHeader("x-forwarded-for");
53         if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
54             ip = request.getHeader("Proxy-Client-IP");
55         }
56         if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
57             ip = request.getHeader("WL-Proxy-Client-IP");
58         }
59         if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
60             ip = request.getRemoteAddr();
61         }
62         return ip;
63 
64     }
65 }

當每次請求一個繼承了BaseCtrl類的接口類,都會先執行setReqAndRes方法,有興趣的同窗能夠去看看@ModelAttribute我上面也寫了一些介紹。mvc

這樣咱們就不用在接口方法參數欄中寫request了,直接使用父類的request的成員變量就行。app

 

 1 @Controller
 2 @RequestMapping("/wallet")
 3 @SuppressWarnings("rawtypes")
 4 public class WalletCtrl extends BaseCtrl implements BaseController{
 5     
 6     private final Logger logger = Logger.getLogger(this.getClass()); //logger打印日誌文件 ,log對象請使用 private final 修飾哦
 7     
 8     /**
 9      * 首頁
10      */
11     @Override
12     @RequestMapping("/index.htm")
13     public String index() {
14         System.out.println(request);
15         System.out.println(response);
16         System.out.println(request.getSession().getAttribute(Constants.SESSION_USERINFO));
17         return "walletManage/wallet/list";
18     }

 

 

這樣是否是很方便呢?喜歡的能夠點贊哦【比心】框架

相關文章
相關標籤/搜索