现在的项目已经进入收尾阶段了,虽然很小的项目,才5个画面,但是也经过了近半年的开发(从项目一开始到现在的负荷测试),多多少少有一些小小的总结,因为是刚工作,第一次做项目,以前只是在培训的时候做过,如果有不正确的地方,希望各大高手多加指正。
系统说明:
开发平台: 日本语Windows XP
IDE: Eclipse 3.2
服务器: Redhat Linux + Tomcat 5.5 + Apache2.0
JDK: JDK1.4.3 (在JDK1.4.3的环境下需要下载安装Tomcat5.5的
Compatability Package,安装方法是解压缩复制到tomcat安装目录下)
Framework: Struts1.3.8
数据库: Oracle
关于文字乱码
由于做的是对日项目,必然会涉及到文字编码转换的问题,经过查找网页和自己的领悟,得出了以下总结。
<%@ page language="java" contentType="text/html;
1#charset=windows-31j" pageEncoding="UTF-8" %>
在这句话里面有2个编码:
第一个charset=windows-31j的作用是告诉JVM用windows-31j的编码格式输出数据给JSP页面,如果此项未定义,则服务器是 Tomcat的情况下,默认为ISO-8859-1;如果服务器是Apache+Tomcat则以 APACHE_ROOT/conf/httpd.conf中的charset为准,默认为ISO-8859-1。
第二个pageEncoding="UTF-8"的作用是告诉JVM用UTF-8解释这个JSP,未定义的情况下参照charset。
2#charset=Shift_JIS">
这句话里面的charset作用是告诉浏览器用Shift_JIS来显示页面,此项不能设置为Windows-31j,因为IE的编码中没有 Windows-31j这一项,IE如果发现请求编码为Shift_JIS则自动会调用Windows-31j来进行解析,但是如果是IE不能辨识的编码 类型,IE会根据自己的推理自动选择一个与
1#charset类型最接近的编码进行解析,很有可能出现乱码。
接下来是关于日本语版windows和日本语版Linux的JVM的文字编码问题。
Windows平台的JVM默认文字编码是MS932,但是Linux是UTF-8。所以被Windows JVM以java IO写出去的文件,如果在Linux JVM上同样用Java IO读取,就会出现乱码,原因就在这里。所以如果开发平台和服务器平台不一样的话,建议写文件和读文件的时候都指定一个统一的文字编码,这个文字编码可以 写在ApplicationResource.properties里面,这样能保证两边的读写操作文字编码一致。
java 代码
- ..............
- String enc = "MS932";
- FileInputStream fis = null;
- BufferedReader br = null;
- try {
- fis = new FileInputStream(FILE_PATH);
- br = new BufferedReader(new InputStreamReader(fis, enc);
- } catch (Exception e) {
- .........
- } finally {
- .........
- }
关于线程
这次的开发需要做个功能,在每次调用数据库fasade的时候,要控制超时,就是说如果数据库那边在20秒之后还没有返回,那么就要让自己的程序返回数据库超时的Message。
对于这个功能,我想了一下,只想到了用线程来实现,做法如下:
先为那个需要控制的fasade方法造一个类继承Thread,然后在run()里面执行方法,之后把这个线程join()到Action中。
java 代码
-
- ...........
- SearchThread thread = new SearchThread(xxxxxx, xxxxxxx);
- thread.start();
- try {
- thread.join(MAX_WAIT_TIME);
- if (thread.isSuccess()) {
- result_lst = thread.getResults();
- } else {
- throw new DataBaseTimeoutException();
- }
- } catch (Exception e) {
- thread.interrupt();
- ........
- }
java 代码
-
- class SearchThread extends Thread {
- private List result = new ArrayList();
- private boolean success_flag = false;
- ...........
-
- public SearchThread(xxxx,xxxxx) {
- .......
- }
-
- public void run() {
- this.result = FasadeXXX.getSearchResult(xxxx,xxxx,xxxx);
- this.success_flag = true;
- }
- public List getResults() {
- return this.result;
- }
-
- public boolean isSuccess() {
- return this.success_flag;
- }
- }
MAX_WAIT_TIME就是最大等待时间20秒,如果join()到达最长等待时间,但 是SearchThread里面的success_flag还没有被设置成true的时候,就是说明已经超时,检索没有完成,这个时候会抛出自定义的 DataBaseTimeoutException,中断线程。
不知道这样的做法是否安全,是否会造成线程的混乱,希望高手能指教。不过负荷测试做到现在貌似没有在线程方面发现什么问题,嘿嘿。
接下来是开发中遇到的一些小问题
有一次在进行了BUG修正后,出现了JSP页面提交的日本语乱码,而且是在第一个文字Filter的时候就已经乱码了,返回页面的自然也成了乱码,查了好久,终于在完全编译之后恢复正常了,至今不解是什么原因,难不成是Eclipse的BUG?
还有一个现象就是如果页面上的某一个图像的src=""那么就会发生再次向Server提交请求的现象,之后把这个图像的src改成某个存在的路径下的不存在的图像名字,就不会发生两次提交的现象了,这个难道是IE的机制?不解中……
还有一点需要注意的是Struts的Action是单例的,所以写在Action里的属性一定要考虑到线程安全的问题,特别是那些控制分页的变量,我就出 现这种错误,被老大发现了之后,把所有的Action里的属性变量全部改成方法里面的局部变量了。 ^^^>_<^^^
大致上就这么多了,这是在JavaEye上的第一篇文章,希望大家多加指点,谢谢……
分享到:
- 2007-08-15 17:13
- 浏览 1813
- 评论(2)
- 论坛回复 / 浏览 (0 / 2941)
- 查看更多
相关推荐
本文是对第一次HOLD一个项目的总结与反思,作为一名新人,第一次做活动是很茫然也很容易踩坑。作者总结了许多经验和思考,希望和小伙伴们看了有所收获。 背景和目的 作为产品实习生,本次是第一次完整且半独立地...
* ionViewDidEnter:进入了一个页面且变成了当前的激活页面,该事件不管是第一次进入还是缓存后进入都将执行。 * ionViewWillLeave:将要离开了该页面之后变成了不是当前激活页面的时候执行的事件。 * ...
总结来说,通过Nginx的虚拟主机和location配置,我们可以轻松地在一个域名下部署和管理多个项目,无论是静态内容还是动态应用,都能高效、灵活地处理。结合负载均衡和反向代理功能,Nginx成为企业级网站和应用程序...
总结来说,【北大青鸟 第一单元项目】是一个精心设计的综合性IT教育项目。从计算机科学基础到数据结构和算法,再到编程语言的学习和软件工程原理的掌握,最终通过实际项目开发经验的积累,学员能够全面而系统地学习...
项目管理——项目总结报告模板是记录项目执行过程、成果、经验与教训的重要文档,它为...通过这个全面的项目总结报告,项目团队和管理层能够全面了解项目的执行情况,识别成功与不足,为未来的项目决策提供重要参考。
信息系统工程监理的终验报告是对整个工程项目在完成之后的总结性文档,通常包括以下几个重要部分: 1. 工程项目概况:对整个项目的基本信息进行描述,包括项目名称、委托方、承建方、监理方、项目开始和结束时间等...
第1章 中小型民营IT企业项目管理手记 1.1 项目管理是什么 1.2 背景介绍 1.2.1 个人背景 1.2.2 公司背景 1.2.3 项目背景 1.3 软件工程 1.3.1 系统概述 1.3.2 系统规划 1.3.3 系统需求 1.3.4 系统设计 1.3.5 系统开发 ...
尽管提供的信息只包含了第1-2周的课程安排,但可以预见后续内容将更加深入。随着课程的推进,学员们将接触到更高级的经济分析技术,例如敏感性分析、风险评估以及多方案比较等,这些分析技术有助于评估项目的不同...
在实验阶段,我们遇到了很多问题和困难,例如第一次做香蕉馒头时,我们没有意识到要除去水果中的水分,导致实验数据不精确。之后,我们改变了策略,首先将水果换算成水的重量,然后将水的理论重量减去水果的重量,以...
在这个小项目中,我们将重点讨论如何利用SSH来实现分页功能,这是一个常见的需求,特别是在处理大量数据时,以提高用户体验和系统性能。 首先,让我们逐一解析涉及到的配置文件: 1. **web.xml**:这是Servlet容器...
本资源总结了信息系统项目管理的重要概念和知识点,涵盖信息系统开发的各个阶段、信息系统项目管理的基本概念、软件工程方法学、信息系统项目管理的五个阶段、国家信息化体系六要素、IT 治理的管理层次等。...
在当今社会,技术项目作为推动社会进步和发展的重要力量,其成功实施离不开一个成熟且科学的基本建设程序。基本建设程序确保了从项目策划到完成的每一个步骤都井然有序,从而最大程度地减少不必要的风险和资源浪费。...
项目机会的识别是项目管理的第一步。项目机会可能来源于客户的需求、市场的发展趋势、技术的进步、法律法规的要求等多种途径。这一阶段的主要任务是收集信息并编写《项目机会描述》或《项目立项申请》,为后续的决策...
“第二单元项目”标签强调了这是整个课程中的一个关键环节,通常在学生掌握了基础Java语法和面向对象编程概念之后进行。这样的项目可能涉及更复杂的主题,如MVC(Model-View-Controller)架构、Spring框架、...
Matplotlib 是一个基于 Python 语言的开源项目,旨在为 Python 提供一个数据绘图包。它提供了一整套和 Matlab 类似的命令 API,适合交互式地进行制图。Matplotlib 的文档相当完备,并且 Gallery 页中有上百幅缩略图...
启动过程组是项目管理的第一阶段,其核心要素包括可行性分析、立项、初步范围说明以及确定项目的目标和范围。在这一阶段,项目经理应当确保项目的启动是经过充分考虑的,而不仅仅是形式上的。项目经理必须在项目正式...
第一版是用 jQuery+template 实现的,这个技术栈太灵活了,优点是什么需求都好做,缺点是怎么做都行,不利于理清思路,往往伴随着边做边改。组件被统一放在一个 widgets/ 文件夹里,管理组件、展示组件、组件交接和...
张飞硬件设计42部第一步知识总结全主要围绕一个实际的硬件项目——门控开关设计进行了详细的介绍与总结。从项目的初始阶段到最终产品定型,整个过程涉及多个关键步骤,下面将对这些步骤进行逐一解析。 #### 二、...