Filter實現簡陋版MVC

2021-09-11 20:39:23 字數 3113 閱讀 3542

先說一下涉及的技術點,filter,servlet,io,反射,map,註解

整體思路:

一:容器准配

1,先載入properties配置檔案, 遍歷配置檔案中所有的key-value對,key為名,value為類的全路徑

2,根據反射建立物件,將物件放入map容器當中,以配置檔案中配置的key作為map容器的key值,物件作為value

3,遍歷map容器,獲得物件中的所有field,遍歷field陣列,如果field欄位上有@resource註解,就根據註解的name值作為key從容器中獲得相應物件,然後使用反射將注入到字段當中

二:接收請求時的處理思路

1,在web.xml配置filter過濾器,

2,攔截到請求,在處理器對映器中的url對映器查詢,如果不存在該key,就放行,存在就攔截

3,攔截後,根據url從處理器對映器中的url對映器獲得對應的處理器資訊

4,將處理器資訊和request,response傳給處理器介面卡的executemethod處理

5,executemethod根據處理器資訊,根據引數名和引數型別封裝引數並執行相應的方法,獲得獲得返回結果

6,將返回結果返回給filter由,filter做**還是重定向的處理

下面直接擼**了

**前奏

由於在封裝方法引數時需要方法名作為key,所以需要,jdk1.8以上,如果使用的ide是eeclipse需要如下配置

**正式開擼

// 存放bean的容器

private static final mapmap = new hashmap<>();

// 配置檔案的url

private static string filepath = "bean.properties";

private static beanfactory beanfactory = null;

private beanfactory(){}

private static class getinstance catch (exception e)

}// 靜態**塊結束

// 獲得內部容器

private static mapgetbeancontainer()

}// 靜態內部類結束

/*** 方法描述:獲得單例bean工廠

*     配置資訊預設是存放在src目錄下的bean.properties檔案

* @return

*/public static beanfactory getbeanfactory()

/*** 方法描述:獲得單例bean工廠

* @param configpath  存放類元資料配置檔案的類路徑,

* @return

*/public static beanfactory getbeanfactory(string configpath)

// 獲得bean容器

public mapgetbeancontainer()

// 根據name獲得bean

public object getbean(string name)

// 根據配置檔案中bean的元資料資訊建立bean並放入容器

private static void loadbeanbyconfig()

} catch (exception e) }}

/*** 

* 方法描述:注入的值得名稱

* @return

*/string url() default "";

}// 重定向

private static final string redirect = "redirect";

// **(預設)

private static final string forward = "forward";

// 配置檔案存放的類路徑

private static final string config_path = "config_path";

// 編碼格式

@suppresswarnings("unused")

private static final string character_encoding = "character_encoding";

@suppresswarnings("unused")

private string encoding = "utf-8";

@override

public void init(filterconfig filterconfig) throws servletexception else

if(stringutils.isnotblank(encoding))

}/**

* 方法描述:處理請求引數亂碼

}// 放行

return method.invoke(request, args);

}});

}@override

public void destroy()

配置檔案是properties字尾名預設是放在sec目錄下,

格式普通的bean直接寫key即可,controller的字尾要加上 %

userservice=com.hpe.service.impl.userserviceimpl

userdao=com.hpe.dao.impl.userdaoimpl

# web

usercontroller%=com.hpe.controller.usercontroller

userlogincontroller%=com.hpe.controller.userlogincontroller

ps:並沒有加上日期型別的處理等

VUE的簡陋實現

vue專案的結構 vue demo index.html vue.js axios.js axios.map style.cssstyle.css 此檔案內容來自vue官網的示例。本隨筆採用的是網格元件。index.html 此檔案的主要內容也是來自網格元件的官方示例。新增的內容實現的是與後台互動。...

簡陋版購物車 練習

goods msg 0 奧特曼 1 鋼鐵俠 2 笨方法學python 3 泰國一日遊 4 iphonex 5 娃娃 6 阿拉丁 7 特斯拉 goods dict username info list shopping car dict def username pwd inp username in...

Flask框架使用之簡陋版

目錄重定向 返回json資料給前端 異常處理 過濾器flask表單 使用route 裝飾器來把函式繫結到 url from flask import flask 匯入flask類 常用的轉換器 int 正整數 float 正浮點數 string 不帶斜槓的字串 path 包含斜槓的文字 自定義轉換器...