在windows操作系統上使用IE作為瀏覽器時。常常會發生這樣的問題:在瀏覽使用UTF-8編碼的網頁時,瀏覽器無法自動偵測(即沒有設定“自動選擇”編碼格式時)該頁面所用的編碼。即使網頁已經聲明過編碼格式:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
由此造成某些含有中文UTF-8編碼的頁面產生空白輸出。
如果使用的是Mozilla、Mozilla 瀏覽器、Sarafi的瀏覽器這不會造成這個問題。這是由于IE解析網頁編碼時以HTML內的標簽優先,而后才是HTTP header內的訊息;而mozilla系列的瀏覽器則剛剛相反。
由于UTF-8為3個字節表示一個漢字,而普通的GB2312或BIG5是兩個。頁面輸出時,由于上述原因,使瀏覽器解析、輸出<title></title>的內容時,如果在</title>前有奇數個全角字符時,IE把UTF-8當作兩個字節解析時出現半個漢字的情況,這時該半個漢字會和</title>的<結合成一個亂碼字,導致IE無法讀完<title>部分,使整個頁面為空百輸出。而這個時候如果察看源文件的話,會發現實際上整個葉面全部已經輸出了。
因此最簡單的解決辦法是在網頁文件的<head></head>標簽中一定要把字符定義
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
放在<title></title>之前。
posted @
2008-06-18 09:30 CoderDream 閱讀(416) |
評論 (0) |
編輯 收藏
1、
如何使用Log4j?
2、
http://supportweb.cs.bham.ac.uk/documentation/tutorials/docsystem/build/tutorials/log4j/log4j.html
3、
Log4j
http://my.so-net.net.tw/idealist/Java/Log4j.html
posted @
2008-06-13 17:56 CoderDream 閱讀(405) |
評論 (0) |
編輯 收藏
摘要: 14.1 什么是JavaScript
14.1.1 JavaScript概念
JavaScript是一種基于對象和事件驅動并具有安全性能的腳本語言。
14.1.2 JavaScript特點
是一種腳本編寫語言;
基于對象的語言;
簡單性;
安全性;
動態性;
跨平臺性
14.2 編寫第一個JavaScript腳本
文件范例:1401.html
<!-- --...
閱讀全文
posted @
2008-06-04 09:29 CoderDream 閱讀(424) |
評論 (0) |
編輯 收藏
我們在開發的過程中,調試的時候經常要進入某些包,如果沒有將這些包與對應的源文件文件夾或zip包對應,就會提示“Source not found”,但是現在很多jar文件都會有相應的源文件,如Struts、Spring等等。而且JavaEE的很多源文件可以通過Tomcat的源文件找到,我們把它打成zip包,注意要和jar文件夾對應,然后設置一下,以后新建Web Project的時候,就可以很方便的查看servlet文件夾下面的源代碼了。
這是javaee.jar的設置畫面,其他Struts等等設置類似。
posted @
2008-05-29 14:57 CoderDream 閱讀(3160) |
評論 (0) |
編輯 收藏
出現這個問題后使用“清理”功能,如果還不行,就直接到上一級目錄,再執行“清理”,然后再“更新”。
有時候如果看到某個包里面的文件夾沒有SVN的標志,直接用“Ctrl+Delete”手工刪除,然后“清理”,最后“更新”或“提交”。
網絡摘抄1:
錯誤信息
Malformed file
svn: E:\svn\repository\conf\svnserve.conf:12: Option expected
原因:
配置文件12行開頭有空格
錯誤信息
Attempted to lock an already-locked dir
svn: Working copy 'E:\integration\com.svn.practise' locked
原因:
需要用svn cleanup上次關閉時的鎖定
網絡摘抄2:
在eclipse里提交和更新文件是抱錯。
Attempted to lock an already-locked dir
svn: Working copy 'F:\workspace\WebFrame\WebRoot\attach\prodrelation' locked
執行“清除”操作后,問題解決了。
很多操作,例如中斷提交,都會進入這種工作拷貝的鎖定狀態。
網絡摘抄3:
因為這兩天頻出這個現象,現在基本不怕這個問題了
我是這樣解決的:
1 三令五申項目的組員必須先同步,合并,再提交
2 操作后經常地在父目錄使用clean up命令
3 解決了locked問題后,還出現不能更新的現象時,就刪除目錄下的所有文件,包括.svn,再重新check out服務器同目錄一次
4 總之,操作要規范,要強調組員每天開工時,先在ECLIPSE里同步,下班時,要提交(提交前,先在文件夾的右菜單中,選擇小組>清除),保證每個人的機子里在開工前都是最新版本
老實講,因為版本沖突,提交沖突,更新失敗等等問題,耽誤了好些時間,但我知道主要還是自身操作不熟練不規范的問題。我相信,只要堅持,大家包括我的組員一定都會喜歡上這個小海龜的
posted @
2008-05-27 09:51 CoderDream 閱讀(108661) |
評論 (14) |
編輯 收藏
效果:
文件清單:
序號 |
文件名 |
1 |
ChangeLocaleAction.java |
2 |
ChangeLocaleForm.java |
3 |
struts-config.xml |
4 |
index.jsp |
5 |
application_en_US.properties |
6 |
application_zh_CN.properties |
7 |
application_zh_TW.properties |
清單1:
package com.coderdream.struts.action;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.Globals;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.coderdream.struts.form.ChangeLocaleForm;
public class ChangeLocaleAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
ChangeLocaleForm clForm = (ChangeLocaleForm)form;
String language = clForm.getLanguage();
if (language != null) {
Locale locale;
if (language.equalsIgnoreCase("en")) {
locale = Locale.US;
request.getSession().setAttribute(
Globals.LOCALE_KEY, locale);
} else if (language.equalsIgnoreCase("tw")) {
locale = Locale.TAIWAN;
request.getSession().setAttribute(
Globals.LOCALE_KEY, locale);
} else {
locale = Locale.CHINA;
request.getSession().setAttribute(
Globals.LOCALE_KEY, locale);
}
}
return mapping.findForward("success");
}
}
清單2:
package com.coderdream.struts.form;
import org.apache.struts.action.ActionForm;
/**
*
* description:
*
* @author
*
*/
public class ChangeLocaleForm extends ActionForm{
public ChangeLocaleForm() {
super();
}
private String language;
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
}
清單3:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />
<form-beans>
<form-bean name="ChangeLocaleForm"
type="com.coderdream.struts.form.ChangeLocaleForm" />
</form-beans>
<action-mappings>
<action name="ChangeLocaleForm" path="/ChangeLocale"
scope="request"
type="com.coderdream.struts.action.ChangeLocaleAction"
validate="false">
<forward name="success" path="/index.jsp" />
</action>
</action-mappings>
<message-resources key="application"
parameter="com.coderdream.struts.resources.application" />
</struts-config>
清單4:
<%@ page contentType="text/html; charset=UTF-8"%>
<%@page import="org.apache.struts.Globals"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<html:html>
<head>
<title>多語言測試</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<script language="javascript">
function onLanguage(){
var language = document.getElementsByName("language")[0].value;
if(language!=null&&language!=""){
document.forms[0].submit();
}
}
</script>
<body>
<html:form action="ChangeLocale.do">
<html:select property="language" styleId="height:18"
onchange="onLanguage();">
<option value="" title="">
--
<bean:message bundle="application" key="global.select.language" />
--
</option>
<option value="en" title="English">
English
</option>
<option value="cn" title="簡體中文">
簡體中文
</option>
<option value="tw" title="繁體中文">
繁體中文
</option>
</html:select>
</html:form>
<br>
<br>
<br>
<bean:message bundle="application" key="global.select.test" />
<%=request.getSession().getAttribute(Globals.LOCALE_KEY)%>
</body>
</html:html>
清單5:
#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
global.select.language = Language
global.select.test = Test
清單6:
#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
#BizException
global.select.language = \u8BED\u8A00
global.select.test = \u6D4B\u8BD5
清單7:
#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
global.select.language = \u8A9E\u8A00
global.select.test = \u6E2C\u8A66
此功能的關鍵是在Action里面將頁面傳過來的language信息得到,然后根據信息設置Locale,然后將新的Locale放到Session中。
源代碼:
點擊下載
posted @
2008-05-14 18:20 CoderDream 閱讀(1019) |
評論 (0) |
編輯 收藏
需求:用實線把各個面板圈起來,然后把面板的名字寫在圈圈的左上角。
原始畫面:
由于原來的程序使用的是AWT中的Panel,而這個控件我們沒有設置titleBorder的方法。
現在將更新為Swing中的JPanel面板,代碼分別為:
舊代碼:
Panel pRoboCtrl=new Panel();
pRoboCtrl.setLayout(new GridLayout(5, 1, 2, 5));
// Robot控制面板的第一排,面板的標題
Panel pR1=new Panel();
pR1.setLayout(new GridLayout(1, 1, 2, 3));
//Row One
pR1.add(new Label("Robot Control",Label.CENTER));
新代碼:
JPanel pRoboCtrl=new JPanel();
pRoboCtrl.setLayout(new GridLayout(4, 1, 2, 5));
Border titleBorder1=BorderFactory.createTitledBorder("Robot Control");
pRoboCtrl.setBorder(titleBorder1);
原來的處理方式是將一個Label放到Panel中,然后將這個Panel放到外層的Panel中,新方式是將外層Panel定義成JPanel,然后設置Border的值為BorderFactory產生的一個實例。
解決這個問題后,新問題又來了,兩個JPanel中的內容不一樣,上面多,下面少,但是現在面板卻是一樣大,要改成面板高度自動適應。
其實這只需要修改一行代碼就可以了,代碼如下:
舊代碼:
CP.setLayout(new GridLayout(3, 1, 2, 5));
新代碼:
CP.setLayout(new BoxLayout(CP, BoxLayout.Y_AXIS)); // 沿垂直方向布置組件
舊代碼的處理方式是網格布局,新代碼的方式是用BoxLayout布局管理器,它會按要求垂直或水平分布。

以下代碼創建了一個JPanel容器,它采用垂直 BoxLayout,在這個容器中包含兩個Button,這兩個Button沿垂直方向分布,并且保持像素為 5 的固定垂直間隔。
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));// 沿垂直方向布置組件
panel.add(new JButton("Button1"));
panel.add(Box.createVerticalStrut(5));
panel.add(new JButton("Button2"));
源代碼:
下載
posted @
2008-04-29 16:16 CoderDream 閱讀(15619) |
評論 (2) |
編輯 收藏
1、下載
http://www.opensymphony.com/quartz/download.action
https://quartz.dev.java.net/files/documents/1267/43545/quartz-1.6.0.zip
2、
詳細講解Quartz如何從入門到精通
3、
用 Quartz 進行作業調度
posted @
2008-04-15 17:46 CoderDream 閱讀(738) |
評論 (0) |
編輯 收藏
數據庫和表
create table USERS
(
USERNAME VARCHAR2(20) not null,
PASSWORD VARCHAR2(20)
)
alter table USERS
add constraint U_PK primary key (USERNAME)
/**
* JdbcExample.java
*
* Provider: CoderDream's Studio
*
* History
* Date(DD/MM/YYYY) Author Description
* ----------------------------------------------------------------------------
* Apr 14, 2008 CoderDream Created
*/
package com.coderdream.jdbc.oracle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* @author XL
*
*/
public class JdbcExample {
private static Connection getConn() {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@10.5.15.117:1521:csi";
String username = "scott";
String password = "tiger";
Connection conn = null;
try {
Class.forName(driver);
// new oracle.jdbc.driver.OracleDriver();
conn = DriverManager.getConnection(url, username, password);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
private static int insert(String username, String password) {
Connection conn = getConn();
int i = 0;
String sql = "insert into users (username,password) values(?,?)";
PreparedStatement pstmt;
try {
pstmt = conn.prepareStatement(sql);
// Statement stat = conn.createStatement();
pstmt.setString(1, username);
pstmt.setString(2, password);
i = pstmt.executeUpdate();
System.out.println("resutl: " + i);
pstmt.close();
conn.close();
}
catch (SQLException e) {
e.printStackTrace();
}
return i;
}
private static void query() {
Connection conn = getConn();
String sql = "select * from users";
PreparedStatement pstmt;
try {
pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println("name: " + rs.getString("username")
+ " \tpassword: " + rs.getString("password"));
}
rs.close();
pstmt.close();
conn.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
private static int update(String oldName, String newPass) {
Connection conn = getConn();
int i = 0;
String sql = "update users set password='" + newPass
+ "' where username='" + oldName + "'";
PreparedStatement pstmt;
try {
pstmt = conn.prepareStatement(sql);
i = pstmt.executeUpdate();
System.out.println("resutl: " + i);
pstmt.close();
conn.close();
}
catch (SQLException e) {
e.printStackTrace();
}
return i;
}
private static int delete(String username) {
Connection conn = getConn();
int i = 0;
String sql = "delete users where username='" + username + "'";
PreparedStatement pstmt;
try {
pstmt = conn.prepareStatement(sql);
i = pstmt.executeUpdate();
System.out.println("resutl: " + i);
pstmt.close();
conn.close();
}
catch (SQLException e) {
e.printStackTrace();
}
return i;
}
/**
* @param args
*/
public static void main(String[] args) {
insert("CDE", "123");
insert("CoderDream", "456");
query();
update("CoderDream", "456");
query();
delete("CoderDream");
query();
}
}
posted @
2008-04-14 17:55 CoderDream 閱讀(7051) |
評論 (0) |
編輯 收藏
1、首先下載eclipse的Tomcat插件,文件名為:tomcatPluginV321.zip
下載:
地址
2、安裝Tomcat插件,即將zip檔解壓,放入eclipse目錄下的 plugins 文件夾中。
3、在項目上點右鍵,設置properties,在'Tomcat'下面設置'export to war settings'輸入要導出的war文件路徑和文件名,確定,返回項目。
4、在項目上點右鍵,選擇tomcat project->Export to the war file sets in project properties
5、 進入C盤,可以看到csi.war文件正在生成,成功后會有提示框。這樣就可以通過Tomcat插件導出WAR檔了。
posted @
2008-04-08 13:43 CoderDream 閱讀(3737) |
評論 (1) |
編輯 收藏