com.j2mvc.framework.action.ActionMatch Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of j2mvc-framework-web Show documentation
Show all versions of j2mvc-framework-web Show documentation
强烈建议使用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方法
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