
2006年9月5日
1.下載所需軟件
1.1SVN服務端(svn-1.4.3-setup.exe)
http://subversion.tigris.org/project_packages.html
1.2把SVN設置成window服務(SVNService.exe)
我沒有下載地址,如有需要,留下你的email
1.3Eclipse的SVN插件(用Eclipse插件下載):
2.配置服務端
2.1安裝svn-1.4.3-setup.exe
2.2開始->運行->cmd->進入SVN服務端的安裝目錄下面的bin目錄
2.3cmd下運行svnadmin create SVN庫的位置(如:D:\SVN_PRJ)
2.4復制SVNService.exe到SVN服務端安裝目錄下的bin目錄
2.5cmd下運行SVNService -install -d -r D:\SVN_PRJ(SVN庫的位置)
2.6如果想撤消掉后臺服務,則運行SVNService -remove
2.7進入D:\SVN_PRJ\conf目錄下編輯svnserve.conf,內容如下(切記下面幾行字前不能有空格):
[general]
anon-access = read #匿名訪問權限,取值為read,write,none
auth-access = write #認證用戶的權限
password-db = passwd #認證用戶數據庫,即允許連到SVN的用戶(當前目錄下的passwd文件中存放的用戶及密碼)
realm = TESTING #在用戶認證界面上出現的提示語句
2.8編輯D:\SVN_PRJ\conf\passwd文件,內容如下
[users]
test = password #這時你連接SVN的時候可以使用用戶名為test密碼為password來連接SVN
2.9開始->設置->控制面板->管理工具->服務->啟動SVNService服務
3.Eclipse下配置SVN插件
3.1幫助->軟件更新->查找并安裝->搜索要安裝的新功能部件->新建遠程站點->輸入一個任意的名稱->URL輸入
http://subclipse.tigris.org/update_1.2.x->確定->選中你剛才添加的遠程站點->完成->選中Subclipse->執行安裝操作
3.2窗口->打開透視圖->SVN資源庫研究->右鍵->新建->資源庫位置->URL中輸入svn://127.0.0.1/->輸入2.7定義的用戶名test和密碼
password
4.提交工程
4.1右擊工程->小組->共享項目->選擇SVN->選擇svn://127.0.0.1(如果沒有,則創建一個新的資源庫)->下一步->完成
5.下載工程
5.1在SVN資源庫透視圖下,點開svn://127.0.0.1,會顯示出現在本機SVN上的所有工程,右擊你想下載的工程->檢出為->下一步->完成
6.基本操作
6.1同步
在MyEclipse J2EE透視圖下,右擊你要同步的工程->小組->與資源庫同步->這時會進入同步透視圖,會顯示出本機與SVN上內容有不同的文件,雙擊文件名,會顯示出兩個文件中哪里不同;
6.2提交
在同步透視圖下有"灰色向右的箭頭,表示你本機修改過",右擊該文件,可以選擇提交操作;
6.3覆蓋/更新
在同步透視圖下有"藍色向左的箭頭,表示你本機修改過",右擊該文件,可以選擇覆蓋/更新操作;
7.圖標說明
7.1灰色向右箭頭:本地修改過
7.2藍色向左箭頭:SVN上修改過
7.3灰色向右且中間有個加號的箭頭:本地比SVN上多出的文件
7.4藍色向左且中間有個加號的箭頭:SVN上比本地多出的文件
7.5灰色向右且中間有個減號的箭頭:本地刪除了,而SVN上未刪除的文件
7.6藍色向左且中間有個減號的箭頭:SVN上刪除了,而本地未刪除的文件
7.7紅色雙向箭頭:SVN上修改過,本地也修改過的文件
8.一些我遇到的出錯信息
8.1在上面講的3.2步輸入URL(svn://127.0.0.1)點下一步出現"svnserve.conf:
12: Option expected"錯誤
你打開svnserve.conf文件中的第
12行,該錯誤是由于該行的前面有空格引起的,把左邊多出的空格刪除掉即可;
8.2在上面講的3.2步輸入URL(svn://127.0.0.1/SVN_PRJ)點下一步出現"svn://127.0.0.1/SVN_PRJ non-existent in revision '7'"錯誤
URL錯了,應該輸入svn://127.0.0.1即可
9.SVN服務端自帶的基于命令行的操作語句
9.1設置SVN服務端安裝目錄下的/bin到環境變量中;
9.2在命令行下運行svn import c:/test svn://127.0.0.1/test -m "initial import" --username test --password passwd可進行上傳操作
9.3進入你要檢出的目錄,在命令行下運行svn checkout svn://127.0.0.1/test --username test -password passwd 可進行檢出工程的操作
9.4在命令行下運行svn commit test.txt -m "modified" --username test -password passwd 可進行提交操作
9.5在命令行下運行svn update -r HEAD test.txt --username test -password passwd 可進行更新操作
注:上面講的127.0.0.1可以換成外網IP,或者局域網IP皆可(即,在家里創建一個SVN服務端,即可在公司去訪問家里的SVN)
posted @
2008-01-05 23:40 摩西 閱讀(38591) |
評論 (6) |
編輯 收藏
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TempClass {
/**
* @param args
* @throws UnsupportedEncodingException
* @throws ClassNotFoundException
* @throws SQLException
*/
public static void main(String[] args) throws UnsupportedEncodingException {
String url = "jdbc:microsoft:sqlserver://localhost:1433;databaseName=tran";
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection conn = DriverManager.getConnection(url, "sa", "sa");
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("select vcword from cn_other");
// mysql
String url_mysql = "jdbc:mysql://127.0.0.1:3306/zwspace";
Class.forName("org.gjt.mm.mysql.Driver");
Connection conn_mysql = DriverManager.getConnection(url_mysql,
"root", "root");
PreparedStatement st_mysql = conn_mysql
.prepareStatement("insert into chds_cihui(name) values(?)");
if (rs.next()) {
String rsname = rs.getString("vcword");
// String name = new String(rsname.getBytes("GB2312"),
// "GB2312");
// String name = new String(rsname.getBytes("UTF-8"), "GB2312");
// String name = new String(rsname.getBytes("utf8"), "GB2312");
// String name = new String(rsname.getBytes("iso-8859-1"),
// "GB2312");
// String name = new String(rsname.getBytes("GBK"), "GB2312");
// String name = new String(rsname.getBytes("GBK"), "GBK");
// String name = new String(rsname.getBytes("GB2312"), "GBK");
// String name = new String(rsname.getBytes("UTF-8"), "GBK");
// String name = new String(rsname.getBytes("iso-8859-1"),
// "GBK");
// String name = new String(rsname.getBytes("GBK"), "UTF-8");
// String name = new String(rsname.getBytes("GB2312"), "UTF-8");
// String name = new String(rsname.getBytes("UTF-8"), "UTF-8");
// String name = new String(rsname.getBytes("iso-8859-1"),
// "UTF-8");
// String name = new String(rsname.getBytes("GBK"),
// "iso-8859-1");
// String name = new String(rsname.getBytes("GB2312"),
// "iso-8859-1");
// String name = new String(rsname.getBytes("UTF-8"),
// "iso-8859-1");
// String name = new String(rsname.getBytes("iso-8859-1"),
// "iso-8859-1");
// String name = new String(rsname.getBytes(), "GBK");
// String name = new String(rsname.getBytes(), "GB2312");
// String name = new String(rsname.getBytes(), "UTF-8");
// String name = new String(rsname.getBytes(), "iso-8859-1");
String name = rsname;
System.out.println(rsname);
st_mysql.setString(1, name);
st_mysql.executeUpdate();
}
rs.close();
st.close();
conn.close();
st_mysql.close();
conn_mysql.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
試過以上的所有編碼都無法解決數據在MYSQL中的亂碼問題,看來是jdbc連mysql時的編碼不對,于是
將 String url_mysql="jdbc:mysql://127.0.0.1:3306/zwspace";后加上編碼
String url_mysql="jdbc:mysql://127.0.0.1:3306/zwspace?useUnicode=true&characterEncoding=utf8";終于OK了
posted @
2007-11-20 15:21 摩西 閱讀(862) |
評論 (0) |
編輯 收藏
在使用hibernate項目中,持久化類的ID用Long與long有很大區別!!
用long 作為id,當一個新的臨時類要持久化時會報一個這種錯:
Exception executing
batch: org.hibernate.StaleStateException:
Batch update returned unexpected row count from update: 0 actual
row count:
0 expected: 1
因為這個臨時類,已經有一個id=0 (long的默認值);這時hibernate 為錯認為這是一條持久化類,從而進行更新操作,故報錯!!
這時把持久類的id 類型改成Long 就OK了,再create 時,臨時類的id為null ,hibernate 才會正確的判斷這是臨時類而進行save操作!!
posted @
2007-09-28 11:42 摩西 閱讀(2444) |
評論 (1) |
編輯 收藏
user.getUserinfo().setSex(new String(pu.getSex().getBytes("ISO8859_1"),"GB2312"));
user.setNickname(new String(pu.getName().getBytes("ISO8859_1"),"GB2312"));
userService.createUser(user); String(byte[] bytes, int offset, int length, String charsetName) 通過使用指定的字符集解碼指定的 byte 子數組,構造一個新的
String
。
byte[] |
getBytes(String charsetName) 使用指定的字符集將此 String 編碼為 byte 序列,并將結果存儲到一個新的 byte 數組中 |
#800080
#7B7D62
#56B6E9
#4B8D32
posted @
2007-08-29 13:45 摩西 閱讀(420) |
評論 (0) |
編輯 收藏
<script language="JavaScript">
function doZoom(size){
document.getElementById("zwsky_content").style.fontSize=size+'px'
}
function ReImgSize(){
for (j=0;j<document.images.length;j++)
{
if (document.images[j].src.indexOf("
www.***.com/back") >0)
document.images[j].src=document.images[j].src.replace("
www.***.com/back","back.****.com/back");
}
}
</script>
............................
<body bottommargin="0" leftmargin="0" rightmargin="0" topmargin="0" onload="
ReImgSize()">
posted @
2007-08-23 17:47 摩西 閱讀(350) |
評論 (0) |
編輯 收藏
<input type="button" name="Submit3" value="搜 索" onClick="location.href='SearchResult.jsp?cluster_node_id=&key_word=' + document.CMS4JSearchForm.KEY_WORD.value + '&db_id=' + document.CMS4JSearchForm.DB_ID.value;">
posted @
2007-08-21 10:51 摩西 閱讀(1889) |
評論 (0) |
編輯 收藏
這個錯誤我一共遇到過兩次,一直沒有找到很好的解決方案,這個錯誤產生原因相信大家都知道,因為在hibernate中同一個session里面有了兩個相同標識但是是不同實體.
一開始按網上說的用
session.merge(Object)報了一個錯,可能是沒有用好,改用 session.clear(); session.update(user);這樣就OK了,
方法為:
package org.springframework.orm.hibernate3.support;
...
public void modifyByMerge(User user) {
Session session = getHibernateTemplate().getSessionFactory().
getCurrentSession();
session.clear();
session.update(user);
}
...
項目用的是spring + hibernate所以得用getHibernateTemplate().getSessionFactory().getCurrentSession();得當前Session
posted @
2007-08-20 11:29 摩西 閱讀(29505) |
評論 (9) |
編輯 收藏
上一次在做交友模板時,出來了這種問題,后來才發現是hibernate的一個映射文件配錯了,今天在做DC攝影時,
映射文件加了一個lazy="false" fetch="join" 結果,也出現了數據重復取。
<many-to-one name="user" column="user_id" class="com.zwspace.domain.User" lazy="false" fetch="join" />
這樣也會有錯嗎!想不通,只能把它給刪了。
posted @
2007-08-14 16:53 摩西 閱讀(699) |
評論 (0) |
編輯 收藏
js驗證表單大全
1. 長度限制
<script>
function test()
{
if(document.a.b.value.length>50)
{
alert("不能超過50個字符!");
document.a.b.focus();
return false;
}
}
</script>
<form name=a onsubmit="return test()">
<textarea name="b" cols="40" wrap="VIRTUAL" rows="6"></textarea>
<input type="submit" name="Submit" value="check">
</form>
2. 只能是漢字
<input onkeyup="value="/oblog/value.replace(/[^\u4E00-\u9FA5]/g,'')">
3." 只能是英文
<script language=javascript>
function onlyEng()
{
if(!(event.keyCode>=65&&event.keyCode<=90))
event.returnvalue=false;
}
</script>
<input onkeydown="onlyEng();">
4. 只能是數字
<script language=javascript>
function onlyNum()
{
if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)))
//考慮小鍵盤上的數字鍵
event.returnvalue=false;
}
</script>
<input onkeydown="onlyNum();">
5. 只能是英文字符和數字
<input onkeyup="value="/oblog/value.replace(/[\W]/g,"'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))">
6. 驗證油箱格式
<SCRIPT LANGUAGE=javascript RUNAT=Server>
function isEmail(strEmail) {
if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
return true;
else
alert("oh");
}
</SCRIPT>
<input type=text onblur=isEmail(this.value)>
7. 屏蔽關鍵字(這里屏蔽***和****)
<script language="javascript1.2">
function test() {
if((a.b.value.indexOf ("***") == 0)||(a.b.value.indexOf ("****") == 0)){
alert(":)");
a.b.focus();
return false;}
}
</script>
<form name=a onsubmit="return test()">
<input type=text name=b>
<input type="submit" name="Submit" value="check">
</form>
8. 兩次輸入密碼是否相同
<FORM METHOD=POST ACTION="">
<input type="password" id="input1">
<input type="password" id="input2">
<input type="button" value="test" onclick="check()">
</FORM>
<script>
function check()
{
with(document.all){
if(input1.value!=input2.value)
{
alert("false")
input1.value = "";
input2.value = "";
}
else document.forms[0].submit();
}
}
</script>
夠了吧 :)
屏蔽右鍵 很酷
oncontextmenu="return false" ondragstart="return false" onselectstart="return false"
加在body中
二
2.1 表單項不能為空
<script language="javascript">
<!--
function CheckForm()
{
if (document.form.name.value.length == 0) {
alert("請輸入您姓名!");
document.form.name.focus();
return false;
}
return true;
}
-->
</script>
2.2 比較兩個表單項的值是否相同
<script language="javascript">
<!--
function CheckForm()
if (document.form.PWD.value != document.form.PWD_Again.value) {
alert("您兩次輸入的密碼不一樣!請重新輸入.");
document.ADDUser.PWD.focus();
return false;
}
return true;
}
-->
</script>
2.3 表單項只能為數字和"_",用于電話/銀行帳號驗證上,可擴展到域名注冊等
<script language="javascript">
<!--
function isNumber(String)
{
var Letters = "1234567890-"; //可以自己增加可輸入值
var i;
var c;
if(String.charAt( 0 )=='-')
return false;
if( String.charAt( String.length - 1 ) == '-' )
return false;
for( i = 0; i < String.length; i ++ )
{
c = String.charAt( i );
if (Letters.indexOf( c ) < 0)
return false;
}
return true;
}
function CheckForm()
{
if(! isNumber(document.form.TEL.value)) {
alert("您的電話號碼不合法!");
document.form.TEL.focus();
return false;
}
return true;
}
-->
</script>
2.4 表單項輸入數值/長度限定
<script language="javascript">
<!--
function CheckForm()
{
if (document.form.count.value > 100 || document.form.count.value < 1)
{
alert("輸入數值不能小于零大于100!");
document.form.count.focus();
return false;
}
if (document.form.MESSAGE.value.length<10)
{
alert("輸入文字小于10!");
document.form.MESSAGE.focus();
return false;
}
return true;
}
//-->
</script>
2.5 中文/英文/數字/郵件地址合法性判斷
<SCRIPT LANGUAGE="javascript">
<!--
function isEnglish(name) //英文值檢測
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charCodeAt(i) > 128)
return false;
}
return true;
}
function isChinese(name) //中文值檢測
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charCodeAt(i) > 128)
return true;
}
return false;
}
function isMail(name) // E-mail值檢測
{
if(! isEnglish(name))
return false;
i = name.indexOf(" at ");
j = name dot lastIndexOf(" at ");
if(i == -1)
return false;
if(i != j)
return false;
if(i == name dot length)
return false;
return true;
}
function isNumber(name) //數值檢測
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charAt(i) < "0" || name.charAt(i) > "9")
return false;
}
return true;
}
function CheckForm()
{
if(! isMail(form.Email.value)) {
alert("您的電子郵件不合法!");
form.Email.focus();
return false;
}
if(! isEnglish(form.name.value)) {
alert("英文名不合法!");
form.name.focus();
return false;
}
if(! isChinese(form.cnname.value)) {
alert("中文名不合法!");
form.cnname.focus();
return false;
}
if(! isNumber(form.PublicZipCode.value)) {
alert("郵政編碼不合法!");
form.PublicZipCode.focus();
return false;
}
return true;
}
//-->
</SCRIPT>
2.6 限定表單項不能輸入的字符
<script language="javascript">
<!--
function contain(str,charset)// 字符串包含測試函數
{
var i;
for(i=0;i<charset.length;i++)
if(str.indexOf(charset.charAt(i))>=0)
return true;
return false;
}
function CheckForm()
{
if ((contain(document.form.NAME.value, "%\(\)><")) || (contain(document.form.MESSAGE.value, "%\(\)><")))
{
alert("輸入了非法字符");
document.form.NAME.focus();
return false;
}
return true;
}
//-->
</script>
1. 檢查一段字符串是否全由數字組成
---------------------------------------
<script language="Javascript"><!--
function checkNum(str){return str.match(/\D/)==null}
alert(checkNum("1232142141"))
alert(checkNum("123214214a1"))
// --></script>
2. 怎么判斷是否是字符
---------------------------------------
if (/[^\x00-\xff]/g.test(s)) alert("含有漢字");
else alert("全是字符");
3. 怎么判斷是否含有漢字
---------------------------------------
if (escape(str).indexOf("%u")!=-1) alert("含有漢字");
else alert("全是字符");
4. 郵箱格式驗證
---------------------------------------
//函數名:chkemail
//功能介紹:檢查是否為Email Address
//參數說明:要檢查的字符串
//返回值:0:不是 1:是
function chkemail(a)
{ var i=a.length;
var temp = a.indexOf('@');
var tempd = a.indexOf('.');
if (temp > 1) {
if ((i-temp) > 3){
if ((i-tempd)>0){
return 1;
}
}
}
return 0;
}
5. 數字格式驗證
---------------------------------------
//函數名:fucCheckNUM
//功能介紹:檢查是否為數字
//參數說明:要檢查的數字
//返回值:1為是數字,0為不是數字
function fucCheckNUM(NUM)
{
var i,j,strTemp;
strTemp="0123456789";
if ( NUM.length== 0)
return 0
for (i=0;i<NUM.length;i++)
{
j=strTemp.indexOf(NUM.charAt(i));
if (j==-1)
{
//說明有字符不是數字
return 0;
}
}
//說明是數字
return 1;
}
6. 電話號碼格式驗證
---------------------------------------
//函數名:fucCheckTEL
//功能介紹:檢查是否為電話號碼
//參數說明:要檢查的字符串
//返回值:1為是合法,0為不合法
function fucCheckTEL(TEL)
{
var i,j,strTemp;
strTemp="0123456789-()# ";
for (i=0;i<TEL.length;i++)
{
j=strTemp.indexOf(TEL.charAt(i));
if (j==-1)
{
//說明有字符不合法
return 0;
}
}
//說明合法
return 1;
}
7. 判斷輸入是否為中文的函數
---------------------------------------
function ischinese(s){
var ret=true;
for(var i=0;i<s.length;i++)
ret=ret && (s.charCodeAt(i)>=10000);
return ret;
}
8. 綜合的判斷用戶輸入的合法性的函數
---------------------------------------
<script language="javascript">
//限制輸入字符的位數開始
//m是用戶輸入,n是要限制的位數
function issmall(m,n)
{
if ((m<n) && (m>0))
{
return(false);
}
else
{return(true);}
}
9. 判斷密碼是否輸入一致
---------------------------------------
function issame(str1,str2)
{
if (str1==str2)
{return(true);}
else
{return(false);}
}
10. 判斷用戶名是否為數字字母下滑線
---------------------------------------
function notchinese(str){
var reg=/[^A-Za-z0-9_]/g
if (reg.test(str)){
return (false);
}else{
return(true); }
}
11. form文本域的通用校驗函數
---------------------------------------
作用:檢測所有必須非空的input文本,比如姓名,賬號,郵件地址等等。
該校驗現在只針對文本域,如果要針對form里面的其他域對象,可以改變判斷條件。
使用方法:在要檢測的文本域中加入title文字。文字是在提示信息,你要提示給用戶的該字段的中文名。比如要檢測用戶名
html如下<input name="txt_1" title="姓名">,當然,最好用可視化工具比如dreamweaver什么的來編輯域。
如果要檢測數字類型數據的話,再把域的id統一為sz.
javascript判斷日期類型比較麻煩,所以就沒有做日期類型校驗的程序了.高手可以補充。
程序比較草,只是提供一個思路。拋磚引玉! :)
哦,對了,函數調用方法:< form onsubmit="return dovalidate()">
function dovalidate()
{
fm=document.forms[0] //只檢測一個form,如果是多個可以改變判斷條件
for(i=0;i<fm.length;i++)
{
//檢測判斷條件,根據類型不同可以修改
if(fm[i].tagName.toUpperCase()=="INPUT" &&fm[i].type.toUpperCase()=="TEXT" && (fm[i].title!=""))
if(fm[i].value="/blog/="")//
{
str_warn1=fm[i].title+"不能為空!";
alert(str_warn1);
fm[i].focus();
return false;
}
if(fm[i].id.toUpperCase()=="SZ")//數字校驗
{
if(isNaN(fm[i].value))
{ str_warn2=fm[i].title+"格式不對";
alert(str_warn2);
fm[i].focus();
return false;
}
}
}
return true;
}
2 >表單提交驗證類
2.1 表單項不能為空
<script language="javascript">
<!--
function CheckForm()
{
if (document.form.name.value.length == 0) {
alert("請輸入您姓名!");
document.form.name.focus();
return false;
}
return true;
}
-->
</script>
2.2 比較兩個表單項的值是否相同
<script language="javascript">
<!--
function CheckForm()
if (document.form.PWD.value != document.form.PWD_Again.value) {
alert("您兩次輸入的密碼不一樣!請重新輸入.");
document.ADDUser.PWD.focus();
return false;
}
return true;
}
-->
</script>
2.3 表單項只能為數字和"_",用于電話/銀行帳號驗證上,可擴展到域名注冊等
<script language="javascript">
<!--
function isNumber(String)
{
var Letters = "1234567890-"; //可以自己增加可輸入值
var i;
var c;
if(String.charAt( 0 )=='-')
return false;
if( String.charAt( String.length - 1 ) == '-' )
return false;
for( i = 0; i < String.length; i ++ )
{
c = String.charAt( i );
if (Letters.indexOf( c ) < 0)
return false;
}
return true;
}
function CheckForm()
{
if(! isNumber(document.form.TEL.value)) {
alert("您的電話號碼不合法!");
document.form.TEL.focus();
return false;
}
return true;
}
-->
</script>
2.4 表單項輸入數值/長度限定
<script language="javascript">
<!--
function CheckForm()
{
if (document.form.count.value > 100 || document.form.count.value < 1)
{
alert("輸入數值不能小于零大于100!");
document.form.count.focus();
return false;
}
if (document.form.MESSAGE.value.length<10)
{
alert("輸入文字小于10!");
document.form.MESSAGE.focus();
return false;
}
return true;
}
//-->
</script>
2.5 中文/英文/數字/郵件地址合法性判斷
<SCRIPT LANGUAGE="javascript">
<!--
function isEnglish(name) //英文值檢測
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charCodeAt(i) > 128)
return false;
}
return true;
}
function isChinese(name) //中文值檢測
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charCodeAt(i) > 128)
return true;
}
return false;
}
function isMail(name) // E-mail值檢測
{
if(! isEnglish(name))
return false;
i = name.indexOf(" at ");
j = name dot lastIndexOf(" at ");
if(i == -1)
return false;
if(i != j)
return false;
if(i == name dot length)
return false;
return true;
}
function isNumber(name) //數值檢測
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charAt(i) < "0" || name.charAt(i) > "9")
return false;
}
return true;
}
function CheckForm()
{
if(! isMail(form.Email.value)) {
alert("您的電子郵件不合法!");
form.Email.focus();
return false;
}
if(! isEnglish(form.name.value)) {
alert("英文名不合法!");
form.name.focus();
return false;
}
if(! isChinese(form.cnname.value)) {
alert("中文名不合法!");
form.cnname.focus();
return false;
}
if(! isNumber(form.PublicZipCode.value)) {
alert("郵政編碼不合法!");
form.PublicZipCode.focus();
return false;
}
return true;
}
//-->
</SCRIPT>
2.6 限定表單項不能輸入的字符
<script language="javascript">
<!--
function contain(str,charset)// 字符串包含測試函數
{
var i;
for(i=0;i<charset.length;i++)
if(str.indexOf(charset.charAt(i))>=0)
return true;
return false;
}
function CheckForm()
{
if ((contain(document.form.NAME.value, "%\(\)><")) || (contain(document.form.MESSAGE.value, "%\(\)><")))
{
alert("輸入了非法字符");
document.form.NAME.focus();
return false;
}
return true;
}
//-->
</script>
posted @
2007-06-07 10:47 摩西 閱讀(369) |
評論 (0) |
編輯 收藏
Java/J2EE中文問題終極解決之道
Java中文問題一直困擾著很多初學者,如果了解了Java系統的中文問題原理,我們就可以對中文問題能夠采取根本的解決之道。
最古老的解決方案是使用String的字節碼轉換,這種方案問題是不方便,我們需要破壞對象封裝性,進行字節碼轉換。
還有一種方式是對J2EE容器進行編碼設置,如果J2EE應用系統脫離該容器,則會發生亂碼,而且指定容器配置不符合J2EE應用和容器分離的原則。
在Java內部運算中,涉及到的所有字符串都會被轉化為UTF-8編碼來進行運算。那么,在被Java轉化之前,字符串是什么樣的字符集? Java總是根據操作系統的默認編碼字符集來決定字符串的初始編碼,而且Java系統的輸入和輸出的都是采取操作系統的默認編碼。
因此,如果能統一Java系統的輸入、輸出和操作系統3者的編碼字符集合,將能夠使Java系統正確處理和顯示漢字。這是處理Java系統漢字的一個原則,但是在實際項目中,能夠正確抓住和控制住Java系統的輸入和輸出部分是比較難的。J2EE中,由于涉及到外部瀏覽器和數據庫等,所以中文問題亂碼顯得非常突出。
J2EE應用程序是運行在J2EE容器中。在這個系統中,輸入途徑有很多種:一種是通過頁面表單打包成請求(request)發往服務器的;第二種是通過數據庫讀入;還有第3種輸入比較復雜,JSP在第一次運行時總是被編譯成Servlet,JSP中常常包含中文字符,那么編譯使用javac時,Java將根據默認的操作系統編碼作為初始編碼。除非特別指定,如在Jbuilder/eclipse中可以指定默認的字符集。
輸出途徑也有幾種:第一種是JSP頁面的輸出。由于JSP頁面已經被編譯成Servlet,那么在輸出時,也將根據操作系統的默認編碼來選擇輸出編碼,除非指定輸出編碼方式;還有輸出途徑是數據庫,將字符串輸出到數據庫。
由此看來,一個J2EE系統的輸入輸出是非常復雜,而且是動態變化的,而Java是跨平臺運行的,在實際編譯和運行中,都可能涉及到不同的操作系統,如果任由Java自由根據操作系統來決定輸入輸出的編碼字符集,這將不可控制地出現亂碼。
正是由于Java的跨平臺特性,使得字符集問題必須由具體系統來統一解決,所以在一個Java應用系統中,解決中文亂碼的根本辦法是明確指定整個應用系統統一字符集。
指定統一字符集時,到底是指定ISO8859_1 、GBK還是UTF-8呢?
(1)如統一指定為ISO8859_1,因為目前大多數軟件都是西方人編制的,他們默認的字符集就是ISO8859_1,包括操作系統Linux和數據庫MySQL等。這樣,如果指定Jive統一編碼為ISO8859_1,那么就有下面3個環節必須把握:
開發和編譯代碼時指定字符集為ISO8859_1。
運行操作系統的默認編碼必須是ISO8859_1,如Linux。
在JSP頭部聲明:<%@ page contentType="text/html;charset=ISO8859_1" %>。
(2)如果統一指定為GBK中文字符集,上述3個環節同樣需要做到,不同的是只能運行在默認編碼為GBK的操作系統,如中文Windows。
統一編碼為ISO8859_1和GBK雖然帶來編制代碼的方便,但是各自只能在相應的操作系統上運行。但是也破壞了Java跨平臺運行的優越性,只在一定范圍內行得通。例如,為了使得GBK編碼在linux上運行,設置Linux編碼為GBK。
那么有沒有一種除了應用系統以外不需要進行任何附加設置的中文編碼根本解決方案呢?
將Java/J2EE系統的統一編碼定義為UTF-8。UTF-8編碼是一種兼容所有語言的編碼方式,惟一比較麻煩的就是要找到應用系統的所有出入口,然后使用UTF-8去“結扎”它。
一個J2EE應用系統需要做下列幾步工作:
- 開發和編譯代碼時指定字符集為UTF-8。JBuilder和Eclipse都可以在項目屬性中設置。
- 使用過濾器,如果所有請求都經過一個Servlet控制分配器,那么使用Servlet的filter執行語句,將所有來自瀏覽器的請求(request)轉換為UTF-8,因為瀏覽器發過來的請求包根據瀏覽器所在的操作系統編碼,可能是各種形式編碼。關鍵一句:
request.setCharacterEncoding("UTF-8")。 網上有此filter的源碼,Jdon框架源碼中com.jdon.util.SetCharacterEncodingFilter 需要配置web.xml 激活該Filter。
- 在JSP頭部聲明:<%@ page contentType="text/html;charset= UTF-8" %>。
- 在Jsp的html代碼中,聲明UTF-8:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- 設定數據庫連接方式是UTF-8。例如連接MYSQL時配置URL如下:
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8 注意,上述寫法是JBoss的mysql-ds.xml寫法,多虧網友提示,在tomcat中&要寫成&即可。一般其他數據庫都可以通過管理設置設定UTF-8
- 其他和外界交互時能夠設定編碼時就設定UTF-8,例如讀取文件,操作XML等。
筆者以前在Jsp/Servlet時就采取這個原則,后來使用Struts、Tapestry、EJB、Hibernate、Jdon等框架時,從未被亂碼困擾過,可以說適合各種架構。希望本方案供更多初學者分享,減少Java/J2EE的第一個攔路虎,也避免因為采取一些臨時解決方案,導致中文問題一直出現在新的技術架構中。
|
posted @
2007-04-27 15:24 摩西 閱讀(389) |
評論 (0) |
編輯 收藏
<entry key="webaddsuccess" value="redirect:/web.do?method=friendSitelist"/>
posted @
2007-04-27 09:30 摩西 閱讀(901) |
評論 (2) |
編輯 收藏
jsp頁面代碼:
<% boolean isClubManager=false;
Long regionid2 = ((Region)request.getSession().getAttribute("RegionSession")).getId();
isClubManager=newsPostService.isClubManager(regionid2);
Region region=(Region)request.getSession().getAttribute("RegionSession");
String memo=region.getParent().getMemo();
request.setAttribute("memo",memo);
%>
.........
<gd:label maxLength="150" text="${memo}"/>
posted @
2007-04-24 14:02 摩西 閱讀(1865) |
評論 (0) |
編輯 收藏
ClientService.java
package com.soft.client;
import org.apache.axis.client.Service;
import javax.xml.rpc.ServiceException;
import java.net.MalformedURLException;
import org.apache.axis.client.Call;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import javax.xml.namespace.QName;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
import java.rmi.RemoteException;
public class ClientService {
public ClientService() {
}
public UserDTO getUserDTO() {
String endpoint = "http://localhost:8080/WebModule/services/Myservice";
QName qset = new QName("urn:Myservice", "UserDTO");
QName qmethod = new QName("urn:Myservice", "getUserDTO");
Class clsUserDTO = UserDTO.class;
UserDTO dto = new UserDTO();
Service service = new Service();
try {
Call call = (Call) service.createCall();
call.registerTypeMapping(clsUserDTO, qset,
new BeanSerializerFactory(clsUserDTO, qset),
new BeanDeserializerFactory(clsUserDTO,qset));
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName(qmethod);
call.setReturnClass(clsUserDTO);
dto = (UserDTO) call.invoke(new Object[] {});
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return dto;
}
public static void main(String[] args) {
ClientService cs = new ClientService();
UserDTO user = cs.getUserDTO();
System.out.println(user.getPassword());
System.out.println(user.getUsername());
}
}
UserDTO.java
package com.soft.client;
public class UserDTO {
private String username;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
posted @
2007-04-16 16:58 摩西 閱讀(283) |
評論 (0) |
編輯 收藏
報錯信息:
org.apache.jasper.JasperException: <h3>Validation error messages from TagLibraryValidator for c</h3><p>null: com.caucho.xml.XmlParseException: stream:276: expected character in cdata at `?' (\ufffd)</p><h3>Validation error messages from TagLibraryValidator for sql</h3><p>null: com.caucho.xml.XmlParseException: stream:276: expected character in cdata at `?' (\ufffd)</p><h3>Validation error messages from TagLibraryValidator for x</h3><p>null: com.caucho.xml.XmlParseException: stream:276: expected character in cdata at `?' (\ufffd)</p><h3>Validation error messages from TagLibraryValidator for fmt</h3><p>null: com.caucho.xml.XmlParseException: stream:276: expected character in cdata at `?' (\ufffd)</p>
posted @
2007-04-16 16:07 摩西 閱讀(1507) |
評論 (1) |
編輯 收藏
<script language="javascript">document.write(week[${status.index}])</script>
posted @
2007-04-16 14:42 摩西 閱讀(1176) |
評論 (2) |
編輯 收藏
.jsp加入代碼:
<c:set scope="session" value="${page.result}" var="page"></c:set>
<c:set value="${page1.result}" var="page1" scope="session"></c:set>
<c:set value="${page2.result}" var="page2" scope="session"></c:set>
報錯:
avax.servlet.jsp.el.ELException: The "." operator was supplied with an index value of type "java.lang.String" to be applied to a List or array, but that value cannot be converted to an integer.
可見這種<c:set>的用法是錯誤的!!!!!!
posted @
2007-04-16 13:49 摩西 閱讀(1328) |
評論 (0) |
編輯 收藏
import java.util.Map.Entry;
private static Map oldvote=new HashMap();
...............................
ModelAndView mav = new ModelAndView();
String voteid = ServletRequestUtils.getRequiredStringParameter(request,
"voteid");
String ip = ServletRequestUtils.getStringParameter(request, "ip");
//遍歷HasMap
Boolean isoldvote=false;
Iterator it=oldvote.entrySet().iterator();
while(it.hasNext()){
Entry entry=(Entry) it.next();
Object key=entry.getKey();
Object value=entry.getValue();
if(key.equals(voteid)&&value.equals(ip)){
isoldvote=true;
break;
}
}
if (isoldvote) {
...............................
posted @
2007-04-14 09:41 摩西 閱讀(368) |
評論 (0) |
編輯 收藏
<a href="javascript:history.go(-1);">[返回]</javascript>
posted @
2007-04-14 09:39 摩西 閱讀(1755) |
評論 (1) |
編輯 收藏
1.
<html>
?<head>
??<title>transPara.htm</title>
?</head>
<body>
?<form method="POST" action="acceptPara.jsp">
? ??<p align="center">
??姓 名:<input type="text" name="name" size="20"><br>
? ??年 齡: <input type="text" name="age" size="15"><br>
? ??性 別:
???<input type="radio" value="male" checked name="sex">
????男 ?
? ???<input type="radio" name="sex" value="female">女</p>
? ??<p align="center">
???<input type="submit" value="submit" name="submit">
? ???<input type="reset" value="reset" name="reset"></p>
?</form>
</body>
</html>
2.
<html>
<%@ page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="atest"? class="test.AcceptPara"/>
<head><title>acceptPara.jsp</title></head>
<body>
<jsp:setProperty name="atest" property="*"/>?? //? ***將javabean中的屬性自動與html提交過來的變量匹配***********
Value of property "name" :
<jsp:getProperty name="atest" property="name"/><br>
Value of property "age" :
<jsp:getProperty name="atest" property="age"/><br>
Value of property "sex" :
<jsp:getProperty name="atest" property="sex"/><br>
Value of property "submit" :
<jsp:getProperty name="atest" property="submit"/><br>
</body>
</html>
3.
package test;//?? 在一些tomcat舊版本包定義一定要有,且在jsp引用中如下:<jsp:useBean id="atest"? class="test.AcceptPara"/>? 編譯后放在\WEB-INF\classes\test\中
public class AcceptPara{
?String name;
?int age;
?String sex;
?String submit;
?
?public void setName(String value){
??name=value;
?}
?
?public String getName(){
??return name;
?}
?
?public void setAge(int value){
??age=value;
?}
?
?public int getAge(){
??return age;
?}
?
?public void setSex(String value){
??sex=value;
?}
?
?public String getSex(){
??return sex;
?}
?
?public void setSubmit(String value){
??submit=value;
?}
?
?public String getSubmit(){
??return submit;
?}
??
?public void acceptPara(){}
?
}
posted @
2006-09-08 12:41 摩西 閱讀(765) |
評論 (2) |
編輯 收藏
1.Forward_demo.htm:
<html>
<head><title>Forward_demo1.htm</title></head>
<body>
<form? action="demo1.jsp" method="POST">用戶:<input type="text" name="username" size="20"><br>
密碼:<input type="password" name="password" size="20"><br>
<input type="radio" name="select" value="manage" checked>管理<br>
<input type="radio" name="select" value="statictic">資料<br>
<input type="submit" name="login" value="submit">
<input type="reset" name="reset" value="重寫">
</form>
</body>
</html>
2.demo1.jsp:<html>
<head><title>demo1.jsp</title></head>
<body>
<%
String username,password,choice;
username=request.getParameter("username");
password=request.getParameter("password");
choice=request.getParameter("select");
if (choice.equals("manage")){
%>
??<jsp:forward page="demo1.1.jsp">
??<jsp:param name="username" value="<%=username%>"/>
??<jsp:param name="password" value="<%=password%>"/>
??</jsp:forward>
<%?}else{
???//user select statistic
%>
?
?<jsp:forward page="demo1.2.jsp">
??<jsp:param name="username" value="<%=username%>"/>
??<jsp:param name="password" value="<%=password%>"/>
??</jsp:forward>
<%
??}
%>
</body>
</html>
3.demo1.1.jsp:<html>
?<head>
??<title>demo1.1.jsp</title>
?</head>
<body>
??This is the Management Page!<br>
<%
?
?String user,pwd;?
??user=request.getParameter("username");
??pwd=request.getParameter("password");
%>
??username is: <%=user%><br>
??password is: <%=pwd%><br>
</body>
</html>
4.demo1.2.jsp:<html>
?<head>
??<title>demo1.2.jsp</title>
?</head>
<body>
??This is the Statistic Page!<br>
<%
??String user,pwd;?
??user=request.getParameter("username");
??pwd=request.getParameter("password");%>
??username is: <%=user%><br>
??password is: <%=pwd%><br>
</body>
</html>
posted @
2006-09-07 14:21 摩西 閱讀(4861) |
評論 (2) |
編輯 收藏
過程:
1.停掉MSSQLSERVER,將MSSQL安裝目錄下的E:\Program Files\Microsoft SQL
Server\MSSQL\Data\pubs.mdf和E:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf文
件移走。
2.重新啟動MSSQLSERVER,在SQL Server Enterprise Manager中可看到PUBS的圖標是灰色的加了個'(置疑
)',刪除PUBS。至此是為了模擬Pubs數據庫只留下了pubs.mdf,(pubs_log.ldf不再用到)。
3.將pubs.mdf移到MSSQL安裝目錄下E:\Program Files\Microsoft SQL Server\MSSQL\Data\
4.在SQL查詢分析器中執行 exec sp_attach_db 'pubs' ,'E:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
會有錯誤提示:
設備激活錯誤。物理文件名 'e:\Program Files\Microsoft SQL Server\MSSQL\data\pubs_log.ldf' 可
能有誤。
已創建名為 'E:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.LDF' 的新日志文件。
不過沒關系,因為新日志文件已創建了,呵呵。
用此方法只要有.mdf文件,就能回復數據庫。
posted @
2006-09-06 11:58 摩西 閱讀(3802) |
評論 (1) |
編輯 收藏
??????? 試題是模仿GRE考試,在這實例中,編了一套"中文GRE測試"總共有十道題,讀者可自行增加.
??????? 注:實例中的試題,可選答案,正確答案封裝在文件exam.java 中.用index.jsp文件來實現對問題的調用.核對,顯示結果.所以要先編譯exam.java成exam.class ,之后index.jsp才能調用.
少說費話--直入主題:
1.在Tomcat目錄下的webapps目錄下新建book文件夾,
1.5 在Tomcat目錄下的conf/Catalina/localhost目錄下新建一個book.xml (這一步很重要!!)
?寫入:
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="E:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/book" path="/book" reloadable="true">
</Context>
2.在book文件夾下新建WEB-INF文件夾.
2.5 在WEB-INF目錄下新建web.xml 寫入:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
?xmlns="http://java.sun.com/xml/ns/j2ee"
?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
?xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
?http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>
3.在WEB-INF文件夾下新建classes文件夾.
4.把index.jsp? exam.java 放到book目錄下.
5.用javac? exam.java? 編譯exam.java成exam.jsp? (可在命令行中運行此步)
6.exam.jsp 放到WEB-INF/classes/exam目錄下.
7.啟動tomcat.
8.輸入地址: http://localhost:8080/book???? 回車 OK !!!!

附index.jsp代碼:
<html>
<head>
<META http-equiv=Content-Type content="text/html; charset=GB2312">
<title>網上測試</title>
</head>
<body>
<%@ page language="java" contentType="text/html;charset=GB2312" buffer="none"%>
<jsp:useBean id="exam" scope="session" class="exam.exam"/>
<FONT SIZE="+2"><B>
<%=exam.getExamName()%>
</B></FONT>
<br><br>
<%
int current=exam.getCurrent();
String reset=null;
reset=request.getParameter("Reset");
if(reset==null){
?reset="";
}
if(reset.equals("1"))
{
?exam.reset();
}
int iqn=0;
String questionNum=null;
questionNum=request.getParameter("QuestionNum");
if(questionNum==null)
{
?iqn=0;
}
else
{
?Integer tmpInt=new Integer(questionNum);
?iqn=tmpInt.intValue();
}
if(iqn!=0)
{
?current++;
?exam.setCurrent(current);
}
?String answer=null;
?answer=request.getParameter("Answer");
?
if(answer==null)
{
?answer="";
}
if(exam.getCurrent()>exam.getCount())
{
?if(exam.getCorrect()>=6)
?{
%>
??恭喜!你以<%=exam.getCorrect()*10 %>分的成績通過了測試!<BR>
<%
?}
?else
?{
%>
??對不起,你需要60分以上的成績才能通過測試!<BR>
??你可以按<A HREF="exam.jsp?Reset=1">這里</A>重新進行測試。<BR>
<%
?}
}
else
{
?if(iqn==0)
?{
??if(answer. equals(exam.getCorrectAnswer(exam.getCurrent()-1)))
??{
???exam.setCorrect(exam.getCorrect()+1);
??}
?}
?else
?{
??if(answer.equals(exam.getCorrectAnswer(exam.getCurrent()-2)))
??{
???exam.setCorrect(exam.getCorrect()+1);
??}
?}
%>
?<FORM action="exam.jsp" method="post">
?<input type="hidden" name="QuestionNum" value="<%=current%>">
<P>
?總共<%=exam.getCount()%>個問題,現在是第<%=exam.getCurrent()%>個問題
</P>
<br>
<b>
?<%=current%>
</b>
<%
out.println(exam.getExamQuestion(current-1));
%>
<br>
<input type="radio" name="Answer" value="A">
<%
out.println(exam.getExamAnswer(current-1,0));
%>
<br>
<input type="radio" name="Answer" value="B">
<%
out.println(exam.getExamAnswer(current-1,1));
%>
<br>
<input type="radio" name="Answer" value="C">
<%
out.println(exam.getExamAnswer(current-1,2));
%>
<br>
<input type="radio" name="Answer" value="D">
<%
out.println(exam.getExamAnswer(current-1,3));
%>
<br>
<input type="submit" value="確定">
</form>
<%
}
%>
</body>
</html>
exam.java代碼:
package exam;
public class exam
{
?int count;
?int current;
?int correct;
?String examName;
//?String answer;
?String[] examQuestion=
?{//存放所有的問題
??"1.科學常識:下列有關科學家的敘述,何者正確?",
??"2.牛頓三大運動定律的第一定律是:",
??"3.兩個報名參加海軍的年輕人被問道:\"你們會游泳嗎?\"他倆愣住了。過了一會兒,其中一個人回答說:\"怎么回事,難道船不夠用嗎?\"這篇文章的主題是什么",
??"4.接上題。考官為什么要問這兩個人游泳的事?",
??"5.男:看那個妹妹,好靚哦!女:看你個大頭鬼!問:這個女的是什么意思?",
??"6.男:今天天氣不錯。女:可不是咋得!問:這個女的什么意思?",
??"7.男:我把撿來的錢包交給警察了。男:我KAO!",
??"8.女:您好,您撥叫的用戶沒有開機,要留言請留言,不留言請掛機。問:這是發生在什么時候?",
??"9.ABCD四教授申請中科院院士,如果以下事實為真,誰最有資格入選",
??"10.以下是摘自電影《大話西游》中唐僧的一句臺詞,選項中可能正確的是人和妖精都是媽生的,不同的人是人他媽的,妖是妖他媽的,妖要有了仁慈之心,就不是妖了,而是人妖"
?};
?String[][] examAnswer=
?{//問題可選的答案
??{"(A)天文學家常常到天體營去研究天文的奧秘","(B)地質學家常常到地牢去研究地層結構","(C)大氣科學家常常坐熱氣球到天空研究臺風","(D)以上都不對"},
??{"(A)靜如處子 動于脫兔","(B)靜中有動 動中有靜","(C)運動絕對 靜止相對","(D)靜者恒靜 動者恒動"},
??{"(A)參軍","(B)打魚","(C)游泳","(D)造船"},
??{"(A)他想讓他們教他游泳","(B)他想知道這兩個人會不會被淹死","(C)他擔心船不夠用","(D)他想舉行游泳比賽"},
??{"(A) 這個男的頭有病","(B)這個男的頭比較大","(C)這個男的看見的是鬼","(D)這個女的有點吃醋"},
??{"(A)今天天氣不好","(B)今天天氣很好","(C)這女的沒聽清","(D)這女的不知道"},
??{"(A)他很驚訝","(B)他丟了錢包","(C)他想揍第一個人","(D)他累了想找個地方靠靠"},
??{"(A)打電話","(B) 開飛機","(C) 發EMAIL","(D)坐飛機"},
??{"(A)是中國改革開放以后第一個公費留德的四十歲以下的女性的在微電子領域的花了少于三年畢業的毅然回國的博士","(B)是在使用黑白膠卷照出彩照這一國際前沿領域做出突破貢獻的科學家","(C)畢業于我國著名的海南熱帶作物學院,學慣東西,差一點就復制出了恐龍。而且率先提出,中國人才沒有斷層,只是待遇和職稱斷層","(D)經常陪李嵐清打敲三家和拱豬,對高校合并做出突出貢獻"},
??{"(A)人妖是指:媽媽還健在就去做了和尚的妖精","(B)人和妖精沒有本質區別,因為他們都是同一位女士生的","(C)唐僧為了超度一只妖精,不惜和妖精一起罵人","(D)唐僧暗示自己的母親原來就是一只妖精變的"}
?};
?
?String[] correctAnswer=
?{//正確的答案
??"D","C","A","B","D","B","A","A","B","C"
?};
?String message;
?
?public exam()
?{//重設測試
??reset();
?}
?public void reset()
?{//重設測試
??count=10;
??current=1;
??correct=0;
??examName="中文GRE考試樣題";
?}
?public void setCount(int c)
?{
??count=c;
?}
?public int getCount()
?{
??return count;
?}
?public void setCurrent(int c)
?{
??current=c;
?}
?public int getCurrent()
?{
??return current;
?}
?public void setCorrect(int c)
?{
??correct=c;
?}
?public int getCorrect()
?{
??return correct;
?}
?public void setExamName(String name)
?{
??examName=name;
?}
?public String getExamName()
?{
??return examName;
?}
?public void setCorrectAnswer(String[] answer)
?{
??correctAnswer=answer;
?}
?public void setCorrectAnswer(int i,String answer)
?{
??correctAnswer[i]=answer;
?}
?public String getCorrectAnswer(int i)
?{
??return correctAnswer[i];
?}
?public String[] getCorrectAnswer()
?{
??return correctAnswer;
?}
?public void setExamQuestion(String[] question)
?{
??examQuestion=question;
?}
?public void setExamQuestion(int i,String question)
?{
??examQuestion[i]=question;
?}
?public String[] getExamQuestion()
?{
??return examQuestion;
?}
?public String getExamQuestion(int i)
?{
??return examQuestion[i];
?}
?public void setExamAnswer(String[][] answer)
?{
??examAnswer=answer;
?}
?public void setExamAnswer(int i,String[] answer)
?{
??examAnswer[i]=answer;
?}
?public void setExamAnswer(int i ,int j,String answer)
?{
??examAnswer[i][j]=answer;
?}
?
?public String[][] getExamAnswer()
?{
??return examAnswer;
?}
?public String[] getExamAnswer(int i)
?{
??return examAnswer[i];
?}
?public String getExamAnswer(int i,int j)
?{
??return examAnswer[i][j];
?}
}
posted @
2006-09-06 10:57 摩西 閱讀(295) |
評論 (0) |
編輯 收藏
經常看到jsp的初學者問tomcat下如何配置jsp、servlet和bean的問題,于是總結了一下如何tomcat下配置jsp、servlet和ben,希望對那些初學者有所幫助。
一、開發環境配置
第一步:下載j2sdk和tomcat:到sun官方站(http://java.sun.com/j2se/1.5.0/download.jsp)下載j2sdk,注意下載版本為Windows Offline Installation的SDK,同時最好下載J2SE 1.5.0 Documentation,然后到tomcat官方站點(http://jakarta.apache.org/site/downloads/downloads_tomcat-5.cgi)下載tomcat(下載最新5.5.9版本的tomcat);
第二步:安裝和配置你的j2sdk和tomcat:執行j2sdk和tomcat的安裝程序,然后按默認設置進行安裝即可。
1.安裝j2sdk以后,需要配置一下環境變量,在我的電腦->屬性->高級->環境變量->系統變量中添加以下環境變量(假定你的j2sdk安裝在c:\j2sdk1.5.0):
JAVA_HOME=c:\j2sdk1.5.0
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(.;一定不能少,因為它代表當前路徑)
path=%JAVA_HOME%\bin
接著可以寫一個簡單的java程序來測試J2SDK是否已安裝成功:
public class Test{
public static void main(String args[]){
System.out.println("This is a test program.");
}
}
將上面的這段程序保存為文件名為Test.java的文件。
然后打開命令提示符窗口,cd到你的Test.java所在目錄,然后鍵入下面的命令
javac Test.java
java Test
此時如果看到打印出來This is a test program.的話說明安裝成功了,如果沒有打印出這句話,你需要仔細檢查一下你的配置情況。
2.安裝Tomcat后,在我的電腦->屬性->高級->環境變量->系統變量中添加以下環境變量(假定你的tomcat安裝在c:\tomcat):
CATALINA_HOME=c:\tomcat
CATALINA_BASE=c:\tomcat
然后修改環境變量中的classpath,把tomat安裝目錄下的common\lib下的(可以根據實際追加)servlet.jar追加到classpath中去,修改后的classpath如下:
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar;
接著可以啟動tomcat,在IE中訪問http://localhost:8080,如果看到tomcat的歡迎頁面的話說明安裝成功了。
第三步:建立自己的jsp app目錄
1.到Tomcat的安裝目錄的webapps目錄,可以看到ROOT,examples, tomcat-docs之類Tomcat自帶的的目錄;
2.在webapps目錄下新建一個目錄,起名叫myapp;
3.myapp下新建一個目錄WEB-INF,注意,目錄名稱是區分大小寫的;
4.WEB-INF下新建一個文件web.xml,內容如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
http://java.sun.com/dtd/web-app_2_3.dtd
">
<web-app>
<display-name>My Web Application</display-name>
<description>
A application for test.
</description>
</web-app>
5.在myapp下新建一個測試的jsp頁面,文件名為index.jsp,文件內容如下:
<html><body><center>
Now time is: <%=new java.util.Date()%>
</center></body></html>
6.重啟Tomcat
7.打開瀏覽器,輸入http://localhost:8080/myapp/index.jsp 看到當前時間的話說明就成功了。
第四步:建立自己的Servlet:
1.用你最熟悉的編輯器(建議使用有語法檢查的java ide)新建一個servlet程序,文件名為Test.java,文件內容如下:
package test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Test extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out=response.getWriter();
out.println("<html><body><h1>This is a servlet test.</h1></body></html>");
out.flush();
}
}
2 .編譯
將Test.java放在c:\test下,使用如下命令編譯:
C:\Test>javac Test.java
然后在c:\Test下會產生一個編譯后的servlet文件:Test.class
3 .將結構test\Test.class剪切到%CATALINA_HOME%\webapps\myapp\WEB-INF\classes下,也就是剪切那個test目錄到classes目錄下,如果classes目錄不存在,就新建一個。 現在webapps\myapp\WEB-INF\classes下有test\Test.class的文件目錄結構
4 .修改webapps\myapp\WEB-INF\web.xml,添加servlet和servlet-mapping
編輯后的web.xml如下所示,紅色為添加的內容:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"<web-app>
<display-name>My Web Application</display-name>
<description>
A application for test.
</description>
<servlet>
<servlet-name>Test</servlet-name>
<display-name>Test</display-name>
<description>A test Servlet</description>
<servlet-class>test.Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/Test</url-pattern>
</servlet-mapping>
</web-app>
這段話中的servlet這一段聲明了你要調用的Servlet,而servlet-mapping則是將聲明的servlet"映射"到地址/Test上
5 .好了,重啟動Tomcat,啟動瀏覽器,輸入http://localhost:8080/myapp/Test 如果看到輸出This is a servlet test.就說明編寫的servlet成功了。
注意:修改了web.xml以及新加了class,都要重啟Tomcat
第四步:建立自己的Bean:
1.用你最熟悉的編輯器(建議使用有語法檢查的java ide)新建一個java程序,文件名為TestBean.java,文件內容如下:
package test;
public class TestBean{
private String name = null;
public TestBean(String strName_p){
this.name=strName_p;
}
public void setName(String strName_p){
this.name=strName_p;
}
public String getName(){
return this.name;
}
}
2 .編譯
將TestBean.java放在c:\test下,使用如下命令編譯:
C:\Test>javac TestBean.java
然后在c:\Test下會產生一個編譯后的bean文件:TestBean.class
3 .將TestBean.class文件剪切到 %CATALINA_HOME%\webapps\myapp\WEB-INF\classes\test下,
4 .新建一個TestBean.jsp文件,文件內容為:
<%@ page import="test.TestBean" %>
<html><body><center>
<%
TestBean testBean=new TestBean("This is a test java bean.");
%>
Java bean name is: <%=testBean.getName()%>
</center></body></html>
5 .好了,重啟Tomcat,啟動瀏覽器,輸入http://localhost:8080/myapp/TestBean.jsp 如果看到輸出Java bean name is: This is a test java bean.就說明編寫的Bean成功了。
這樣就完成了整個Tomcat下的jsp、servlet和javabean的配置。接下來需要做的事情就是多看書、多讀別人的好代碼,自己多動手寫代碼以增強自己在這方面開發的能力了。
jvm應填寫到
c:\j2sdk\bin
給你一個簡單的配置::::
JSP環境配置心得
首先要說的是,使用jdk+tomcat完全可以配置我們的jsp服務器,不再需要其實任何東東,有很多文章介紹了Apache,其實根本用不著,一般的學習調試tomcat完全可以勝任了。
安裝jdk后,tomcat在安裝之前會自動找到jdk的安裝路徑,一路點擊"下一步",經過一段時間的文件復制,最后"close",完成comcat的安裝。
您最好去下載一個版本較高的tomcat,比如4.1以上的,因為它不需要設置太多的系統變量,右擊"我的電腦",選擇"屬性"->"高級"->"環境變量"->"系統變量",新建一個TOMCAT_HOME,值設置成你的tomcat所在的路徑,比如:D:\Program Files\Apache Group\Tomcat 5.5,配置完成。
從開始菜單中找到tomcat選項,一般打開順序是:開始->程序->Apache Tomcat 5.5,選擇"Start Tomcat",讓jsp服務器開始運行,此時會打開一個類似Dos的窗口,會顯示一些相關的信息。
如果您使用代理上網,一定要先撤掉代理,不然您的jsp程序永遠也得不到執行。如果不是代理的,這一步就跳過了。
打開瀏覽器,在地址欄中輸入:http://localhost:8080,如果看到有老虎(我也不知道是老虎還是貓)的畫面,恭喜您,您成功了一半。
先來享受一下成功的喜悅吧,請輸入下面的代碼:
<html>
<head>
<title>First Page</title>
</head>
<body>
<H3>Today is: h
<%= new java.util.Date() %>
</H3>
</body>
</html>
將該程序保存為:First.jsp,放到Tomcat的ROOT目錄下,然后在瀏覽器的地址欄中輸入:http://localhost:8080/First.jsp,(First.jsp跟我們保存的文件名的大小寫要一致)回車,如果不出意外,應該可以看到形如Today is: h Fri Apr 11 08:32:38 CST 2003 的結果。
注意:ROOT是tomcat的默認虛擬目錄,如果要改成自己的虛擬目錄怎么辦呢?請繼續往下看吧。
要改成自己的虛擬目錄,就要請出server.xml來了,該文件是一個配置文件,在Tomcat\conf目錄下,使用任何文本編輯軟件都能打開它,我們先找到下面一句:
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="20000"
useURIValidationHack="false" disableUploadTimeout="true" />
這里的port="8080"就是端口,我們完全可以用別的端口來代替,但不能是被系統占用的端口(0--1023),這里簡單提一下。
下面我們再往下找,會發現以下的語句:
</Context>
</Host>
我們就應該找到這兩個語句,如果不懂E文,您就認定這兩個語句好了。然后我們將該語句更改如下:
</Context>
<Context path="/myjsp" debug="0" docBase="e:/myjsp" reloadable="true">
</Context>
</Host>
這里的path="/myjsp"就是我們就配置的虛擬目錄了,以后在地址欄中輸入http://localhost:8080/myjsp即可。而docBase="e:/myjsp" 則是機器本地路徑,他們通過這個語句形成一個映射關系,其它照抄。
將上面的First.jsp文件放到e:/myjsp目錄下,輸入http://localhost:8080/myjsp/First.jsp,是不是有一種喜上眉梢的感覺?
在論壇里我見得最多的就是很多人不知道javaBean文件放到哪里,老實說開始我也不知道,更令人不解的是,十個人有九種不同的說法,這更讓我們茫然。其實這問題也不是我們想像的那么復雜,我們以一個例子說明:
先建立一個java程序,代碼如下:
package hall;
public class SimpleBean {
private String message = "No message specified";
public String getMessage() {
return(message);
}
public void setMessage(String message) {
this.message = message;
}
}
保存為SimpleBean.java,編譯后會生成一個包,其實就相當于一個目錄,也就是SimpleBean.class會存放在hall目錄中,暫且保存起來,將來備用。
再輸入以下代碼:
<HTML>
<HEAD>
<TITLE>Reusing JavaBeans in JSP</TITLE>
</HEAD>
<BODY>
<CENTER>
<TABLE BORDER=5>
<TR><TH CLASS="TITLE">
Reusing JavaBeans in JSP</TABLE>
</CENTER>
<P>
<jsp:useBean id="test" class="hall.SimpleBean" />
<jsp:setProperty name="test" property="message" value="Hello WWW" />
<H1>Message: <I>
<jsp:getProperty name="test" property="message" />
</I></H1>
</BODY>
保存在我們剛才建立的虛擬目錄e:/myjsp下面,并命名為:BeanTest.jsp。
現在我們應該將hall(包)目錄放在哪兒呢?別急,我們先在e:/myjsp下建立一個文件夾WEB-INF,然后再在WEB-INF下建立一個classes文件夾,最后將hall目錄放到classes下,當然,hall下的字節碼文件SimpleBean.class也一并要移過來,而SimpleBean.java就和BeanTest.jsp放到同一目錄吧(可以不需要放的,自己試試)。
重新啟動機器(如果您試了好多次都不行,這一步一定要做),在瀏覽器中輸入:http://localhost:8080/myjsp/BeanTest.jsp,您看到了什么?呵,別告訴我您什么都沒看到,那肯定是您設置的問題了。
posted @
2006-09-05 16:41 摩西 閱讀(178) |
評論 (0) |
編輯 收藏
?
1、JAVA的安裝:
正常安裝JDK,完成后添加系統變量JAVA_HOME,其值為JDK的根目錄,如C:\J2SDK1.4.2(TOMCAT安裝時使用此變量捕獲JDK)
2、TOMCAT的安裝:
A:運行jakarta-tomcat-5.0.12.exe文件,自動捕獲JDK
B:解壓縮jakarta-tomcat-5.0.12.zip,解壓的過程既是安裝的過程,
安裝完成后設置系統變量:CATALINA_HOME,它是TOMCAT的安裝目錄,如果沒有進行設置,則在TOMCAT第一次啟動時自動設置
3、TOMCAT的測試:
A啟動:如果安裝時是.EXE文件,則會在開始菜單中出現TOMCAT的菜單,如果解壓縮安裝則在安裝目錄的BIN目錄下有STARTUP.BAT
B關閉:如果安裝時是.EXE文件,則會在開始菜單中出現TOMCAT的菜單,如果解壓縮安裝則在安裝目錄的BIN目錄下有SHUTDOWN.BAT
C測試:TOMCAT服務器啟動后,瀏覽器中輸入HTTP://LOCALHOST:8080
若要改變訪問端口號,則在CONF目錄下將SERVER.XML中CONNECTOR元素的PORT屬性值改變即可。
4、TOMCAT目錄結構
bin 存放啟動和關閉tomcat腳本
conf 包含不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xml
SERVER? 包含3個子目錄classes,lib,webapps
server/classes? 各種類文件,默認為空
server/lib?? 存放tomcat服務器所需的各種JAR文件
server/webapps? 存放tomcat自帶的兩個web應用案例:admin? manager
common? tomcat服務器以及所有web應用都可以訪問的JAR文件
shared? 所有web應用都可以訪問的JAR文件
work 存放jsp編譯后產生的class文件
logs 存放日志文件
webapp 存放應用程序示例,以后你要部署的應用程序也要放到此目錄 (重要)
5、WEB應用程序的目錄結構
在WEB上發布的J2EE應用程序都有自己特定的目錄結構
假設創建一名為HELLOAPP的WEB項目
HELLOAPP:WEB應用根目錄,所有JSP\HTML等文件均存放于此
HELLOAPP/WEB-INF? 存放WEb應用的發布描述文件web.xml
HELLOAPP/WEB-INF/classes 存放各種class文件,servlet類文件也存放于此
HELLOAPP/WEB-INF/lib? 存放WEb應用所需的各種JAR文件
6、web.xml文件配置
參見conf目錄下web.xml
7、server.xml文件配置(重要的配置)
server port 指定一個端口,這個端口負責監聽關閉tomcat的請求
shutdown 指定向端口發送的命令字符串
service name 指定service的名字
Connector
(表示客戶端和service之間的連接) port 指定服務器端要創建的端口號,并在這個斷口監聽來自客戶端的請求
minProcessors 服務器啟動時創建的處理請求的線程數
maxProcessors 最大可以創建的處理請求的線程數
enableLookups 如果為true,則可以通過調用request.getRemoteHost()進行DNS查詢來得到遠程客戶端的實際主機名,若為false則不進行DNS查詢,而是返回其ip地址
redirectPort 指定服務器正在處理http請求時收到了一個SSL傳輸請求后重定向的端口號
acceptCount 指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理
connectionTimeout 指定超時的時間數(以毫秒為單位)
Engine
(表示指定service中的請求處理機,接收和處理來自Connector的請求) defaultHost 指定缺省的處理請求的主機名,它至少與其中的一個host元素的name屬性值是一樣的
Context
(表示一個web應用程序,通常為WAR文件,關于WAR的具體信息見servlet規范) docBase 應用程序的路徑或者是WAR文件存放的路徑
path 表示此web應用程序的url的前綴,這樣請求的url為http://localhost:8080/path/****
reloadable 這個屬性非常重要,如果為true,則tomcat會自動檢測應用程序的/WEB-INF/lib 和/WEB-INF/classes目錄的變化,自動裝載新的應用程序,我們可以在不重起tomcat的情況下改變應用程序
host
(表示一個虛擬主機)
name 指定主機名
appBase 應用程序基本目錄,即存放應用程序的目錄
unpackWARs 如果為true,則tomcat會自動將WAR文件解壓,否則不解壓,直接從WAR文件中運行應用程序
Logger
(表示日志,調試和錯誤信息)
className 指定logger使用的類名,此類必須實現org.apache.catalina.Logger 接口
prefix 指定log文件的前綴
suffix 指定log文件的后綴
timestamp 如果為true,則log文件名中要加入時間,如下例:localhost_log.2001-10-04.txt
Realm
(表示存放用戶名,密碼及role的數據庫)
className 指定Realm使用的類名,此類必須實現org.apache.catalina.Realm接口
Valve
(功能與Logger差不多,其prefix和suffix屬性解釋和Logger 中的一樣)
className 指定Valve使用的類名,如用org.apache.catalina.valves.AccessLogValve類可以記錄應用程序的訪問信息
directory 指定log文件存放的位置
pattern 有兩個值,common方式記錄遠程主機名或ip地址,用戶名,日期,第一行請求的字符串,HTTP響應代碼,發送的字節數。combined方式比common方式記錄的值更多
?
在以上的設置項目中Context是最重要也是使用最頻繁的元素,他代表了運行在主機上的每個web應用。一個主機上可以用 多個web應用,每個web應用對應一個唯一的地址,而地址在Context元素的path屬性中設置
path:訪問web程序的url入口
docbase:制定web程序的路徑,如果web應用是開放目錄結構,則為根目錄,若為war文件則為war文件的路徑
例如:
<Context path="/helloapp" docbase="helloapp" reloadable="true"/>
當設置jsp文件時,只需把文件放到web應用根目錄下即可訪問,而設置servlet還要在web.xml中設置
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=813657
posted @
2006-09-05 12:06 摩西 閱讀(491) |
評論 (0) |
編輯 收藏
摘要: 一、Tomcat背景
自從JSP發布之后,推出了各式各樣的JSP引擎。Apache Group在完成GNUJSP1.0的開發以后,開始考慮在SUN的JSWDK基礎上開發一個可以直接提供Web服務的JSP服務器,當然同時也支持Servlet, 這樣Tomcat就誕生了。
Tomcat是ja...
閱讀全文
posted @
2006-09-05 12:04 摩西 閱讀(201) |
評論 (0) |
編輯 收藏
1.one page:? action_demo.html
<html>
<head></head>
<body>
<form? name="input" action="html_form_action.html" method="get">
Usename:
<input type="text" name="user" value="admin"><input type="submit" value="Submit">
</form>
</body>
</html>
2.two page:? html_from_action.html
<html>
<head></head>
<script language="javascript">
function getparastr(strname)
? {
?? var hrefstr,pos,parastr,para,tempstr;
?? hrefstr = window.location.href;
?? pos = hrefstr.indexOf("?")
?? parastr = hrefstr.substring(pos+1);
?? para = parastr.split("&");
?? tempstr="";
?? for(i=0;i<para.length;i++)
?? {
??? tempstr = para[i];
??? pos = tempstr.indexOf("=");
??? if(tempstr.substring(0,pos) == strname)
??? {
???? return tempstr.substring(pos+1);
???? }
?? }
?? return null;
? }
// 獲取program參數
//var userstr = getparastr("user");
//document.write(userstr);
//用得到的值給form中的文本框賦值?
function getname()
{
var userstr = getparastr("user");
document.fr1.input.value=userstr;
}
</script>
<body>
<form name="fr1" >
你的名字是:
<input type="text" name="input" >
<input type="button" name="bt1" value="查看用戶名" onclick="getname()">
</form>
</body>
</html>
posted @
2006-09-05 10:18 摩西 閱讀(5030) |
評論 (1) |
編輯 收藏