spring自定義MVC與自定義處理異常

一、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" />

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章