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

com.mars.mvc.resolve.ResolveRequest Maven / Gradle / Ivy

There is a newer version: 3.3.3
Show newest version
package com.mars.mvc.resolve;

import com.mars.core.constant.MarsConstant;
import com.mars.core.constant.MarsSpace;
import com.mars.mvc.resolve.access.PathAccess;
import com.mars.server.server.request.HttpMarsRequest;
import com.mars.server.server.request.HttpMarsResponse;
import com.mars.server.util.RequestUtil;
import com.mars.mvc.model.MarsMappingModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.Map;

/**
 * 解析请求
 * @author yuye
 *
 */
public class ResolveRequest {
	
	private Logger log = LoggerFactory.getLogger(ResolveRequest.class);

	private static ResolveRequest resolveRequest = new ResolveRequest();
	
	private MarsSpace constants = MarsSpace.getEasySpace();
	
	/**
	 * 执行器对象
	 */
	private ExecuteMars executeMars = ExecuteMars.getExecuteMars();
	
	private ResolveRequest() {}
	
	public static ResolveRequest getResolveRequest() {
		return resolveRequest;
	}
	
	/**
	 * 解释请求,并调用对应的控制层方法进行处理
	 * @param request qingqiu
	 * @param response xiangying
	 * @return duix
	 */
	public Object resolve(HttpMarsRequest request, HttpMarsResponse response) throws Exception {
		
		try {
			Map maps = getMarsApis();
			
			String uri = getRequestPath(request);
			if(PathAccess.hasAccess(uri)){
				return "ok";
			}
			return executeMars.execute(maps.get(uri),request.getMethod(),request,response);
		} catch (Exception e) {
			log.error("解释请求的时候报错",e);
			throw e;
		}
	}
	
	/**
	 * 从uri中提取 请求连接的最末端,用来匹配控制层映射
	 * @param request qingqiu
	 * @return
	 */
	private String getRequestPath(HttpMarsRequest request) {
		/* 获取路径 */
		String uri = RequestUtil.getUriName(request);
		if(uri.startsWith("/")) {
			uri = uri.substring(1);
		}
		return uri;
	}
	
	/**
	 * 获取所有的MarsApi对象
	 * @return duix
	 */
	private Map getMarsApis() {
		
		Map controlObjects = new HashMap<>();
		Object obj = constants.getAttr(MarsConstant.CONTROLLER_OBJECTS);
		if(obj != null) {
			controlObjects = (Map)obj;
		}
		
		return controlObjects;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy