| /* |
| * 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"); |
| } |
| } |