一、spring自定義MVC
MVC,我們都知道是model、view、controller的首字母縮寫,今天來講講自定義的MVC,可能會對MVC有更好的理解。
1、view
view就是我們所說的視圖層,用來渲染數據的。在spring中,可以實現接口View來自定義一個view,參考代碼如下:
package my.app;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.View;
public class ExampleView implements View
{
private String message;
public ExampleView(String message)
{
this.message = message;
}
@Override
public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception
{
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
response.setContentType("text/plain");
response.getWriter().print(this.message);
}
}
定義好view如何使用呢,其實很簡單,跟普通類的使用是一樣的,如下:
public View Hello(Model model)
{
View view = new ExampleView("Hello world");
return view;
}
然後頁面訪問得到如下:
2、model
上面已經定義一個view,現在要有數據,很簡單,代碼如下:
public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception
{
String str = (String) model.get("message");
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
response.setContentType("text/plain");
response.getWriter().print(this.message +" "+ str);
}
我們只想在調用的時候傳入參數就好,調用的時候如下:
public View Hello(Model model)
{
model.addAttribute("message", "this is a test!");
View view = new ExampleView("Hello world");
return view;
}
此時,我們看到的頁面是:
二、定義異常
鏈接找不到會報404,但是Handler報錯會報500,此時我們只需實現接口HandlerExceptionResolver,來獲取handler跑出的異常然後進行處理,參考代碼:
package my.spring.exeption;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.core.annotation.Order;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.View;
//當註冊多個 異常處理器時,@Order決定順序,Order越低的越先執行
@Order(-100)
public class ExceptionResolver implements HandlerExceptionResolver
{
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object obj, Exception e)
{
Map<String , Object> model = new HashMap();
View view = new RestErorr("測試而已");
return new ModelAndView(view, model);
}
}
注意:在spring-mvc.xml需要添加如下配置:
<!-- 自定義異常處理 -->
<bean class="my.spring.exeption.ExceptionResolver" />