/**
* Copyright (c) 2011-2012, James Zhan 詹波 (jfinal@126.com).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jfinal.ext.handler;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jfinal.handler.Handler;
/**
* ServerNameRedirect301Handler redirect to new server name with 301 Moved Permanently.
*/
public class ServerNameRedirect301Handler extends Handler {
private String originalServerName;
private String targetServerName;
private int serverNameLength;
/**
* Example: new ServerNameRedirectHandler("http://abc.com", "http://www.abc.com")
* @param originalServerName The original server name that you want be redirect
* @param targetServerName The target server name that redirect to
*/
public ServerNameRedirect301Handler(String originalServerName, String targetServerName) {
this.originalServerName = originalServerName;
this.targetServerName = targetServerName;
format();
serverNameLength = this.originalServerName.length();
}
private final void format() {
if (originalServerName.endsWith("/"))
originalServerName = originalServerName.substring(0, originalServerName.length() - 1);
if (targetServerName.endsWith("/"))
targetServerName = targetServerName.substring(0, targetServerName.length() - 1);
// 此处没有考虑 https 的情况, 该情况由用户在 new ServerNameRedirectHandler() 时自行解决
if (originalServerName.indexOf("://") == -1)
originalServerName = "http://" + originalServerName;
if (targetServerName.indexOf("://") == -1)
targetServerName = "http://" + targetServerName;
}
@Override
public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
String url = request.getRequestURL().toString();
if (url.startsWith(originalServerName)) {
isHandled[0] = true;
String queryString = request.getQueryString();
queryString = (queryString == null ? "" : "?" + queryString);
url = targetServerName + url.substring(serverNameLength) + queryString;
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
// response.sendRedirect(url); // always 302
response.setHeader("Location", url);
response.setHeader("Connection", "close");
}
else {
nextHandler.handle(target, request, response, isHandled);
}
}
}
/*
http://souwangxiao.com redirect 301 to http://www.souwangxiao.com
<%@ page language="java" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%
if(request.getRequestURL().indexOf("http://souwangxiao.com") >= 0) {
// String requestURI = request.getRequestURI();
// String queryString = request.getQueryString();
// queryString = (queryString == null ? "" : "?" + queryString);
//attempt to merge non-www urls
response.setStatus(301); // 301 rewrite
// response.setHeader("Location", "http://www.souwangxiao.com" + requestURI + queryString);
response.setHeader("Location", "http://www.souwangxiao.com");
response.setHeader("Connection", "close");
}
else {%>
<s:action namespace="/" name="index" executeResult="true" />
<%}%>
*/