关于url美化功能

今天看了下 有人url美化地址优化 erp-open 本身早就加入美化功能  大家可以看下  这段code是自己实现 有可能不是很高效
package com.erp.filter;

import java.util.regex.Pattern;

public class UrlFilter {
	private String url;
	private String type;
	private String request;
	private String gz;
	
	public String getGz() {
		return gz;
	}

	public void setGz(String gz) {
		this.gz = gz;
	}

	public UrlFilter() {
	}

	public UrlFilter(String url) {
		this.url = url;
	}

	public UrlFilter(String url, String type) {
		super();
		this.url = url;
		this.type = type;
	}

	public UrlFilter(String url, String type, String request) {
		super();
		this.url = url;
		this.type = type;
		this.request = request;
	}

	public UrlFilter(String url, String type, String request, String gz) {
		super();
		this.url = url;
		this.type = type;
		this.request = request;
		this.gz = gz;
	}

	public String getUrl() {
		return url;
	}



	public String getRequest() {
		return request;
	}

	public void setRequest(String request) {
		if
		(request == null){
			this.request = "";
		}else
		this.request = request;
	}

	public void setUrl(String url) {
	
		this.url = url;
	}

	
	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}
	@Override
	public int hashCode() {
		
		return 1;
	}
	@Override
	public boolean equals(Object obj) {
		
		Pattern pattern = Pattern.compile(((UrlFilter)obj).url);
		
		return pattern.matcher(this.getUrl()).matches();
	}
}

url xml 配置

<?xml version="1.0" encoding="UTF-8" ?>

<urls>

    <url http="/user/userinit.html" type="1">create.do?method=init</url>
    <url http="/user/userAdd.html" type="2">create.do?method=add</url>
    <url http="/user/([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+).html" request="true"     type="2">create.do?method=ajax1&amp;t1=$1&amp;t2=$2&amp;t3=$3&amp;t4=$4</url>
</urls>

listener 加载配置

    if(Resouce.urlMap == null){
            Resouce.urlMap = new HashMap<UrlFilter, UrlFilter>();
            SAXReader sr = new SAXReader();
            org.dom4j.Document doc = null;
            try {
                doc = sr.read(new File(arg0.getServletContext().getRealPath("\\WEB-INF\\")+"/urlrewrite.xml"));
            } catch (DocumentException e) {
                // TODO Auto-generated catch block
                System.out.println(e.getMessage());
                Resouce.urlMap = null;
                return;
            }
            String parm = "";
            Element el_root = doc.getRootElement();
            Iterator it = el_root.elementIterator();
            while (it.hasNext()) {
            
                Element type = (Element) it.next();
                parm = type.attributeValue("parm");
                Resouce.urlMap.put(new UrlFilter(type.attributeValue("http"), type.attributeValue("type")),new UrlFilter(type.getText(), type.attributeValue("type"),type.attributeValue("request"),type.attributeValue("http")));
            }
        }
        


package com.erp.filter;

import java.io.IOException;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.erp.Resource.Resouce;



public class ReUrl implements Filter {

    public void destroy() {
    }
    /**
     * 根据地址美化URL地址
     */
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = ((HttpServletResponse) res);
        String url = "";
        url = request.getRequestURI().replaceAll(request.getContextPath(), "");
        HashMap<UrlFilter, UrlFilter> map = Resouce.urlMap;
        UrlFilter filter = new UrlFilter(url);
        if (map.containsKey(filter)) {
            UrlFilter filter1 = map.get(filter);
            if (filter1.getRequest() == null) {

            } else {
                if (filter1.getRequest().equals("true")) { //替换url地址参数 根据正则表达式实现
                    Pattern p = Pattern.compile(filter1.getGz());
                    Matcher matcher = p.matcher(url);
                    int count = matcher.groupCount();
                    int index = 1;
                    while (matcher.find(0)) {
                        filter1.setUrl(filter1.getUrl().replace("$" + index,
                                matcher.group(index)));
                        index++;
                        if (index > count) {
                            break;
                        }
                    }
                }
            }
            if (filter1.getType() != null) {
                if (filter1.getType().equals("2")) {
                    Resouce.clearParms(request);
                }
            }
            request.getRequestDispatcher("../" + filter1.getUrl()).forward(
                    request, response);

        } else {
            chain.doFilter(request, response);
        }
    }

    public void init(FilterConfig arg0) throws ServletException {

        System.out.println(1);
    }

}



 我表示没有进行优化只是简单实现了下 希望大家不要喷

转载于:https://my.oschina.net/u/1261887/blog/175146

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值