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

 

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