Skip to content

Instantly share code, notes, and snippets.

@gphilipp
Created February 4, 2012 17:52
Show Gist options
  • Save gphilipp/1739184 to your computer and use it in GitHub Desktop.
Save gphilipp/1739184 to your computer and use it in GitHub Desktop.
The servlet
import javax.servlet.RequestDispatcher;
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 HomeServlet extends HttpServlet {
public static final String LOGIN_PAGE = "/login.jsp";
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
LanguageConfigurator languageConfigurator = new LanguageConfigurator(request, response);
languageConfigurator.configure();
goToLoginPage(request, response);
}
private void goToLoginPage(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(HomeServlet.LOGIN_PAGE);
dispatcher.forward(request, response);
}
}
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
class LanguageConfigurator {
public static final int MAX_AGE = 3 * 30 * 24 * 3600;
public static final String HEADER_ACCEPT_LANGUAGE = "accept-language";
public static final String COOKIE_LANGUAGE_NAME = "langue";
public static final String DEFAULT_LANGUAGE = "fr";
private HttpServletRequest request;
private HttpServletResponse response;
private String language;
public LanguageConfigurator(HttpServletRequest request, HttpServletResponse response) {
this.request = request;
this.response = response;
}
public void configure() throws IOException, ServletException {
findLanguage();
saveLanguageIntoCookie();
saveLanguageIntoSession();
}
private void findLanguage() {
String language = getLanguageFromURLParameter();
if (isLanguageInvalid(language)) {
language = getLanguageFromCookie();
if (isLanguageInvalid(language)) {
language = getLanguageFromHeader();
}
}
this.language = language != null ? language : DEFAULT_LANGUAGE;
}
private boolean isLanguageInvalid(String language) {
return language == null || language.isEmpty();
}
private String getLanguageFromHeader() {
return request.getHeader(HEADER_ACCEPT_LANGUAGE).substring(0, 2).trim();
}
private void saveLanguageIntoCookie() {
Cookie newCookieLanguage = new Cookie(COOKIE_LANGUAGE_NAME, language);
newCookieLanguage.setMaxAge(MAX_AGE);
response.addCookie(newCookieLanguage);
}
private void saveLanguageIntoSession() {
request.getSession().setAttribute(COOKIE_LANGUAGE_NAME, language);
}
private String getLanguageFromURLParameter() {
return request.getParameter(COOKIE_LANGUAGE_NAME);
}
private String getLanguageFromCookie() {
return request.getCookies() != null ? findLanguageInCookies(COOKIE_LANGUAGE_NAME, request.getCookies()) : null;
}
private String findLanguageInCookies(String cookieLanguage, Cookie[] cookies) {
for (int i = 0; i < cookies.length; i++) {
String currentCookieName = cookies[i].getName();
if (currentCookieName.equals(cookieLanguage)) {
return cookies[i].getValue();
}
}
return null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment