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

com.j2mvc.framework.action.ActionMatch Maven / Gradle / Ivy

Go to download

强烈建议使用J2mvc 2.1以后的版本。 version 2.1.01 1.优化路径跳转,Servlet和Filter方式的路径设置 2.优化内存销毁 3.更换JSON依赖包 4.优化接收方法RequestMethod,封装不同ContentType格式提交 封装JSON,XML数据提交模块 JSON请求示例 { "id":"JSON134851", "title":"JSON提交的标题", "price":65.1, "stock":100 } XML请求示例 <!DOCTYPE root [ <!ELEMENT root ANY> <!ATTLIST Product SSN ID #REQUIRED>]> <root> <Product SSN='id'>XMLID12354</Product> <Product SSN='title'>XML提交的标题 </Product> <Product SSN='price'>55 </Product> <Product SSN='stock'>32 </Product> </root> version 2.1.02 1.解决URL无后缀情况无法加载静态资源,解决无法渲染CSS文件。 version 2.1.03 1.移除com.j2mvc.StringUtils.getUtf8()方法调用 更改为getCharset() version 2.1.04 1.去除Servlet和Filter的全局变量销毁,只交给Listener处理。 version 2.1.05,2.1.06,2.1.07 1.完善POST提交的JSON数据 支持接收基础数据类型、任意对象类型、任意数组类型。 不支持接收参数为集合类型或Map类型,但可以定义为接收对象类型的元素。 version 2.1.05,2.1.06,2.1.07 1.修改连接池变量 version 2.1.09 增加上传功能,修改RequestMethod,ContentType设置方式 version 2.1.10,2.1.11 更改上传文件名格式为UUID格式,移除JSON映射类,更改接收多文件上传。 version 2.1.12 删除文件列有的空对象 version 2.1.13 增加配置文件目录/conf,加载上传功能配置/conf/upload.properties version 2.1.18 拦截器也能获取ActionBean version 2.1.20 添加上传文件只读权限 version 2.1.21 支持同时接收文件和文本数据 version 2.1.22 增加文件接收类型media version 2.1.23 删除upload类printJson方法

There is a newer version: 2.1.39
Show newest version
package com.j2mvc.framework.action;

import java.util.Iterator;
import java.util.Set;

import org.apache.log4j.Logger;

import java.util.regex.Pattern;

import com.j2mvc.framework.Session;

/**
 * Action Match URL地址匹配
 * 
 * @version 1.0 2014-2-23创建@杨朔
 * @version 1.1 2014-8-21更改@杨朔
 */
public class ActionMatch {
	static final Logger log = Logger.getLogger(ActionMatch.class);
	// URI
	private String uri;
	// queryString
	private String queryString;
	// ActionBean
	private ActionBean bean;
	
	/**
	 * 构造器
	 * @param uri
	 */
	public ActionMatch(String uri){
		this.uri = uri!=null?uri.replace("//", "/").trim():"";
	}

	/**
	 * 构造器
	 * @param uri
	 */
	public ActionMatch(String uri,String queryString){
		this.uri = uri!=null?uri.replace("//", "/").trim():"";
		this.queryString = queryString;
	}
	/**
	 * 匹配
	 * 优先级:纯字符 =>正则表达式 
	 */
	public ActionBean getBean(){
		bean = Session.beans.get(uri);
		// 如果为空,匹配正则表达式
		if(bean == null){
			// 取出URL键集合
			Iterator iterator = Session.uris.iterator();
			while (iterator.hasNext()) {
				String regex = iterator.next();
				Set queryUris = Session.queryUris.get(regex);
				if(queryUris!=null && queryUris.size()>0 && queryString!=null && !queryString.equals("")){
					// 有URI参数串bean设置
					if(Pattern.matches(regex, uri)){
						return getBean(queryUris,queryString);
					}
				}else{
					if(Pattern.matches(regex, uri)){// && !regex.equals("/")
						if(Session.uriLog)
							log.info("成功匹配 >> configUri="+regex+" requestUri="+uri);
						return Session.beans.get(regex);
					}else{
//						if(Session.uriLog)
//							log.info("未匹配 >> configUri="+regex+" requestUri="+uri);
					}
				}
			}
		}
		return bean;
	}

	/**
	 * 判断请求参数串是否有设置,返回actionbean
	 * @param urls
	 * @param query
	 * 
	 */
	private ActionBean getBean(Set queryUris,String query){
		for (String queryUri:queryUris) {
			if(queryUri.indexOf(":")!=-1 && queryUri.indexOf("=")!=-1){
				String regexQuery = queryUri.split(":")[1];
				if(matches(regexQuery, query)){
					return Session.queryUriBeans.get(queryUri);
				}
			}
		}
		return null;
	}
    /**
     * 解析字符串,并判断请求的参数是否包含在预设置参数串里面
     * @param qString
     * 
     */
	private boolean matches(String regexQuery,String query){
		String[] regexArray = regexQuery.split("&"); // 设置的参数串
		String[] array = query.split("&");
		
		boolean include = false;
		
		if(regexArray!=null){
			for (int i = 0; i < regexArray.length; i++) {
				String regexArr = regexArray[i];
				String[] regexParam = regexArr.split("=");
				include = false;
				if(regexParam!=null && regexParam.length > 1){
					for(int j=0;j1){
							if(param[0].equals(regexParam[0]) && param[1].equals(regexParam[1])){
								// 包含,继续下一循环判断
								include = true;
								continue;
							}
						}
					}
				}
			}
		}
		return include;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy