# 視圖設計
我們已經完成了MVC中的C層,還有M和V沒有做呢。這一小節來對視圖進行設計,從后臺到前臺的渲染是這樣的
后臺給定一個視圖位置,輸出到前端JSP或者其他模板引擎上,做一個非常簡單的接口:
```java
/**
* 視圖渲染接口
* @author biezhi
*
*/
public interface Render {
/**
* 渲染到視圖
* @param view 視圖名稱
* @param writer 寫入對象
*/
public void render(String view, Writer writer);
}
```
具體的實現我們先寫一個JSP的,當你在使用Servlet進行開發的時候已經習慣了這句語法:
```java
servletRequest.getRequestDispatcher(viewPath).forward(servletRequest, servletResponse);
```
那么一個JSP的渲染實現就很簡單了
```java
/**
* JSP渲染實現
* @author biezhi
*
*/
public class JspRender implements Render {
@Override
public void render(String view, Writer writer) {
String viewPath = this.getViewPath(view);
HttpServletRequest servletRequest = MarioContext.me().getRequest().getRaw();
HttpServletResponse servletResponse = MarioContext.me().getResponse().getRaw();
try {
servletRequest.getRequestDispatcher(viewPath).forward(servletRequest, servletResponse);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private String getViewPath(String view){
Mario mario = Mario.me();
String viewPrfix = mario.getConf(Const.VIEW_PREFIX_FIELD);
String viewSuffix = mario.getConf(Const.VIEW_SUFFIX_FIELD);
if (null == viewSuffix || viewSuffix.equals("")) {
viewSuffix = Const.VIEW_SUFFIX;
}
if (null == viewPrfix || viewPrfix.equals("")) {
viewPrfix = Const.VIEW_PREFIX;
}
String viewPath = viewPrfix + "/" + view;
if (!view.endsWith(viewSuffix)) {
viewPath += viewSuffix;
}
return viewPath.replaceAll("[/]+", "/");
}
}
```
配置 JSP 視圖的位置和后綴可以在配置文件或者硬編碼中進行,當然這看你的習慣,
默認設置了 JSP 在 `/WEB-INF/` 下,后綴是 `.jsp` 你懂的!
怎么用可以參考 `mario-sample` 這個項目,因為真的很簡單 相信你自己。
在下一節中我們就要和數據庫打交道了,嘗試新的旅程吧 :)