Java中文乱码问题大全
这里只有一些文档链接,没有进一步的整理。相信如果您能平心静气的读完的话,一定会对中文问题有个彻底的认识,能够应对各种中文乱码问题 :)
Web应用中的中文乱码问题
- 解决 Tomcat 5.0.19 中文参数传递问题 http://www.javaworld.com.tw/jute/post/view?bid=9&id=44042&st
- 转载Tomcat中文问题 http://togetherj.blogdriver.com/togetherj/253018.html
- 深入剖析JSP和Servlet对中文的处理 http://www.knowsky.com/5352.html
- 用XMLHTTP Post/Get HTML页面时的中文乱码之完全Script解决方案 http://www.knowsky.com/list.asp?id=2702
- 修正上传 attachement file时的中文档名乱码问题 (修改mvnforum-1.0.0-rc3) http://www.javaworld.com.tw/jute/post/view?bid=11&id=57879&sty=1&tpg=1&age=-1
中文乱码问题原理阐述
- 深入剖析Java编程中的中文问题及建议最优解决方法 http://dev.csdn.net/article/27/27140.shtm http://dev.csdn.net/article/27/27142.shtm
- Java中文处理学习笔记——Hello Unicode http://www.chedong.com/tech/hello_unicode.html
- Java编程技术中汉字问题的分析及解决 http://www-900.ibm.com/developerWorks/cn/java/java_chinese/
- 关于Java中文问题的几条分析原则 http://www-900.ibm.com/developerWorks/cn/java/l-javachinese/index.shtml
- Java中文问题及最优解决方法 http://gceclub.sun.com.cn/NASApp/sme/jive/thread.jsp?forum=8&thread=13425
使用JDBC连接数据库时的中文乱码问题 TODO
英文参考文档
- Multibyte-character processing in J2EE http://www.javaworld.com/javaworld/jw-04-2004/jw-0419-multibytes.html
J2EE开发常用开源项目介绍
主要就我所了解的J2EE开发的框架或开源项目做个介绍,可以根据需求选用适当的开源组件进行开发.主要还是以Spring为核心,也总结了一些以前web开发常用的开源工具和开源类库
1持久层:
1)Hibernate
这个不用介绍了,用的很频繁,用的比较多的是映射,包括继承映射和父子表映射
对 于DAO在这里介绍个在它基础上开发的包bba96,目前最新版本是bba96 2.0它对Hibernate进行了封装, 查询功能包括执行hsql或者sql查询/更新的方法,如果你要多层次逻辑的条件查询可以自己组装QueryObject.可以参考它做 HibernateDAO.也可以直接利用它
2) iBATIS
另一个ORM工具,Apache的,没有Hibernate那么集成,自由度比较大
2:SpringMVC
原理说明和快速入门:
配置文件为:
Spring的配置文件默认为WEB-INF/xxxx-servelet.xm其中xxx为web.xml中org.springframework.web.servlet.DispatcherServlet的servlet-name。
Action分发:
Spring将按照配置文件定义的URL,Mapping到具体Controller类,再根据URL里的action= xxx或其他参数,利用反射调用Controller里对应的Action方法。
输入数据绑定:
Spring提供Binder 通过名字的一一对应反射绑定Pojo,也可以直接从request.getParameter()取数据。
输入数据验证
Sping 提供了Validator接口当然还可以使用开源的Commons-Validaor支持最好
Interceptor(拦截器)
Spring的拦截器提供接口需要自己编写,在这点不如WebWork做的好.全面
(这里提一下WebWork和Struts的区别最主要的区别在于WebWork在建立一个Action时是新New一个对象而Struts是SingleMoule所有的都继承它的一个Action,所以根据项目需要合适的选择.)
jsp 内嵌网页内容–iframe
ZZzzz~ may wind<Iframe src=”/URL” width=”x” height=”x” scrolling=”[OPTION]” frameborder=”x”></iframe>
src:文件的路径,既可是HTML文件,也可以是文本、ASP等;
width、height:”画中画”区域的宽与高;
scrolling:当SRC的指定的HTML文件在指定的区域不显不完时,滚动选项,如果设置为NO,则不出现滚动条;如为Auto:则自动出现滚动条;如为Yes,则显示;
frameborder:区域边框的宽度,为了让“画中画“与邻近的内容相融合,常设置为0。
比如:
<Iframe src=”http://www.xyz.com/xyz“; width=”250″ height=”200″ scrolling=”no” frameborder=”0″></iframe>
窗口与浮动帧之间的相互控制
在脚本语言与对象层次中,包含Iframe的窗口我们称之为父窗体,而浮动帧则称为子窗体,弄清这两者的关系很重要,因为要在父窗体中访问子窗体或相反都必须清楚对象层次,才能通过程序来访问并控制窗体。
1、在父窗体中访问并控制子窗体中的对象
在父窗体中,Iframe即子窗体是document对象的一个子对象,可以直接在脚本中访问子窗体中的对象。
现在就有一个问题,即,我们怎样来控制这个Iframe,这里需要讲一下Iframe对象。当我们给这个标记设置了ID 属性后,就可通过文档对象模型DOM对Iframe所含的HTML进行一系列控制。
比如在example.htm里嵌入test.htm文件,并控制test.htm里一些标记对象:
<Iframe src=”test.htm” id=”test” width=”250″ height=”200″ scrolling=”no” frameborder=”0″></iframe>
test.htm文件代码为:
<html>
<body>
<h1 id=”myH1″>hello,my boy</h1>
</body>
</html>
如我们要改变ID号为myH1的H1标记里的文字为hello,my dear,则可用:
document.myH1.innerText=”hello,my dear”(其中,document可省)
在example.htm文件中,Iframe标记对象所指的子窗体与一般的DHTML对象模型一致,对对象访问控制方式一样,就不再赘述。
2、在子窗体中访问并控制父窗体中对象
在子窗体中我们可以通过其parent即父(双亲)对象来访问父窗口中的对象。
如example.htm:
<html>
<body onclick=”alert(tt.myH1.innerHTML)”> <Iframe name=”tt” src=”frame1.htm” width=”250″ height=”200″ scrolling=”no” frameborder=”0″></iframe>
<h1 id=”myH2″>hello,my wife</h1>
</body>
</html>
如果要在frame1.htm中访问ID号为myH2中的标题文字并将之改为”hello,my friend”,我们就可以这样写:
parent.myH2.innerText=”hello,my friend”
这里parent对象就代表当前窗体(example.htm所在窗体),要在子窗体中访问父窗体中的对象,无一例外都通过parent对象来进行。
Iframe虽然内嵌在另一个HTML文件中,但它保持相对的独立,是一个“独立王国“哟,在单一HTML中的特性同样适用于浮动帧中。
试想一下,通过Iframe标记,我们可将那些不变的内容以Iframe来表示,这样,不必重复写相同的内容,这有点象程序设计中的过程或函数,减省了 多少繁琐的手工劳动!另外,至关重要的是,它使页面的修改更为可行,因为,不必因为版式的调整而修改每个页面,你只需修改一个父窗体的版式即可了。
要注意的是,Nestscape6.0之前版本不支持Iframe标记。
例子:
<iframe src=”页面” width=”宽度” height=”高度” align=”排列可以是left或right,center” scrolling=”是否有滚动条可以填no或yes”></iframe>
<IFRAME frameBorder=0 frameSpacing=0 height=25 marginHeight=0 marginWidth=0 scrolling=no
name=main src=”/bgm/bgm.html” width=300></IFRAME>
用了iframe后 发现滚动条不漂亮 想用2个图片来代替↑↓
应该怎么实现呢?
回答:
用下列代码替换网页的<title>..</title>
<SCRIPT LANGUAGE=”javascript“>
function scroll(n)
{temp=n;
Out1.scrollTop=Out1.scrollTop+temp;
if (temp==0) return;
setTimeout(“scroll(temp)”,80);
}
</SCRIPT>
<TABLE WIDTH=”330″>
<TR>
<TD WIDTH=”304″ VALIGN=”TOP” ROWSPAN=”2″ >
<DIV ID=Out1 STYLE=”width:100%; height:100;overflow: hidden ;border-style:dashed;border-width:
1px,1px,1px,1px;”>
文字<BR> 文字<BR>
文字<BR>
文字<BR>
文字
<BR>
<BR>
</DIV>
</TD>
< TD WIDTH=”14″ VALIGN=”TOP”><IMG SRC=”photo/up0605.gif” WIDTH=”14″ HEIGHT =”20″ onmouseover=”scroll(-1)” onmouseout=”scroll(0)” onmousedown=”scroll (-3)” BORDER=”0″ ALT=”按下鼠标速度会更快!”></TD>
</TR>
<TR>
< TD WIDTH=”14″ VALIGN=”BOTTOM”><IMG SRC=”photo/down0605.gif” onmouseover =”scroll(1)” onmouseout=”scroll(0)” onmousedown=”scroll(3)” BORDER=”0″ WIDTH =”15″ HEIGHT=”21″ ALT=”按下鼠标速度会更快!”></TD>
</TR>
</TABLE>
下面这段代码可以实现IFrame自适应高度,即随着页面的长度,自动适应以免除页面和IFrame同时出现滚动条。
源代码如下
<script type=”text/javascript”>
//** iframe自动适应页面 **//
//输入你希望根据页面高度自动调整高度的iframe的名称的列表
//用逗号把每个iframe的ID分隔. 例如: ["myframe1", "myframe2"],可以只有一个窗体,则不用逗号。
//定义iframe的ID
var iframeids=["test"]
//如果用户的浏览器不支持iframe是否将iframe隐藏 yes 表示隐藏,no表示不隐藏
var iframehide=”yes”
function dyniframesize()
{
var dyniframe=new Array()
for (i=0; i<iframeids.length; i++)
{
if (document.getElementById)
{
//自动调整iframe高度
dyniframe[dyniframe.length] = document.getElementById(iframeids);
if (dyniframe && !window.opera)
{
dyniframe.style.display=”block”
if (dyniframe.contentDocument && dyniframe.contentDocument.body.offsetHeight) //如果用户的浏览器是NetScape
dyniframe.height = dyniframe.contentDocument.body.offsetHeight;
else if (dyniframe.Document && dyniframe.Document.body.scrollHeight) //如果用户的浏览器是IE
dyniframe.height = dyniframe.Document.body.scrollHeight;
}
}
//根据设定的参数来处理不支持iframe的浏览器的显示问题
if ((document.all || document.getElementById) && iframehide==”no”)
{
var tempobj=document.all? document.all[iframeids] : document.getElementById(i
frameids)
tempobj.style.display=”block”
}
}
}
if (window.addEventListener)
window.addEventListener(“load”, dyniframesize, false)
else if (window.attachEvent)
window.attachEvent(“onload”, dyniframesize)
else
window.onload=dyniframesize
</script>
其他有参考价值的网址:
http://www.webshu.com/tutorial/tor/7,id=0408.htm //iframe嵌入网页的用法
http://www.phpx.com/man/dhtmlcn/objects/IFRAME.html //IFRAME对象
http://www.hoyo.idv.tw/web-program/html/iframe.htm //内嵌框架iframe
在jsp环境中配置使用fckeditor
FCKeditor是sourceforge.net上面的一个开源项目,主要是实现在线网页编辑器的功能,可以让web程序拥有如MS Word这样强大的编辑功能。官方网站为http://www.fckeditor.net ,在服务器端支持ASP.Net、ASP、ClodFusion、PHP、Java等语言,并且支持IE 5+、Mozilla 、Netscape等主流浏览器。 1、解压FCKeditor_2.2.zip,(FCKeditor主文件),将FCKeditor目录复制到网站根目录下, 2、解压FCKeditor-2.3.zip,(jsp,FCKeditor整合包),作用:This is the JSP Integration Pack for using FCKeditor inside a java server page without the complexity of using a Java scriptlets or the javascript api. 3、将FCKeditor-2.3/web/WEB-INF/web.xml中的两个servlet,servlet-mapping定义复制到自已项目的web.xml文件中 <servlet-mapping> <servlet-mapping> <servlet-mapping> <servlet-mapping> 5、在需使用FCKeditor的jsp界面中加入: // 文件开头处加入 1、将FCKeditor目录下及子目录下所有以”_”下划线开头的文件夹删除 完成,现在看是不是清爽了很多? 其它问题: 安全问题: 到此安装FCKeditor就完成了,相关详细配置你可以看FCKeditor-2.3.zip,(jsp,FCKeditor整合包)文件夹中web/_samples目录下的例子。
首先在官方网站下载fckeditor,注意有两个包,一个是主文件,一个是jsp整合包的。
修改
<servlet-name>Connector</servlet-name>
<url-pattern>/editor/filemanager/browser/default/connectors/jsp/connector</url-pattern>
</servlet-mapping>
<servlet-name>SimpleUploader</servlet-name>
<url-pattern>/editor/filemanager/upload/simpleuploader</url-pattern>
</servlet-mapping>
为
<servlet-name>Connector</servlet-name>
<url-pattern>/FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector</url-pattern>
</servlet-mapping>
<servlet-name>SimpleUploader</servlet-name>
<url-pattern>/FCKeditor/editor/filemanager/upload/simpleuploader</url-pattern>
</servlet-mapping>
4、将FCKeditor-2.3/web/WEB-INF/lib目录下文件复制到自已项目的lib文件夹中
<%@ taglib uri="http://fckeditor.net/tags-fckeditor" prefix="FCK" %>
//要使用的地方加入
<FCK:editor id="content" basePath="/FCKeditor/"
imageBrowserURL="/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector"
linkBrowserURL="/FCKeditor/editor/filemanager/browser/default/browser.html?Connector=connectors/jsp/connector"
flashBrowserURL="/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/jsp/connector"
imageUploadURL="/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Image"
linkUploadURL="/FCKeditor/editor/filemanager/upload/simpleuploader?Type=File"
flashUploadURL="/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Flash">
this is default content
</FCK:editor>
启动服务器测试。。。。成功后,来给FCKeditor瘦瘦身.
2.FCKeditor根目录下只保留fckconfig.js, fckeditor.js, fckstyles.xml, fcktemplates.xml其余全部删除
3.将editor/filemanager/upload目录下文件及文件夹清空.
4.还可以将editor/skins目录下的皮肤文件删除,只留下default一套皮肤(如果你不需要换皮肤的话)
5.还可以将editor/lang目录下文件删除,只保留en.js, fcklanguagemanager.js, zh-cn.js, zh.js文件(英文,简体中文,繁体中文一般应该够用了:) )
在struts+spring+hibernate中使用,上传图像功能中可能会出现报:
The output format must have a ‘{http://xml.apache.org/xalan}content-handler’ property!
错的情况,将WEB-INF/lib目录下xalan*.jar删除试试
假如在前台让普通用户也能使用FCKEditor,要注意相关安全问题,在前台使用时,不要使用默认的ToolBar,
要将添加图像,flash,图像域按钮去掉
在fckconfig.js中大约78行配置 那些数组中的值就像当于界面上的一个功能,你可以强行把每组值试出来代表什么。:P
Java中类初始化的顺序
在创建对象时,对象所在类的所有数据成员会首先进行初始化,如果其中的成员变量有对象,那么它们也会按照顺序执行初始化工作。在所有类成员初始化完成后,才调用对象所在类的构造方法创建对象。构造方法作用就是初始化。
静态对象(变量)在非静态对象前初始化。静态对象(变量)只初始化一次,再次调用就不初始化了,但非静态对象在每次调用时都要初始化。
程序中的主类的静态变量会在main()方法执行前进行初始化工作。
不仅第1次创建对象时,类中所有的静态变量要初始化,第1次访问类中的静态变量(没有创建对象)时,该类中所有的静态变量也要按照它们在类中排列的顺序初始化。
初始化的顺序包括构造方法调用的顺序如下:
1. 主类的静态成员首先初始化。
2. 主类的超类的构造方法按照从最高到最低的顺序被调用。
3. 主类的非静态对象(变量)初始化。
4. 调用主类的构造方法。
在一个构造方法中只能调用一次其它的构造方法,并且调用构造方法的语句必须是第一条语句。
class One
{
public One(String str)
{
System.out.println(str);
}
}
class Two
{
One one_1 = new One("one-1");
One one_2 = new One("one-2");
static One one_3 = new One("one-3");
public Two(String str)
{
System.out.println(str);
}
}
public class Test
{
static Two two_3 = new Two("two-3");
public static void main(String[] args)
{
System.out.println("Test main() start…");
Two two_1 = new Two("two-1");
System.out.println("————");
Two two_2 = new Two("two-2");
}
}
one-3
one-1
one-2
two-3
Test main() start…
one-1
one-2
two-1
————-
one-1
one-2
two-2
J2EE的三个关键性问题
一、J2EE提出的背景
1、 企业级应用框架的需求
在许多企业级应用中,例如数据库连接、邮件服务、事务处理等都是一些通用企业需求模块,这些模块如果每次再开发中都由开发人员来完成的话,将会造成开发周期长和代码可靠性差等问题。于是许多大公司开发了自己的通用模块服务。这些服务性的软件系列同陈为中间件。
2、 为了通用必须要提出规范,不然无法达到通用
在上面的需求基础之上,许多公司都开发了自己的中间件,但其与用户的沟通都各有不同,从而导致用户无法将各个公司不同的中间件组装在一块为自己服务。从而产生瓶颈。于是提出标准的概念。其实J2EE就是基于Java技术的一系列标准。
注:中间件的解释
中间件处在操作系统和更高一级应用程序之间。他充当的功能是:将应用程序运行环境与操作系统隔离,从而实现应用程序开发者不必为更多系统问题忧虑,而直接关注该应用程序在解决问题上的能力。我们后面说到的容器的概念就是中间件的一种。
二、相关名词解释
容器:充当中间件的角色
容器:它是一种概念,它为容器里面的各个类,提供一个管理机制,如生存周期管理,消息传递管理等等。
J2EE是由SUN 公司开发的一套企业级应用规范。现在最高版本是1.4。支持J2EE的应用服务器有IBM WebSphere Application Server,BEA WebLogic Server,JBOSS,Oracle Application Server,SUN ONE Application Server等。
WEB容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。
EJB容器:Enterprise Java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。
WEB容器和EJB容器在原理上是大体相同的,更多的区别是被隔离的外界环境。WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节,直接引用环境变量session,request,response就行、EJB不用关心数据库连接速度、各种事务控制,直接由容器来完成。
RMI/IIOP:远程方法调用/internet对象请求中介协议,他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是Java特有的。
JNDI:Java命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
JMS:Java消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
JavaMAIL:Java邮件服务。提供邮件的存储、传输功能。他是Java编程中实现邮件功能的核心。相当MS中的EXCHANGE开发包。
JTA:Java事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
JAF:Java安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
EAI:企业应用集成。是一种概念,从而牵涉到好多技术。J2EE技术是一种很好的集成实现。
三、J2EE的优越性
2、 开放的标准,许多大型公司已经实现了对该规范支持的应用服务器。如BEA ,IBM,ORACLE等。
3、 提供相当专业的通用软件服务。
4、 提供了一个优秀的企业级应用程序框架,对快速高质量开发打下基础
Struts简介
Struts最早是作为Apache Jakarta项目的组成部分问世运作。项目的创立者希望通过对该项目的研究,改进和提高Java Server Pages、Servlet、标签库以及面向对象的技术水准。
Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。它的目的是为了减少在运用MVC设计模型来开发Web应用的时间。你仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。
Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点,使开发者能更深入的了解其内部实现机制。
除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。
关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。
MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。MVC的工作原理如下图所示:

Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts的工作原理,如下图所示:

Eclipse平台将能支持动态语言和AJAX。
Eclipse基金会周四(3/8)宣布完成三项创新的软件项目并已开放下载,这三项项目计划包括Eclipse DLTK (Dynamic Language Toolkit)、Eclipse RAP (Rich AJAX Platform),以及Eclipse ATF (AJAX Toolkit Framework),可以让动态语言及AJAX的工程师们,能够在可视化的环境下完成网页的设计。
这些创新的项目计划,可使动态语言(Dynamic Language)和异步JavaScript与XML(AJAX)的开发者,在Eclipse所提供的平台下,以拖曳的方式完成原本复杂的程序撰写工作。新的项目提供了除错(debugging)、交互式平台(interactive console)、编码索引(code indexing)以及软件重构(refactoring)等组件供设计师选择,简化原本较复杂的撰写工作。
其中Eclipse ATF能够支持Mac OS X与目前所有的Linux与Windows版本;Eclipse DLTK则可让其它动态计算机程序语言如Python、Ruby和Tcl,使用其平台功能与各项组件。这些新功能在日前3月5日到8日的EclipseCon会议中宣布开放。
至于其主要的竞争对手NetBeans,目前仅能够支持到JAVA程序的撰写。此次三项项目的发表,可望成为Eclipse发展的新里程碑。多数大厂如Cisco、Nexaweb Technologies皆对此次项目报以掌声,预期在EclipseCon加州大会之后,Eclipse有可能成为Ajax IDEs开发的主要平台。

