??xml version="1.0" encoding="utf-8" standalone="yes"?> Spring是一个轻量容器Q它所带的包装器许多不同的服务和框架更易于用。轻量容器接受MJavaBeanQ而不是只接受特定cd的组件?/p>
“Springq仅仅是一个‘轻量容器’。”Justin Gehtlandq样_“它使构建J2EE应用E序?a target="_blank">Java开发h?/a>可以直达现实域问题的核心Q而不是在为域提供服务的细节方面花费大量时间。”Gehtland和Bruce Tate是?a target="_blank">Spring: A Developer's Notebook》一书的合著者,该书著述严}Q将帮助读者快速掌握新的Spring开源框架。《Spring: A Developer's Notebook》一书共分十章,其中包含大量代码以及一些准演CSpring用法的例子和实际应用E序?/p>
今天Q我们将专门介绍q个两部分书摘系列所摘录的该书中两章的第一章。本pd帮助读者理解如何用Spring创徏单、整z且高效的应用程序?/p>
在本周所摘录的第1章“入门”中Q作者Tate和Gehtland采用一个简单的应用E序Q演C如何其自动化Qƈ使其可用于Spring。(在下周的W?部分中,作者将阐明Spring如何帮助开发简单、整z、基于web的用L面,该部分内Ҏ自第2章“构建用L面”。) 您可以下载《Spring: A Developer's Notebook?a >W?章的PDF文档。该文g大小?17K?/p>
~者注Q第1章已更新Q更正了该书W一版中的一些问题。这里我们摘录的是新版本Q其面有“Updated”字L黑色标志?/p>
原文出处:http://www.onjava.com/pub/a/onjava/2005/10/05/what-is-spring.html 作者信息:liqian liqianbnu@126.com http://202.112.88.39/liqian/ 自从接触Java和JSP以来Q就不断与Java的中文ؕ码问题打交道Q现在终于得Cd的解冻I现将我们的解军_得与大家׃n?/p>
一、Java中文问题的由?/b>
Java的内核和class文g是基于unicode的,qJavaE序h良好的跨q_性,但也带来了一些中文ؕ码问题的ȝ。原因主要有两方面,Java和JSP文g本n~译时生的q问题和JavaE序于其他媒介交互生的q问题?/p>
首先JavaQ包括JSPQ源文g中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP~译成class文gq程中,使用的编码方式与源文件的~码不一_׃出现q。基于这Uؕ码,在Java文g中尽量不要写中文Q注释部分不参与~译Q写中文没关p)Q如果必d的话Q尽量手动带参数Qecoding GBK或-ecoding gb2312~译Q对于JSPQ在文g头加?lt;%@ page contentType="text/html;charset=GBK"%>?lt;%@ page contentType="text/html;charset=gb2312"%>基本上就能解册cMؕ码问题?/p>
本文要重点讨论的是第二类qQ即JavaE序与其他存储媒介交互时产生的ؕ码。很多存储媒介,如数据库Q文Ӟ等的存储方式都是基于字节流的,JavaE序与这些媒介交互时׃发生字符(char)与字?byte)之间的{换,具体情况如下Q?/p>
从页面form提交数据到javaE序 byteQ?gt;char 从数据库到javaE序 byte?gt;char 从文件到javaE序 byteQ?gt;char 从流到javaE序 byteQ?gt;char 如果在以上{换过E中使用的编码方式与字节原有的编码不一_很可能就会出Cؕ码?/p>
二、解x?/b>
1、JSP与页面参C间的q
<filter> CharacterEncodingFilter.java: public class CharacterEncodingFilter implements Filter protected String encoding = null; public void init(FilterConfig filterConfig) throws ServletException public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException }
3、Java与文?之间的q
4、其?/b>
三、后?/b>
旉Q?006-03-13
作者:Bruce A. Tate, Justin Gehtland
览ơ数Q?
4784
本文关键字:Spring, Spring framework,
文章工具
推荐l朋?/a>
打印文章
Spring
作者简?/span>
Bruce A.Tate 是位于d克萨斯州首府奥斯汀的J2LifeQLLC公司的独立顾问。他拥有15qY件开发经验,q且?本书的作者,包括畅销书《Bitter Java》以及最q出版的《Bitter EJB》和《Better,Faster,Lighter Java?/a>QO'ReillyQ。他擅长技术写作和设计审计Q特别是数据。他q是一名山地R手和皮划艇手Q也?个孩子的父亲?/td>
Justin Gehtland 是一个程序员、作者、导师和指导员,他专ȝ实世界Y件应用程序?/td>
]]>
文章原始出处Qhttp://202.112.88.39/liqian/000271.html
从javaE序到页面显C?char?gt;byte
从javaE序到数据库 char?gt;byte
从javaE序到文?charQ?gt;byte
从javaE序到流 charQ?gt;byte
前面已经提到了JavaE序与其他媒介交互时字符和字节的转换q程Q如果这些{换过E中Ҏ产生q。解册些ؕ码问题的关键在于保转换时用的~码方式与字节原有的~码方式保持一_下面分别QJava或JSP自n产生的ؕ码请参看W一部分Q?/p>
JSP获取面参数时一般采用系l默认的~码方式Q如果页面参数的~码cd和系l默认的~码cd不一_很可能就会出Cؕ码。解册cMؕ码问题的基本Ҏ是在面获取参数之前Q强制指定request获取参数的编码方式:request.setCharacterEncoding("GBK")或request.setCharacterEncoding("gb2312")?br />如果在JSP变量输出到面时出CqQ可以通过讄response.setContentType("text/html;charset=GBK")或response.setContentType("text/html;charset=gb2312")解决?br />如果不想在每个文仉都写q样两句话,更简z的办法是用Servlet规范中的q虑器指定编码,qo器的在web.xml中的典型配置和主要代码如下:
web.xml:
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>net.vschool.web.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
{
{
this.encoding = filterConfig.getInitParameter("encoding");
}
{
request.setCharacterEncoding(encoding);
response.setContentType("text/html;charset="+encoding);
chain.doFilter(request, response);
}
2、Java与数据库之间的ؕ?/b>
大部分数据库都支持以unicode~码方式Q所以解决Java与数据库之间的ؕ码问题比较明智的方式是直接用unicode~码与数据库交互。很多数据库驱动自动支持unicodeQ如Microsoft的SQLServer驱动。其他大部分数据库驱动,可以在驱动的url参数中指定,如如mm的mysql驱动Qjdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK?/p>
Javad文g最常用的类是FileInputStream/FileOutputStream和FileReader/FileWriter。其中FileInputStream和FileOutputStream是基于字节流的,常用于读写二q制文g。读写字W文件徏议用基于字W的FileReader和FileWriterQ省M字节与字W之间的转换。但q两个类的构造函数默认用系l的~码方式Q如果文件内容与pȝ~码方式不一_可能会出Cؕ码。在q种情况下,使用FileReader和FileWriter的父c:InputStreamReader/OutputStreamWriterQ它们也是基于字W的Q但在构造函C可以指定~码cdQInputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)?
上面提到的方法应该能解决大部分ؕ码问题,如果在其他地方还出现qQ可能需要手动修改代码。解决Javaq问题的关键在于在字节与字W的转换q程中,你必ȝ道原来字节或转换后的字节的编码方式,转换旉用的~码必须与这个编码方式保持一致。我们以前用Resin服务器,使用smartUploadlg上传文gQ上传文件同时传递的中文参数获取没有q问题。当在Linux中把Resin讄成服务后Q上传文件同时的中文参数获取出现了ؕ码。这个问题困C我们很久Q后来我们分析smartUploadlg的源文gQ因为文件上传采用的是字节流的方式,里面包含的参数名U和g是字节流的方式传递的。smartUploadlgd字节后再将参数名称和g字节中解析出来Q问题就出现在smartUpload字节流转换成字W串旉用了pȝ默认的编码,而将Resin讄成服务后Q系l默认的~码可能发生了改变,因此出现了ؕ码。后来,我们更改了smartUpload的源文gQ增加了一个属性charset和setCharset(String)ҎQ将upload()Ҏ中提取参数语句:
String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1 );
Ҏ?br />String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1, charset );
l于解决了这个ؕ码问题?/p>
接触Java和JSP已经有一q多了,q一q来最大的收获是越来越喜欢上了JavaQ开始把问题当作乐事ȝIӞ没有了以前的恐惧心理Q我怿我会l箋坚持下去。这一q来Q从|上学习了很多同行的宝贵l验Q在此表C感谢。这是我W一自己ȝ的Java学习心得Q由于水qx限,本文中偏颇和错误之处Q欢q指正。如果对你有些h|在保留作者信息和文章原始出处的前提下可以随处转蝲?br />撰写该文之前已参考了很多关于Java中文问题的文章,其中影响比较大的有owen1944在“Java研究l织”中发表的《这是我们公司ȝ的一些关于中文ؕ码问题的一些解x案和l验和大家分享!》等。本文谈到的解决Ҏ已应用到“基于网l的协作学习pȝQWebCL?/a>{项目中Qƈ通过资源l定的方式实C该^C文文两个版本的即时切换。GoogleҎ览器自动选择语言Q一个页面同时显C多U语a的国际化应用和R东的《Java中文处理学习W记——Hello Unicode?/a>一文引起了我极大的兴趣Q日后想l探讨Java的国际化问题Q欢q大家一赯论?br />
]]>
{ long count=0;
public long getCount()
{
return count;
}
public synchronized long setCount()
{count++;
return count;
}
}
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="Counter" %>
<jsp:useBean id="counter" class="Counter" scope="application">
</jsp:useBean>
<HTML>
<head>
<title>用JavaBean作网站计数器</title>
</head>
<BODY>
<% if(session.isNew())//如果是一个新的会?br /> counter.setCount();
%>
<P><P>Ƣ迎讉K本站Q您是第
<%=counter.getCount()%>
个访问用戗?br /></BODY>
</HTML>
.vi 的操作模? ============== vi 提供兩種操作模式Q入模?insert mode)和指令模?command mode) 。當使用者進入 vi 後,卌在指令模式下Q此刻鍵入之M字元皆被視為 指o。在此模式下可進行刪除、修改等動作。若要入資料,則需進入輸入 模式?/pre>.輸入模式 ========= 如何進入輸入模式 a (append) 由游標之後加入資料? A p行之末加入資料? i (insert) 由游標之前加入資料? I p行之首加入資料? o (open) 新增一行於該行之下供入資料之用? O 新增一行於該行之上供入資料之用?/pre>如何離開輸入模式 《ESC?i束輸入模式?/pre>.指o模式 ========= 游標之移? h 向左UM個字元? j 向上UM個字元? k 向下UM個字元? l 向右UM個字元? 0 U至該行之首 $ U至該行之末? ^ U至該行的第一個字元處? H U至視窗的第一列? M U至視窗的中間那列? L U至視窗的最後一列? G U至該檔案的最後一列? + U至下一列的W一個字元處? - U至上一列的W一個字元處? ( U至該句之首?(aM) ) U至該句之末? { U至該段落之首?(aM) } U至該段落之末? nG U至該檔案的W?n 列? n+ U至游標所在位|之後的W?n 列? n- U至游標所在位|之前的W?n 列? <Ctrl><g> 會顯C行之行號、檔案名E、檔案中最末行之行號、游? 所在行號佔^行號之癑ֈ比?/pre>aMQ句?sentence)在vi中是指以『!』、?』或『?』結束的一串字? aMQ段?paragraph)在vi中是指以I白行隔開的文字?/pre>.視窗的移? =========== <Ctrl><f> 視窗往下捲一頁? <Ctrl><b> 視窗往上捲一頁? <Ctrl><d> 視窗往下捲半頁? <Ctrl><u> 視窗往上捲半頁? <Ctrl><e> 視窗往下捲一行? <Ctrl><y> 視窗往上捲一行?/pre>.刪除、複製及修改指o介紹 (此單元較? ========================= d(delete)、c(change)和y(yank)這一的指o?vi 中的指o格式為: Operator + Scope = command (運算? (圍) 運算子: d 刪除指o。刪除資料,但會刪除資料複製到a憶體m衝區? y 資?字組、行列、句子或D落)複製到m衝區? p 攄(put)指oQ與 d ?y 配和使用。可最後delete或yank的資 料放|於游標所在位|之行列下? c 修改(change)指oQ類似delete與insert的組和。刪除一個字i、句 子等之資料,並插入新鍵資料?/pre>圍Q? e 由游標所在位|至該字串的最後一個字元? w 由游標所在位|至下一個字串的W一個字元? b 由游標所在位|至前一個字串的W一個字元? $ 由游標所在位|至該行的最後一個字元? 0 由游標所在位|至該行的第一個字元? ) 由游標所在位|至下一個句子的W一個字元? ( 由游標所在位|至該句子的W一個字元? { 由游標所在位|至該段落的最後一個字元? } 由游標所在位|至該段落的W一個字元?/pre>整行動作 dd 刪除整行? D 以行為單位,刪除游標後之所有字元? cc 修改整行的內宏V? yy yank整行Q游標所在該行複製到a憶體m衝區?/pre>.刪除與修? =========== x 刪除游標所在該字元? X 刪除游標所在之前一字元? dd 刪除游標所在該行? r 用接於此指o之後的字元取?replace)游標所在字元? 如: ra 游標所在字元以 a 取代之? R 進入取代狀態,直到《ESC》為止? s 刪除游標所在之字元Q並進入輸入模式直到《ESC》? S 刪除游標所在之該行資料Q並進入輸入模式直到《ESC》?/pre>.搬移與複? ========== 利用 delete ?put 指o可完成資料搬UM目的? 利用 yank ?put 指o可完成資料複製之目的? yank ?delete 可將指定的資料複製到a憶體m衝區Q而藉?put 指o 可將R衝區內的資料複製到螢q上? 例: 搬移一? ‧在該行埯 dd ‧游標移至目的地 ‧執?p 複製一? ‧在該行埯 yy ‧游標移至目的地 ‧執?p.指o重複 ========= 在指令模式中Q可在指令前面加入一數字 nQ則此指令動作會重複埯 n ơ? 例: 刪除10? ?0dd 複製10? ?0yy ‧游標移至目的地 ‧p 指標往下移10? ?0j.取消前一動作(Undo) =================== 卛_原執行上一指o前的內容?/pre>u 恢復最後一個指令之前的i果? U 恢復游標該行之所有改變?/pre>.搜尋 ===== 在vi中可搜尋某一字串Q游標U至該處?/pre>/字串 往游標之後找該字丌Ӏ? ?字串 往游標之前找該字丌Ӏ? n 往下繼U尋找下一個相同的字串? N 往上繼U尋找下一個相同的字串?/pre>.資料的連接 =========== J 句子的連接。將游標所在之下一行連接x標該行的後面?/pre>若某行資料太長亦可將其分成兩行,只要游標移臛_開點Q進入輸入模式 (可利?a、i{指?再按《Enter》即可?/pre>.環境的設? =========== Qset nu a定資料的行號? Qset nonu 取消行號a定? Qset ai 自動內縮? Qset noai 取消自動內縮?/pre>自動內縮(automatic indentation) 在編輯文件或E式時,有時會遇到需要內^的狀況,『:set ai』即提供? 動內^的功能Q用下例解釋之: ‧vi test ?進入R輯視窗? this is the test for auto indent 《Tab》start indent ?Qset ai (a自動內^? 《Tab》data 《Tab》data 《Tab》data ?Qset noai (取消自動內縮) the end of auto indent. ‧註Q?lt;Ctrl><d> 可刪除《Tab》字元?/pre>.ex指o ======= 讀寫資? Qw m衝區的資料寫入磁中? Q?0,20w test 第10行至W?0行的資料寫入test檔案? Q?0,20w>>test 第10行至W?0行的資料加在test檔案之後? Qr test test檔案的資料讀入編輯m衝區的最後?/pre>刪除、複製及搬移 Q?0,20d 刪除W?0行至W?0行的資料? Q?0d 刪除W?0行的資料? Q?d 刪除整個編輯m衝區? Q?0,20co30 第10行至W?0行的資料複製至第30行之後? Q?0,20mo30 第10行至W?0行的資料搬移至第30行之後?/pre>字串搜尋與取? s(substitute)指o可搜某行列圍? g(global)指o則可搜尋整個編輯m衝區的資料? s指o以第一個滿條g的字串為其取代的象Q若該行有數個滿? 件的字串Q也僅能取代W一個,若想取代所有的字串則需加上g參數? Q?,$s/old/new/g 檔案中所有的『old』改成『new』? Q?0,20s/^/ / 第10行至W?0行資料的最前面插入5個空白? Q?s/old/new/g 編輯m衝區中所有的『old』改成『new』?/pre>.恢復R輯時被中斷的檔? ======================= 在編輯過E中Q若pȝ當掉或連線中斷Q而m衝區的資料並還未 被寫回磁時Q當再度回到pȝQ執行下列指令即可回復中斷前 的檔案內宏V? %vi -r filename.R輯多個檔? ============= vi亦提供同時編輯多個檔案的功能Q方法如下: %vi file1 file2 ..當第一個檔案編修完成後Q可利用『:w』將該m衝區存檔Q而後 再利?『:n』載入下一個檔案?/pre>
]]>
function sendRequest(url, argstr, func, method) {
http_request = false;
callback_func = func;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Giving up :( Cannot create an XMLHTTP instance');
return false;
}
http_request.onreadystatechange = alertContents;
if (method == 'GET') {
http_request.open('GET', url + '?' + argstr, true);
http_request.send(null);
} else {
http_request.open('POST', url, true);
http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=GBK");
http_request.send(argstr);
}
}
function alertContents() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
callback_func(http_request.responseText);
} else {
alert('There was a problem with the request.');
}
}
}
?在页面用如下代码将js文g包含q来:
<script language=javascript src="ajax.js"></script>
?在页面调用sendRequest(...)Ҏ:
?<a href="javascript:sendRequest('hello.jsp',param,function,'GET')" >调用AJAX</a>
?<input type="button" value="提交" onclick="sendRequest('getInfo.do',param,function,'POST')" />
注释(以第一个ؓ?:
hello.jsp: q个例子采用ajax通过一个链接请求hello.jsp面,
param: 为参?可以为空,也可以不为空,比如name=value&password=123456,也可以通过把一个表?form)的字D늻合v来作Z个字W串传?br />q去,
function: 是你自己写的一个函?用于处理q回的内?一般的处理?br />返回的内容昄在页?一个典型的例子:
function search(str){
alert(str); //用于调试.
myId.innerHTML = str;
}
GET: 是请求的Ҏ,单的?get代表h一个资?post代表提交参数q请求资?
M疑问,可以联系本h:diego.liu@163.com