java filter 实现域名301重定向,利于SEO

该Filter主要功能就是将http://example.com通过301重定向至http://www.example.com

UrlRedirect.java代码:

public class UrlRedirect implements Filter{ 
    /**
     * 功能:将http://example.com重定向至http://www.example.com
     * */
    private static final String DOMAIN = "example.com";  
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        HttpServletResponse httpServletResponse = (HttpServletResponse) response;
        // 获取域名  
        String serverName = request.getServerName();  
        // 获取请求路径  
        String path = httpServletRequest.getRequestURI();
        String queryString = (httpServletRequest.getQueryString() == null ? "" : "?"+httpServletRequest.getQueryString());   // 获取路径中的参数
        int end = serverName.indexOf(DOMAIN);
        if (end == -1 || end == 0) {  // 判断是否是example.com
            httpServletResponse.setStatus(301);
            httpServletResponse.setHeader( "Location", "http://www."+DOMAIN+path+queryString);
            httpServletResponse.setHeader( "Connection", "close" );
            return;
        }
        chain.doFilter(request, response);
	}
}

web.xml中配置filter:

	<filter>
		<filter-name>UrlRedirect</filter-name>
		<filter-class>**.***.UrlRedirect</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>UrlRedirect</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

部署在tomcat中就可以测试了。

如果本地测试域名需要在系统hosts中加

127.0.0.1 www.example.com
127.0.0.1 example.com

另外在tomcat中server.xml作相应的配置。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Java实现域名定向有多种方式,以下是其中一种比较简单的方法: 使用HttpURLConnection类来发送HTTP请求并获取HTTP响应。可以使用URLConnection的实例获取连接到指定URL的URLConnection对象,然后调用其connect()方法打开连接。在获取响应之前,可以使用setInstanceFollowRedirects()方法设置是否自动定向。如果需要手动处理定向,则需要将其设置为false。 接下来,在获取响应的Header字段中检查状态码是否为301或302。如果是,从Header字段中获取定向的URL,然后使用该URL创建一个新的HttpURLConnection对象,并将其连接到新的URL。复此过程,直到获取的响应状态码不再是定向状态码。 以下是一个简单的示例代码,可以根据需要进行修改: ``` import java.net.HttpURLConnection; import java.net.URL; public class RedirectExample { public static void main(String[] args) throws Exception { String url = "https://example.com"; HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); connection.setInstanceFollowRedirects(false); int status = connection.getResponseCode(); while (status == HttpURLConnection.HTTP_MOVED_TEMP || status == HttpURLConnection.HTTP_MOVED_PERM || status == HttpURLConnection.HTTP_SEE_OTHER) { String newUrl = connection.getHeaderField("Location"); connection = (HttpURLConnection) new URL(newUrl).openConnection(); status = connection.getResponseCode(); } // 在此处处理最终的HTTP响应 } } ``` 注意:以上代码仅作为示例,并未进行异常处理。在实际使用中,应该考虑到异常情况,例如无法连接到指定URL等。 ### 回答2: 在Java中,可以使用HttpServletResponse的方法来实现域名定向。下面是一个示例代码: ```java import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class RedirectDomainExample { public static void main(String[] args) throws IOException { String redirectUrl = "https://www.example.com"; // 要定向的目标URL // 创建HttpServletResponse对象 HttpServletResponse response = null; // 这里需要根据实际情况获取response对象 // 进行定向 response.sendRedirect(redirectUrl); } } ``` 在上面的示例中,我们首先定义了要定向到的目标URL,然后获取到HttpServletResponse对象,最后使用`sendRedirect`方法将请求定向到目标URL。 需要注意的是,上述示例是一个简单的示范,实际应用中需要根据具体的情况来获取HttpServletResponse对象。例如,如果是在Servlet中使用定向,可以在doGet或doPost方法中直接使用`response`对象;如果是在Spring MVC等框架中,可以通过方法参数中获取HttpServletResponse对象。 另外,由于定向是通过向浏览器发送特定的HTTP响应头来实现的,因此要确保在定向前没有向浏览器发送任何内容,否则定向可能会失败。 ### 回答3: 在Java中,可以使用Servlet或者Filter实现域名定向。下面是一个简单的示例: 1. 使用Servlet实现域名定向: ```java import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class DomainRedirectServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String newDomain = "http://www.newdomain.com"; // 设置新的域名 resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); // 设置定向的状态码为"301 Moved Permanently" resp.setHeader("Location", newDomain); // 设置定向的目标URL } } ``` 2. 使用Filter实现域名定向: ```java import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class DomainRedirectFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // 初始化操作 } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; String newDomain = "http://www.newdomain.com"; // 设置新的域名 resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); // 设置定向的状态码为"301 Moved Permanently" resp.setHeader("Location", newDomain); // 设置定向的目标URL } @Override public void destroy() { // 销毁操作 } } ``` 以上是使用Servlet和Filter实现域名定向的简单示例。实际使用时,可能还需要考虑其他因素,如如何获取原始域名和路径、是否需要保留URL的参数等。可以根据具体需求进行相应的修改和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值