Перенаправление 301 Постоянное перенаправление в Java Servlet
1. Что такое Redirect 301?
Redirect 301 или еще называется постоянное перенаправление (redirect permanently) старого адреса на новый адрес. Например ваша статья в настоящее время имеет URL:
- http://yourdomain.com/document/123/java-servlet
И вы хотите перенаправить его на новый URL
- https://yourdomain.com/article/123/java-servlet-tutorial
В этом случае вам нужно процессировать Redirect 301. Когда пользователь посещает старый адрес, он будет перенаправлен на новый адрес с кодом 301. Код 301 означает сообщение браузеру пользователя, также может информировать поисковые системы, как Google. Обычно поисковик Google должен потратить несколько дней, чтобы заменить старые ссылки по новые ссылки.
Обратите внимание, что redirect 301 уменьшит немного рейтинг вебсайта, но незначительно
Redirect 301, это хороший способ, если вы хотите перенаправить весь сайт со старого domain на новый domain, и нужно около 1 до 2 недель чтобы поисковик Google заменил все старые URL. И рейтинг сайтов немного опустится, но несущественно.
2. Redirect 302 и Redirect 301
В Servlet вы ознакомились с методом response.sendRedirect(). Это метод который перенаправляет запрос пользователей на новую страницу, это и есть Redirect 302 или еще называется временным перенаправлением.
** Redirect 302
// Temporary Redirect (Redirect 302)
response.sendRedirect(newURL);
** Redirect 301
// Redirect 301.
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", newUrl);
3. Пример Redirect 301
Ниже является простой проект с использованием Redirect 301.
Класс DataUtils является утилитарным класcом, который получает карту (map) между старым URL и новым URL, вы можете хранить эту информацию в Database.
DataUtils.java
package org.o7planning.redirect301;
import java.util.HashMap;
import java.util.Map;
public class DataUtils {
// старый URL - новый 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 симулирует ваш вебсайт.
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- это filter проверяетт URL отправленные на Server, если это старый URL, то перенаправляет 301 на новый URL.
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;
// URL отправленный к Server.
String url = request.getRequestURL().toString();
System.out.println("Incomming URL = " + url);
Map<String, String> redirect301Map = DataUtils.getRedirect301Map();
// Найти новый URL.
String newUrl = redirect301Map.get(url);
if (newUrl != null) {
// Перенаправление 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 {
}
}
Запуск примера:
Руководства Java Servlet/JSP
- Установите Tomcat Server для Eclipse
- Установите Glassfish Web Server в Windows
- Запускать веб-приложение Java Maven в Tomcat Maven Plugin
- Запуск веб-приложения Java Maven в Jetty Maven Plugin
- Запуск фоновой задачи в приложении Java Servlet
- Руководство Java Servlet для начинающих
- Руководство Java Servlet Filter
- Руководство Java JSP для начинающих
- Руководство Java JSP Standard Tag Library (JSTL)
- Установите Web Tools Platform для Eclipse
- Создайте простое приложение для входа и закрепите его с помощью Java Servlet Filter
- Создание простого веб-приложения Java с использованием Servlet, JSP и JDBC
- Загрузка и загрузка файлов, хранящихся на жестком диске с помощью Java Servlet
- Выгрузка и загрузка файлов из базы данных с помощью Java Servlet
- Отображение изображения из базы данных с помощью Java Servlet
- Перенаправление 301 Постоянное перенаправление в Java Servlet
- Как автоматически перенаправить http на https в веб-приложение Java?
- Используйте Google reCAPTCHA в веб-приложении Java
Show More