codestory

Redirect 301 Permanentes Umleiten in Java Servlet

  1. Was ist Redirect 301?
  2. Redirect 302 und Redirect 301
  3. Zum Beispiel: Redirect 301

1. Was ist Redirect 301?

Redirect 301 oder sogenannte eine alte Addresse auf einer neuen Addresse permanent umschalten (redirect permanently). Zum Beispiel hat Ihr momentaner Artikel die URL :
  • http://yourdomain.com/document/123/java-servlet
Um Sie möchten sie auf der neuen URL permanent umschalten
  • https://yourdomain.com/article/123/java-servlet-tutorial
In diesem Fall sollen Sie Redirect 301 behandeln. Wenn der Benutzer die alte Addresse zugriff, wird es auf die neue Addresse mit der Statuscode 301 umgeschaltet. Die Statuscode 301 hat eine Bedeutung von der Benachrichtigung mit dem Browser des Benutzer sowie Benachrichtigung mit dem Suchmaschine wie goolge. Normalerweise kostet es einige Tagen für den Suchmaschine von goolge, die alte Link durch die neue zu ersetzen
Notiz: redirect 301,wird die Ranking der Webseite einbisschen reduzieren aber nicht wesentlich
Redirect 301, ist der beste Weg wenn Sie eine ganze Webseite vom alten Domain zum neuen Domain schieben und es kostet 1 bis 2 Woche für den Suchmaschine von google bei der Ersatz aller alten URL. Und der Ranking der Webseiten reduziert einbisschen aber nicht wesentlich

2. Redirect 302 und Redirect 301

Im Servlet gewöhnen Sie sehr an der Methode von response.sendRedirect(). Das ist die Methode der Weiterleitung der Anforderung des Benutzer auf einer neuen Seite. Das ist Redirect 302 oder die sogenannte vorläufige Umschaltung
** Redirect 302
// Temporary Redirect (Redirect 302)
response.sendRedirect(newURL);
** Redirect 301
// Redirect 301.

response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", newUrl);

3. Zum Beispiel: Redirect 301

Folgend ist ein einfaches Projekt mit der Benutzung von Redirect 301.
Class DataUtils ist eine Utility Klasse um die Plan (map) zwischen die alten URL und neuen URL abzurufen. Sie können diese Informationen in Database archivieren
DataUtils.java
package org.o7planning.redirect301;

import java.util.HashMap;
import java.util.Map;

public class DataUtils {

	// Die neue URL - die alte URL 
	private static Map<String, String> redirect301Map;

	public static Map<String, String> getRedirect301Map() {

		if (redirect301Map == null) {
			redirect301Map = new HashMap<String, String>();

			redirect301Map.put("http://localhost:8080/Redirect301/document/123/java-servlet",
					"http://localhost:8080/Redirect301/article/123/java-servlet-tutorial");

			redirect301Map.put("http://localhost:8080/Redirect301/document/111/java-io-tutorial",
					"http://localhost:8080/Redirect301/article/111/java-io-tutorial");
		}

		return redirect301Map;
	}

}
MyServlet bezeichnet eine Website von Ihnen
MyServlet.java
package org.o7planning.redirect301;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/*")
public class MyServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public MyServlet() {
        super();
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        String text = "<h2>Hello</h2>"//
                + "You are in URL: <br/>"//
                + "<h3>" + request.getRequestURL() + "</h3>";
       
        response.getWriter().print(text);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}
Redirect301Filter ist ein filter zur Prüfung der URL, die nach dem Server geschickt werden. Wenn das die alten URL sind, auf die neuen URL umschalten mit Redirect 301
Redirect301Filter.java
package org.o7planning.redirect301;

import java.io.IOException;
import java.util.Map;

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.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter("/*")
public class Redirect301Filter implements Filter {

	public Redirect301Filter() {
	}

	@Override
	public void destroy() {
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
			throws IOException, ServletException {

		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) resp;

		// Die nach dem Server schickende URL.
		String url = request.getRequestURL().toString();
		System.out.println("Incomming URL = " + url);

		Map<String, String> redirect301Map = DataUtils.getRedirect301Map();

		// Die neue URL finden.
		String newUrl = redirect301Map.get(url);

		if (newUrl != null) {

			// Die Umleitung 301 (Redirect 301).
			response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
			response.setHeader("Location", newUrl);
			return;
		}

		chain.doFilter(req, resp);
	}

	@Override
	public void init(FilterConfig fConfig) throws ServletException {
	}

}
FÜhren Sie das Beispiel durch