domaindispatcher.java

来自「cwbbs 云网论坛源码」· Java 代码 · 共 120 行

JAVA
120
字号
package com.cloudwebsoft.framework.web;import java.io.*;import java.util.*;import java.util.regex.*;import javax.servlet.*;import javax.servlet.http.*;import cn.js.fan.util.*;public class DomainDispatcher {    public static boolean isSubDomainSupported = false;    public static String baseDomain = null;    public DomainDispatcher() {    }        public static String matchSubDomain(String serverName, DomainUnit ru) {        String subDomain = ru.getSubDomain() + "." + baseDomain;                if (!ru.isRegexMatch()) {                        if (subDomain.equals(serverName))                return ru.getSubDomain();            else                return "";        }        else {                        String sub = "";                        subDomain = subDomain.replaceAll("\\.", "\\\\.");            subDomain = subDomain.replaceAll("\\?", "\\\\?");                                    String patString = subDomain.replaceAll("\\*", "(.*?)");                        Pattern pat = Pattern.compile(                    patString,                    Pattern.DOTALL | Pattern.CASE_INSENSITIVE);            Matcher m = pat.matcher(serverName);            if (m.find()) {                sub = m.group(1);                                String[] excludeSubDomains = ru.getExcludeSubDomains();                                if (excludeSubDomains != null) {                    int len = excludeSubDomains.length;                    for (int i = 0; i < len; i++) {                        if (sub.equals(excludeSubDomains[i]))                            return "";                    }                }            }            return sub;        }    }        public static int dispatch(HttpServletRequest request, HttpServletResponse res) throws            ServletException, IOException {        if (request.getRequestURI().equals("/index.jsp")) {            String serverName = request.getServerName();            if (baseDomain == null) {                                String[] domainParts = StrUtil.split(serverName, "\\.");                int len = domainParts.length;                if (len == 1 || StrUtil.isNumeric(domainParts[len - 1])) {                                        baseDomain = serverName;                } else {                                        baseDomain = domainParts[len - 2] + "." + domainParts[len -                                 1];                }            }            DomainMgr rm = new DomainMgr();            Vector v = rm.getAllDomainUnit();            Iterator ir = v.iterator();                        while (ir.hasNext()) {                DomainUnit ru = (DomainUnit) ir.next();                if (ru.isUsed()) {                                        String domainField = matchSubDomain(serverName, ru);                    if (!domainField.equals("")) {                        String url = ru.getUrl();                        if (!url.equals("")) {                            if (ru.isRegexMatch()) {                                url = StrUtil.format(url, new String[] {domainField});                            }                        } else if (!ru.getClassName().equals("")) {                            url = ru.getIDomainDispatcher().getUrl(request,                                    domainField, ru);                        }                        if (!url.equals("")) {                            RequestDispatcher rd = request.                                    getRequestDispatcher(url);                            if (ru.isRedirect())                                res.sendRedirect(url);                            else                                rd.forward(request, res);                            return 1;                        }                    }                }            }        }        return 0;    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?