Java Tutorial/Servlet/Internationlization I18N
Содержание
Japanese Hello World Servlet
<source lang="java">
import java.io.IOException; import java.io.PrintWriter; import java.util.Locale; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class JapaneseHelloWorldServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); response.setLocale(Locale.JAPANESE); PrintWriter out = response.getWriter(); out.println(""); out.println("\u4eca\u65e5\u306f\u4e16\u754c"); out.println(""); }
}</source>
Locale Information Servlet
<source lang="java">
import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Locale; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LocaleInformationServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); Locale userPreferredLocale = request.getLocale(); Enumeration userPreferredLocales = request.getLocales(); out.println("Preferred Locale: " + userPreferredLocale.toString()); out.println(""); out.print("Preferred Locales: "); while (userPreferredLocales.hasMoreElements()) { userPreferredLocale = (Locale) userPreferredLocales.nextElement(); out.print(userPreferredLocale.toString() + ", "); } out.println(); out.println(""); }
}</source>
Locale Session Servlet
<source lang="java">
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class LocaleSessionServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { HttpSession userSession = request.getSession(); if (userSession.isNew()) { userSession.setAttribute("userLocale", request.getLocale()); } }
}</source>
Servlet I18N: Page Header
<source lang="java">
import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/plain; charset=Shift_JIS"); PrintWriter out = res.getWriter(); res.setHeader("Content-Language", "ja"); Locale locale = new Locale("ja", ""); DateFormat full = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); out.println("In Japanese:"); out.println("\u4eca\u65e5\u306f\u4e16\u754c"); // Hello World out.println(full.format(new Date())); }
}</source>
Servlet I18N: Read From File
<source lang="java">
import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/plain; charset=Shift_JIS"); PrintWriter out = res.getWriter(); res.setHeader("Content-Language", "ja"); Locale locale = new Locale("ja", ""); DateFormat full = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); out.println("In Japanese:"); try { FileInputStream fis = new FileInputStream(req.getRealPath("/HelloWorld.ISO-2022-JP")); InputStreamReader isr = new InputStreamReader(fis, "ISO-2022-JP"); BufferedReader reader = new BufferedReader(isr); String line = null; while ((line = reader.readLine()) != null) { out.println(line); } } catch (FileNotFoundException e) { e.printStackTrace(); } out.println(full.format(new Date())); }
}</source>
Servlet Spanish
<source lang="java">
import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/plain"); PrintWriter out = res.getWriter(); res.setHeader("Content-Language", "es"); Locale locale = new Locale("es", ""); DateFormat fmt = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); fmt.setTimeZone(TimeZone.getDefault()); out.println("En Espa\u00f1ol:"); out.println("\u00a1Hola Mundo!"); out.println(fmt.format(new Date())); }
}</source>
Servlet Unicode
<source lang="java">
import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { Locale locale; DateFormat full; try { res.setContentType("text/plain; charset=UTF-8"); //PrintWriter out = res.getWriter(); PrintWriter out = new PrintWriter( new OutputStreamWriter(res.getOutputStream(), "UTF8"), true); locale = new Locale("en", "US"); full = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); out.println("In English appropriate for the US:"); out.println("Hello World!"); out.println(full.format(new Date())); out.println(); locale = new Locale("es", ""); full = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); out.println("En Espa\u00f1ol:"); out.println("\u00a1Hola Mundo!"); out.println(full.format(new Date())); out.println(); locale = new Locale("ja", ""); full = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); out.println("In Japanese:"); out.println("\u4eca\u65e5\u306f\u4e16\u754c"); out.println(full.format(new Date())); out.println(); locale = new Locale("zh", ""); full = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); out.println("In Chinese:"); out.println("\u4f60\u597d\u4e16\u754c"); out.println(full.format(new Date())); out.println(); locale = new Locale("ko", ""); full = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); out.println("In Korean:"); out.println("\uc548\ub155\ud558\uc138\uc694\uc138\uacc4"); out.println(full.format(new Date())); out.println(); locale = new Locale("ru", ""); full = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); out.println("In Russian (Cyrillic):"); out.print("\u0417\u0434\u0440\u0430\u0432\u0441\u0442"); out.println("\u0432\u0443\u0439, \u041c\u0438\u0440"); out.println(full.format(new Date())); out.println(); } catch (Exception e) { e.printStackTrace(); } }
}</source>
Servlet Unicode Escape String
<source lang="java">
import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { try { res.setContentType("text/plain; charset=UTF-8"); PrintWriter out = res.getWriter(); String charset = req.getParameter("charset"); String text = req.getParameter("text"); BufferedReader reader = new BufferedReader( new InputStreamReader(new StringBufferInputStream(text), charset)); text = reader.readLine(); out.println("Received charset: " + charset); out.println("Received text: " + text); out.println("Received text (escaped): " + toUnicodeEscapeString(text)); } catch (Exception e) { e.printStackTrace(); } } public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { doGet(req, res); } private static String toUnicodeEscapeString(String str) { // Modeled after the code in java.util.Properties.save() StringBuffer buf = new StringBuffer(); int len = str.length(); char ch; for (int i = 0; i < len; i++) { ch = str.charAt(i); switch (ch) { case "\\": buf.append("\\\\"); break; case "\t": buf.append("\\t"); break; case "\n": buf.append("\\n"); break; case "\r": buf.append("\\r"); break; default: if (ch >= " " && ch <= 127) { buf.append(ch); } else { buf.append("\\"); buf.append("u"); buf.append(toHex((ch >> 12) & 0xF)); buf.append(toHex((ch >> 8) & 0xF)); buf.append(toHex((ch >> 4) & 0xF)); buf.append(toHex((ch >> 0) & 0xF)); } } } return buf.toString(); } private static char toHex(int nibble) { return hexDigit[(nibble & 0xF)]; } private static char[] hexDigit = { "0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f" };
}</source>
Servlet UTF8 Page
<source lang="java">
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet {
PrintWriter out = null; public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { try { // Get a reader to read the incoming data BufferedReader reader = req.getReader(); // Get a writer to write the data in UTF-8 res.setContentType("text/html; charset=UTF-8"); //PrintWriter out = res.getWriter(); out = new PrintWriter( new OutputStreamWriter(res.getOutputStream(), "UTF8"), true); char[] buf = new char[4 * 1024]; // 4Kchar buffer int len; while ((len = reader.read(buf, 0, buf.length)) != -1) { out.write(buf, 0, len); } out.flush(); } catch (Exception e) { out.println("Problem filtering page to UTF-8"); getServletContext().log(e, "Problem filtering page to UTF-8"); } out.println("Done"); } public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { doGet(req, res); }
}</source>
Set content type to charset=ISO-/td>
<source lang="java">
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class UnknownEncodingServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html; charset=ISO-8850-1"); PrintWriter out = response.getWriter(); }
}</source>