设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 329|回复: 0
打印 上一主题 下一主题

[资料]Servlet + JSP + mysql jdbc + chinese

[复制链接]
跳转到指定楼层
1#
发表于 2002-9-24 23:42:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Subject:  Servlet + JSP + mysql jdbc + chinese
From:  Yuan-Chen Cheng <ycheng@phi.sinica.edu.tw>
Organization:  FreeBSD Taiwan News Server.
Date:  20 Sep 2000 16:31:29 GMT
To:  freebsd-taiwan-doc@freebsd.sinica.edu.tw
Reply-To:  freebsd-taiwan-doc

--------------------------------------------------------------------------------

[ This is a repost of the following article:                               ]
[ From: Yuan-Chen Cheng <ycheng@sinica.edu.tw>                             ]
[ Subject: Servlet + JSP + mysql jdbc + chinese                            ]
[ Newsgroups: tw.bbs.comp.386bsd                                           ]
[ Message-ID: <8qaog9$6mj$2@news1.sinica.edu.tw>                           ]


JSP / Servlet 怎樣才能處理中文.
        順便談 mysql jdbc + 中文

鄭原真 (ycheng@sinica.edu.tw)

Copyright 2000.
本文版權 : GPL or BSD style, 請保留作者姓名。

本文假設你已經會使用 JSP 或是 Servlet 撰寫英文的 Web-Page.
如果你還不會,或是根本不知道 JSP 或是 Servlet 是幹什麼的,
那這篇文章不是寫給你看的。

在 Java Servlet Spec v2.0 中,對於多國語言的支援,並不足。
你必須找到 Java Servlet Spec v2.2 的實作才行,筆者試過的
是 Apache Jakarta Tomcat 3.1 軟體(註一)。

本文測試平台是 Debian Woody, Sun jdk1.2.2, Tomcat 3.1,
        mm.mysql-2.0.2


        Java Server 如何處理中文.

        前言

首先, 如何正確的了解你一個 Big5 中文在 Java 中是正確的
中文 Unicode 呢 ?

輸出一個 String("今").length() 吧 ! 由於 "今" 在 Big5 是由兩個
byte 組成, 但對 java 來說,java 的字元是 unicode, 也就是說,
無論是一個英文字或是一個中文字,其 length() 都是 1. 也就是說,
(new String("今")).length() ==> 1。才是正確的。


        Servlet 輸出中文的一個例子.

下面是一個典型的 Java Servlet.

HelloWorldExample.java =>
----------- cut here -----------------
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorldExample extends HttpServlet {

    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws IOException, ServletException
    {
        response.setLocale(new Locale(new String("zh"), new String("TW")));
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        out.println("<html>");
        out.println("<head>");

        String title = new String("hello 大家好");

        out.println("<title>" + title + "</title>");
        out.println("</head>");
        out.println("<body bgcolor=\"white\">");
        out.println("<body>");

        out.println("<p>");

        out.println("<h1>" + title + "</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}
----------- cut here -----------------
可以正常輸出中文的關鍵是:
       
        response.setLocale(new Locale(new String("zh"), new String("TW")));

注意這一行應該要放在

        PrintWriter out = response.getWriter();

之前執行。另外編譯時注意

        javac -encoding Big5 HelloWorldExample.java

或是 (linux 上的 jdk1.2.2)

        export LANG=zh_TW.Big5
        export LC_CTYPE=zh_TW.Big5
        javac HelloWorldExample.java

注意, 這個例子在 jserv v1.1.2 並不能 work, 因為該版本實做的
        JavaSoft Java Servlet APIs 2.0, 而 setLocale 是到
        Servlet APIs 2.2 才有。


        Java Server Page 如何處理中文

在此簡略說明,先看下面的例子:

test.jsp
----------------------
<%@ page contentType="text/html; charset=big5" %>
<html>
<body bgcolor="white">
中文TEST.<p>
<%= (new String("今天")).length() %>
</body>
</html>
----------------------

關鍵在第一行。有了這一行就行了。

For Hacker:

理論上這一行可以放在文件的任何地方,但由於 Java 時做上
開檔案後通常就必須指定 encoding,當 java jsp engine 發現 charset
跟 default 不同時,通常必須重新開檔案。所以實做上這一行放在越前面越好。
不過話是這樣說,由於通常 jsp 會在 run time 被 compile 成 java bytecode,
也就是說只有在 .jsp 更新時才需要 recompile。overhead 實在有限。


        Java 連結到 MySql 如何使用中文

Java 以 jdbc 連結到 databases server,MySql 有 Free 的
jdbc driver. 以下不擬說明如何使用 jdbc, 僅說明
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-4-29 20:42 , Processed in 0.112509 second(s), 24 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表