14.10. PostgreSQL + JDBC + Servlet + XMLC ¤¤¤å§¹¥þ¸Ñ¨M¤è®×

§@ªÌ¡Gsmallufo¡AEmail¡Gsmallufo@bigfoot.com

¦Û¥j¥H¨Ó Servlet ³sµ² Database ¦b¤¤¤å¤è­±Á`¬O¦³³\¦h°ÝÃD¡A¤×¨ä¬O¦b web ºÝ¡A­n¦Ò¼{ªº¦]¯À§ó¦h¤F¡C¦³®É­Ô¡Aformªº¤å¦r¹J¨ì¡u³\¡A¥\¡vµ¥¦r¡A ­n¨Ï¥ÎªÌ¦Û¦æ¿é¤J¡§\¡¨³o­Ó¸õ»¡¦r¤¸¡F¦³®É­Ô©ú©ú§â¡u³\¡A¥\¡vinsert ¶i¸ê®Æ®w¡A¦ý¬O¨ú¥X¨Ó¤S·|Åܦ¨¡q¡H¡r¡F¦Ó¤¤¤åªº³\¦h¦¸±`¥Î¦r¡A ¨Ò¦p§»ùÖªº¡uùÖ¡v¡Aµ¥©Ç©Çªº¦r¤¸¡A§ó¬OÅý programmer ÀY¾v¥Õ¤F¤@¥b¡C¦Ó encoding ¤S¬O­Ó³Ì­«­nªºÃöÁä¡A±`¨£ªº encoding ¦³¥H¤U´XÂI¡G

code  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F9D0                     ùÖ ù× ùØ ùÙ ùÚ ùÛ ùÜ ùÝ ùÞ ùß
F9E0  ùà ùá ùâ ùã ùä ùå ùæ ùç ùè ùé ùê ùë ùì ùí ùî ùï
F9F0  ùð ùñ ùò ùó ùô ùõ ùö ù÷ ùø ùù ¢~ ¢¡ ¢¢ ¢£ ùþ 

³o´XºØ encoding ¸U°¨©bÄË¡A±`¨Ï programmer Â઺·wÀYÂà¦V¡A ¤£ª¾¥Ø«e¨­¦b¦ó³B¡A¤£ª¾¦h¤Ö programmer ¦b¦¹®ö¶O«C¬K¡C

¤¤¤å¸Ñ¨M¤è®×¥H«e¦bºô¸ô¤W¦³³\¦h°µªk¡A¦ý¬O³q±`³£¤£¤Ó§¹¾ã¡A ­n¤£µM´N±o¤j¤MÁï©ò§ó°Ê¨ì JDBC driver¡A©Î¬O­«·s compile ¾ã­Ó¸ê®Æ®w¨t²Î¡C¦Ó¬°¤F¨t²Îªº¡u§¹¾ã©Ê¡v¡A§Ú¨Ã¤£¦Ò¼{³o¨Ç°µªk¡C §Úªº§@ªk¥i¥H§¹¾ã«O¯d postgreSQL ªº§¹¾ã©Ê¡q¥H RPM ¦w¸Ë¡A¤£¥Î­«·s compile¡r¡A¦Ó¥B JDBC driver ¤£¥Î­«·s compile¡C ¥H¤Uªº¨BÆJ«á¥b³¡¥D­n¬O°w¹ï XMLC ¦Ó¨¥¡A¤£¹L¤@¯ë¡u¯Â¡vªº servlet µ{¦¡¡AÀ³¸Ó«Ü®e©öºé¨ú¥X¨Ó¡C

¥H¤U¬O§Úªº¤@¨ÇÀô¹Ò¡G

RedHat Linux 7.0 (CLE 1.0)¡A¨ä¥Lªº¤¤¤åÀô¹Ò¤]À³¸Ó¨S°ÝÃD¡C ¦pªG±z¬O­^¤åª©ªº¡A½Ð¦w¸Ë Chinese locale patch §Y¥i¡C ­«ÂI¬O¡A·í±z¿é¤J 'set' ®É¡A¥i¥H¬Ý¨ì 'LANG=zh_TW' ³o­ÓÀô¹ÒÅܼơC

Servlet Engine¡GResin 2.0.2

posrgreSQL-7.1.3-1PGDG.i386.rpm¡AÀɮפj¤p 1164817 bytes¡Aª½±µ¥H rpm -Uvh ¦w¸Ë§Y¥i¡A¤£¥Î­«·s compile¡CJDBC driver ¤]¬Oª½±µ¨Ï¥Î postgresql-jdbc-7.1.3-1PGDG.i386.rpm ©Ò¦w¸Ëªº jdbc7.1-1.2.jar §Y¥i¡C

¸ê®Æ®w½Ð¥H Unicode ½s½X¡qcreatedb -E Unicode¡r¡A³oÂI³Ì¬°­«­n¡C

Web application Deployment(web.xml) ¤¤ªº <web-app> ¤£­n¥[¤W character-encoding="xxx" ³o­Ó attribute

¦b servlet ¤¤¡A½Ð³]©w res.setcontentType("text/html; charset=CP950");

form ªº°Ñ¼Æ¡Aª½±µ¥H getParameter("xxx") Ū¨ú¡A ¦A insert ¶i¸ê®Æ®w¡A¤£¥Î§@¥ô¦óÂà½X¡C

­n±q¸ê®Æ®w¤¤Åª¨ú¸ê®Æ¡A±o§Q¥Î¡G new String(rs.getString("ColName").getBytes("8859_1"),"CP950")

­n¿é¥X¾ã¥÷¤å¥ó¡qimplement org.enhydra.xml.xmlc.html.HTMLObject ªº¤å¥ó¡r®É¡A ¤£­n¥Î out.println(doc.toDocument())¡A½Ð§ï¥Î¦p¤Uªº¤èªk¡G

org.enhydra.xml.io.OutputOptions options = new OutputOptions();
options.setOmitEncoding(false);
options.setXmlEncoding("Big5");
DOMFormatter formatter = new DOMFormatter(options);
if(iChingVotingsPage.getDelefate() != null) {
  out.println(formatter.toString(iChingVotingsPage.getDelegate()));
) else {
  out.println(formatter.toString(iChingVoringPage));
}

Servlet ÀÉ®×­n¥H javac -encoding CP950 ¨Ó½sĶ¡C

¤j¥\§i¦¨¡A¦p¦¹¸Ñ¨M¤è®×¡A«h¥i¥H§¹¥þ¥¿±`³B²z©Ò¦³¨u¨£¥H¤Î¯S®í¦r¤¸¡A ¤£½×¬O´¡¤J¸ê®Æ®w¡A±q¸ê®Æ®w¨ú¥X¨Ó¦bºô­¶¤W¡A³£¨S¦³°ÝÃD¡C