2007年8月23日
我是不是因该写一点关于设计模式的文章了呢?
或许我该了...
最近真的很累,非常累,最多的还是来自无尽物质的要求和匮乏的工资;致使我开始怀疑我来上海是否是对的,但是想想别人,或者说是很多人都能来,而且还有些还混的比较好,难道我就不该来吗?我很彷徨.
URL的openConnection大开一个URLConnection,如果你打开的是一个http协议的url.那么返回的事实上是一个HttpURLConnection.这个connection中,可以设置和Http访问有关的一些属性,比如contentType,method等等,这些都是http所特有的.所以必须在HttpURLConnection中设置.
在URL去访问servlet时,url字符串会被编码成相应的字符集,比如下面代码
URL url=new URL("http://localhost:8080/TestWeb/URLServlet?name=中国");
那么在servlet端看来,这个"中国"两个汉字必须使用以上代码的调用端的系统默认字符集来解码,比如我的机器的默认字符集是GBK.那么Servlet端的tomcat的相应的connector的URIEncoding必须设置为GBK或者其兼容字符集.否则出现乱码.
当然,在上述代码中可以把中文用URLEncoder来按照相应的字符集编码.比如URLEncoder.encode("中国","UTF-8");那相应的tomcat端.比如把connector的URIEncoding属性设置为相应的字符集UTF-8.这样才不会出现乱码.
同理.在servlet端.使用contentType设置的字符集编码方式,和客户端的解码方式必须一致,不然中文会出现乱码现象.
在servlet中用sendRedirect中url出现中文的时候的问题,比如sendRedirect("my.jsp?name=张三");那么在客户端,会出现一串乱码.比如
http://localhost:8080?my.jsp?name=????,这是由于在java内部的编码都是以Unicode来编码的,那这串字符串在反映到客户端时.你客户端使用的解码方式和这个是不同的 所以出现乱码.所需要做的,是用URLEncoder来编码成特定的编码格式,当然,这个类的使用可以参考jdk文档.