国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

網絡應用程序支持中文的簡單試驗

2019-11-18 12:26:43
字體:
來源:轉載
供稿:網友

  這幾天有些空閑,就對網絡應用(Web application)支持中文進行了一次簡單的試驗,現在總結一下。由于是第一次接觸,錯誤難免,望指正幫助。
  
  試驗方法是在數據庫中建立一個表格,如student表,然后建立一個網絡應用程序,對該表中的數據進行查詢與編輯。結構是 jsp——javaBean——Controller——DAO,只用servlet(Jsp2.0?)技術。
  
  開發環境是linux(平臺缺省編碼是UTF?8); 網絡服務器TOMCAT5.0.28;數據庫是PostgreSQL/MySQL
  
  整個試驗的思路是,從客戶端(browser)到我的應用程序,再到數據庫存取,假如所有過程均采用UTF?8編碼的話,數據應保持完整性,即不應出現亂碼問題。
  
  首先確定數據庫支持UTF?8編碼。利用數據庫交互程序,往建好的表中直接寫入中文數據,發現一切正常(你甚至不需要規定數據庫編碼為UNICODE, 可能是因為我的操作系統的缺省編碼是UNICODE的原故)。
  
  這樣看來,出現亂碼的主要原因,可能在于應用程序的編寫以及客戶與服務器數據傳輸的過程。試驗證實,對于從數據庫中提取數據時,要害是在有關Jsp源文件頭部聲明應用程序的編碼:<%@ page pageEncoding="UTF-8" %>.因Tomcat5在將Jsp編譯時,其使用的缺省編碼并非UNICODE, 因此就有可能造成數據丟失或錯誤。
  
  同樣,在處理來自客戶端的數據輸入時,在拿參數之前,也要相應設好數據編碼,以避免Tomcat用其缺省的編碼來對數據流進行解釋。試驗中采用本站網友提出的辦法,即用Filter的方式對請求的數據進行編碼設定。經此處理后,其他相關源代碼中對參數的獲取己其他處理等,不需要作任何非凡的處理。
  
  其簡單源代碼如下:
  
  import java.io.IOException;
  import javax.servlet.*;
  
  /**
  * a filter to set the coming request encoding to a desired charset.
  */
  public class EncodingFilter implements Filter {
  
  PRivate static String desired_charset = "UTF-8";
  
  // gets defined encoding from web.xml
  public void init(FilterConfig conf) throws ServletException {
  desired_charset = conf.getInitParameter("charset");
  }
  
  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
  throws IOException, ServletException {
  req.setCharacterEncoding(desired_charset);  // sets request encoding.
  chain.doFilter(req, res);
  }
  
  public void destroy() {}
  }
  
  //----------------------------------------------------------------
  //配置文件 "web.xml", showing the declaration of the above filter:
  
  <?xml version="1.0" encoding="ISO-8859-1"?>
  
  <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
  version="2.4">
  
  <filter>
  <filter-name>Character Encoding Filter</filter-name>
  <filter-class>john.control.EncodingFilter</filter-class>
  <init-param>
  <param-name>charset</param-name>
  <param-value>UTF-8</param-value>
  </init-param>
  </filter>
  
  <filter-mapping>
  <filter-name>Character Encoding Filter</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  ......
  
  </web-app>
  
  總結如下:
  
  1:網絡應用程序支持中文的主要問題在于有些服務器(servlet container)的缺省編碼不是UNICODE。
  2:解決的辦法是通過對服務器的配置或在應用程序源代碼中,指定希望采用的編碼。
  3:在應用程序源代碼中指定編碼,主要在Jsp源文件中包括<%@ page pageEncoding="UTF-8" %>;而處理客戶端所傳數據時,可利用Filter來設定所需的編碼。
  4:通過統一從客戶端到數據庫的編碼為UNICODE,如UTF?8,同一個網絡應用程序可以支持多種語言。
  5:改用MySQL數據庫系統后,應用程序仍然工作良好。
  
  存在問題:
  
  由于好奇,將此網絡應用程序部署到WindowsXP下進行調試,數據庫與服務器均不變(當然是Windows版本)。程序運行良好。但由于此WindowsXP的缺省編"CP1521”(-:something like that),而并非UTF?8, 因此,通過數據庫交互程序直接對數據庫進行查詢,Console輸出亂碼(PostreSql)。
  
  最后,告訴大家今年聽到的一句話:“生活會讓你失去自信的”。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 古交市| 抚顺市| 汾西县| 太仓市| 普兰店市| 兴国县| 临江市| 耿马| 慈利县| 塔河县| 桐城市| 宁远县| 崇明县| 甘孜| 龙胜| 陆河县| 永安市| 峨边| 库伦旗| 高雄市| 汶川县| 武陟县| 明星| 惠东县| 宁夏| 无极县| 腾冲县| 同心县| 石家庄市| 禹城市| 柘荣县| 永安市| 望奎县| 得荣县| 乌拉特后旗| 牟定县| 射阳县| 乃东县| 博白县| 盐源县| 虞城县|