自定义视图

    自定义视图一般来讲,SpringMVC中对一个请求,拦截-handler方法执行--执行后根据返回结果判断是请求转发还是是重定向,其中在判断请求转发和重定向的过程中需要用到视图解释器进行解析,之后执行视图中的render方法

a、如何实现

    下面简答的介绍一个继承了View类从而自定义视图的方法

一、自定义View类

package com.jd.view;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.View;

@Component 
public class ToView implements View{
	
	public String getContentType() {
		return " text/html; charset=UTF-8";
	}
	
	public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		response.getWriter().print("Hello World.");
	}
}

    1、getContentType()中返回的是页面的contentType

    2、render()中可以用来保存在页面中显示的值等等

    二、spring配置


<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
	<property name="order" value="0"></property>
</bean>

     此处我们设置视图解释器,此时的使用BeanNameViewResolver,这是会根据IOC容器中的类对象寻找,最后执行其中的render方法,其中注意优先级

    三、handler方法

package com.jd.userinfo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class UserInfoController {
     
	@RequestMapping("/userinfo/toView.do")
	public String toView() {
		System.out.println("Handler Methods");
		return "toView";
	}
}

      此时的请求拦截/userinfo/toView.do请求,其中返回的toView被BeanNameViewResolver解析,这时我们会自动解析出:

      toView(自定义)的类

b、运行原理

    一、在服务器发布的时候执行的:

       首先执行--initServletBeans()--initWebApplicationContext()àonfresh(was)-- initViewResolvers(context);

this.viewResolvers=new ArrayList<ViewResolver>(matchingBeans.values());--

    将全部spring配置文件已经配置的视图解释器加入加载好

    二、当请求开始时

Dispatch--

一、处理完后将结果使用mv储存(ha是一个HandlerAdapter,该方法调用目标方法,返回一个ModelAndView对象,无论目标方法返回String类型、ModelMap类型、ModelAndView类型还是View类型,SpringMVC都会转化成一个ModelAndView类型对象--

二、执行processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);方法à

    render(mv,re,res)方法

三、view = resolveViewName(mv.getViewName(), mv.getModelInternal(), locale, request)使用视图解释器进行解析(注意优先级)

四、执行View对象中的render方法

注意此时若是继承的AbstractView,其后执行的时是renderMergedOutputModel(mergedModel, getRequestToExpose(request), response);【以org.springframework.web.servlet.view.InternalResourceViewResolver为例】

自定义视图你自定义的视图是使用beansName加以解析,所以其中的render执行的结果使我们自己编码完成的,只要设计得当,就可以实现文件的上传等

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值