Controller 控制層:
1、Controller 類是控制層的重要抽象類,實(shí)現(xiàn)web應(yīng)用的類繼承此類。此抽象類中有大量的獲取參數(shù)方法、傳遞數(shù)據(jù)方法、返回客戶端方法。
2、繼承了Controller抽象類的類中每一個public方法為一個action,請求的最小單位。在action中獲取參數(shù)時可以使用 getParaXXX、getBeanXXX、getModelXXX方法。
3、在不同場景中可以使用不同的方法獲取參數(shù),getParaXXX系列方法用于獲取普通單個或一組數(shù)據(jù),getBeanXXX和getModel系列方法用于獲取需要封裝的對象值。
4、在getBeanXXX系列方法中最終都調(diào)用了 Injector 類的 injectBean 方法,在此方法中通過反射構(gòu)建bean對象,獲取request中的map數(shù)據(jù)和bean的方法名集合,通過循環(huán)對方法集合中以set開頭的方法和map數(shù)據(jù)中的key值進(jìn)行對比,之后對bean進(jìn)行值填充并返回對象。
public static final <T> T injectBean(Class<T> beanClass, String beanName, HttpServletRequest request, boolean skipConvertError)
5、在getModelXXX系列方法中最終都調(diào)用了 Injector 類中的 injectModel 方法,也是通過反射構(gòu)建model對象,獲取request中的數(shù)據(jù)并填充model對象,和injectBean不同的是此方法使用數(shù)據(jù)庫表字段名進(jìn)行數(shù)據(jù)注入。
public static final <T> T injectModel(Class<T> modelClass, String modelName, HttpServletRequest request, boolean skipConvertError)
6、傳遞數(shù)據(jù)時使用 setAttr 方法或者 set 方法,此方法將數(shù)據(jù)存入request中。
public Controller set(String attributeName, Object attributeValue) {
request.setAttribute(attributeName, attributeValue);
return this;
}
7、 renderXXX系列方法將渲染不同類型的視圖并返回給客戶端,renderManager 的 getRenderFatory 方法會返回 IRenderFactory 接口的的實(shí)現(xiàn)類 RenderFactory 的對象。RenderFactory 類中實(shí)現(xiàn)了 getXXXRender 系列方法,此方法返回了 XXXRender 對象實(shí)體。XXXRender 是在 render 包下定義的不同類類型的渲染類。由此實(shí)現(xiàn)了調(diào)用不同 RenderXXX 方法獲取不同 XXXRender 實(shí)體。
public void renderJson(String jsonText) {
render = renderManager.getRenderFactory().getJsonRender(jsonText);
}