All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.tinygroup.springmvc.handleradapter.TinyHandlerAdapter Maven / Gradle / Ivy

The newest version!
/**
 *  Copyright (c) 1997-2013, www.tinygroup.org ([email protected]).
 *
 *  Licensed under the GPL, Version 3.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *       http://www.gnu.org/licenses/gpl.html
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package org.tinygroup.springmvc.handleradapter;

import org.springframework.web.context.request.ServletWebRequest;
import org.springframework.web.servlet.HandlerAdapter;
import org.springframework.web.servlet.ModelAndView;
import org.tinygroup.logger.LogLevel;
import org.tinygroup.logger.Logger;
import org.tinygroup.logger.LoggerFactory;
import org.tinygroup.springmvc.extension.RequestInstanceHolder;
import org.tinygroup.springmvc.util.Profiler;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Iterator;
import java.util.List;

public class TinyHandlerAdapter implements HandlerAdapter {

	protected static final Logger logger = LoggerFactory
			.getLogger(TinyHandlerAdapter.class);

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.springframework.web.servlet.HandlerAdapter#getLastModified(javax.
	 * servlet.http.HttpServletRequest, java.lang.Object)
	 */
	public long getLastModified(HttpServletRequest request, Object handler) {
		Profiler.enter("[CarHandlerAdapter.getLastModified()]-Get Last Modified");
		try {
			HandlerAdapter handlerAdapter = getHandlerAdapter(request, handler);
			if (handlerAdapter != null) {
				logger.logMessage(LogLevel.DEBUG,
						" invoke  handerAdapter.getLastModified() method that will proxy ["
								+ handlerAdapter + "]");
				return handlerAdapter.getLastModified(request, handler);
			}
			return -1;
		} finally {
			Profiler.release();
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.springframework.web.servlet.HandlerAdapter#handle(javax.servlet.http
	 * .HttpServletRequest, javax.servlet.http.HttpServletResponse,
	 * java.lang.Object)
	 */
	public ModelAndView handle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		Profiler.enter("[CarHandlerAdapter.handle()]-Handle it and get ModelAndView");
		try {
			HandlerAdapter handlerAdapter = getHandlerAdapter(request, handler);

			if (handlerAdapter != null) {
				logger.logMessage(LogLevel.DEBUG,
						" invoke  handerAdapter.handle() method that will proxy ["
								+ handlerAdapter + "]");
				return handlerAdapter.handle(request, response, handler);
			}
			// 应该不会发生
			return null;
		} finally {
			Profiler.release();
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.springframework.web.servlet.HandlerAdapter#supports(java.lang.Object)
	 */
	public boolean supports(Object handler) {
		Profiler.enter("[CarHandlerAdapter.supports()]-Find out if the handlerAdapter supports the request");
		try {
			ServletWebRequest servletWebRequest = RequestInstanceHolder
					.getServletWebRequest();
			HandlerAdapter handlerAdapter = getHandlerAdapter(
					servletWebRequest.getRequest(), handler);

			if (handlerAdapter != null) {
				logger.logMessage(LogLevel.DEBUG,
						" invoke  handerAdapter.supports() method that will proxy ["
								+ handlerAdapter + "]");
				return handlerAdapter.supports(handler);
			}
			// 如果为null
			return false;
		} finally {
			Profiler.release();
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "TinyHandlerAdapter";
	}

	// ~~~ 内部方法

	protected HandlerAdapter getHandlerAdapter(HttpServletRequest request,
			Object handler) {
		List handlerAdapters = RequestInstanceHolder
				.getMappingInstance().getHandlerAdapters();

		// 已经改变了spring mvc 默认的映射机制,所以size==1的场景没有必要判断。
		if (handlerAdapters.size() == 1) {
			return handlerAdapters.iterator().next();
		}

		Iterator it = handlerAdapters.iterator();
		while (it.hasNext()) {
			HandlerAdapter ha = it.next();
			if (ha.supports(handler)) {
				return ha;
			}
		}
		return null;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy