Created
February 4, 2012 17:52
-
-
Save gphilipp/1739184 to your computer and use it in GitHub Desktop.
The servlet
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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