blob: 9350210f86a223303ac045e3d60793323a8bc6c8 [file] [log] [blame]
/*
* Copyright 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.core.server;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.i18n.shared.Localizable;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* A servlet that returns a localized string based on the inferred locale.
*/
public class TestServlet extends GwtServletBase {
/**
* Test interface for server-side localization.
*/
public interface Test extends Localizable {
String result();
}
/**
* Implementation for the default locale.
*/
public static class Test_ implements Test {
@Override
public String result() {
return "default";
}
}
/**
* Implementation for the de locale.
*/
public static class Test_de implements Test {
@Override
public String result() {
return "de";
}
}
/**
* Implementation for the en locale.
*/
public static class Test_en implements Test {
@Override
public String result() {
return "en";
}
}
/**
* Implementation for the en_US locale.
*/
public static class Test_en_US implements Test {
@Override
public String result() {
return "en_US";
}
}
/**
* Implementation for the fr locale.
*/
public static class Test_fr implements Test {
@Override
public String result() {
return "fr";
}
}
@Override
public void init() throws ServletException {
localeCookie = "LOCALE";
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
disableCache(resp);
resp.setContentType("text/plain");
Test t = GWT.create(Test.class);
PrintWriter writer = resp.getWriter();
writer.print(t.result());
writer.close();
}
// POST is only used to set the locale cookie for the next GET
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
disableCache(resp);
BufferedReader reader = req.getReader();
String locale = reader.readLine();
reader.close();
resp.setHeader("Set-Cookie", "LOCALE=" + locale);
resp.setContentType("text/plain");
PrintWriter writer = resp.getWriter();
writer.close();
}
private void disableCache(HttpServletResponse resp) {
// disable caching since IE10 caches the GET otherwise...
resp.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT");
// Set standard HTTP/1.1 no-cache headers.
resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
resp.addHeader("Cache-Control", "post-check=0, pre-check=0");
// Set standard HTTP/1.0 no-cache header.
resp.setHeader("Pragma", "no-cache");
}
}