2006年9月3日
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 摩西 阅读(38577) |
评论 (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 摩西 阅读(850) |
评论 (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 摩西 阅读(2432) |
评论 (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 摩西 阅读(407) |
评论 (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 摩西 阅读(341) |
评论 (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 摩西 阅读(1878) |
评论 (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 摩西 阅读(29468) |
评论 (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 摩西 阅读(688) |
评论 (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 摩西 阅读(359) |
评论 (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 摩西 阅读(348) |
评论 (0) |
编辑 收藏
<entry key="webaddsuccess" value="redirect:/web.do?method=friendSitelist"/>
posted @
2007-04-27 09:30 摩西 阅读(894) |
评论 (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 摩西 阅读(1857) |
评论 (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 摩西 阅读(276) |
评论 (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 摩西 阅读(1500) |
评论 (1) |
编辑 收藏
<script language="javascript">document.write(week[${status.index}])</script>
posted @
2007-04-16 14:42 摩西 阅读(1171) |
评论 (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 摩西 阅读(1317) |
评论 (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 摩西 阅读(362) |
评论 (0) |
编辑 收藏
<a href="javascript:history.go(-1);">[返回]</javascript>
posted @
2007-04-14 09:39 摩西 阅读(1750) |
评论 (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 摩西 阅读(762) |
评论 (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 摩西 阅读(4855) |
评论 (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 摩西 阅读(3797) |
评论 (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 摩西 阅读(292) |
评论 (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"
"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>
<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 摩西 阅读(175) |
评论 (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 摩西 阅读(489) |
评论 (0) |
编辑 收藏
摘要: 一、Tomcat背景
自从JSP发布之后,推出了各式各样的JSP引擎。Apache Group在完成GNUJSP1.0的开发以后,开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器,当然同时也支持Servlet, 这样Tomcat就诞生了。
Tomcat是ja...
阅读全文
posted @
2006-09-05 12:04 摩西 阅读(199) |
评论 (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 摩西 阅读(5027) |
评论 (1) |
编辑 收藏
XML相关资源
一. XML的大本营
XML是由W3C(World Wide Web Consortium)国际组织负责开发和制定标准的。关于XML最权威,最新的消息都来自W3C。网址是:
http://w3c.org/XML/ 另外一个名为OASIS的前著名的SGML研究组织也在一起推动XML的发展,网址是:
http://www.oasis-open.org/ 二. XML指南
http://www.w3.org/TR/REC-xml W3C关于XML规范的详细,完整的说明。不用多说,绝对权威。
http://www.xml.com/axml/testaxml.htm 这是Tim Bary写的XML规范说明书,非常的详细和严密,是学习XML规范的好帮手。
三. XML常见问题
Peter Flynn的 XML FAQ
http://www.ucc.ie/xml/ 包含大量详细的资料,经常更新,由W3C协会XML组维护。
Lisa Rein’s finetuning XML FAQs
http://www.finetuning.com/faq.html 这个FAQ列表有侧重点,主要包含XSLT FAQ,XPath FAQ和IE5中的XSL FAQ。
Dave Pawson’s XSL FAQ
http://www.dpawson.co.uk/xsl/idx.html 提供最好的关于XSL方面的FAQ,创建于1999年。
jGuru’s Extensible Markup Language (XML) FAQ
http://www.jguru.com/jguru/faq/faqpage.jsp?name=XML 这个FAQ列表是一个典型的"老百晓",任何问题,从普通的到非常细节的XML问题都可以在这里找到。
Ronald Bourret’s XML Namespaces FAQ
http://www.informatik.tu-darmstadt.de/DVS1/staff/bourret/xml/ NamespacesFAQ.htm
创建于2000初,是关于namespaces概要的FAQ。
四. XML主题网站
http://www.xml.com/ 一个以XML为主题的内容丰富的网站
http://www.xml-zone.com/ 另一个比较知名的XML网站,提供XML的新闻和资讯。
http://www.xmlinfo.com/ 网站创建者James Tauber’s是W3C组织XML发展组的成员之一,他的网站提供了大量的连接和例子。
http://www.simonstl.com/ 网站创建者Simon St. Laurent也是XML发展组的成员。他是W3C中XML初级入门教程的作者,他的站点主要提供有关XML的发展信息。
http://msdn.microsoft.com/xml/c-frame.htm#/xml/default.asp 微软的MSDN关于XML的主题网站。微软在推进XML应用方面不遗余力。
http://www.xmlsoftware.com/ 是XML info的姐妹网站,内容包括XML/DTD/XSL编辑软件,XML API软件等。
http://xmlhack.com/ 1999年9月建立的大型XML新闻网站,同时提供XML人才信息。
http://xml.apache.org/ Apache软件基金会(ASF),提供了大量open source的XML和XSL的工具软件。
http://www.biztalk.org/ BizTalk是微软发起的以XML商业应用为目标的组织。BizTalk不是一个标准组织。
五. XML的编辑软件
目前XML文档的编辑软件依然很少。虽然我们可以手工编写,但是如果有一个好的软件(类似用DW/FP编写HTML),可以减少差错和提高效率。下面是现有的一些编辑软件。
http://www.macromedia.com/software/dreamweaver/ Macromedia最新的Dreamweaver 4.0已经支持XML文档的编写。推荐使用。
http://www.microsoft.com/xml/notepad/intro.asp 微软在这方面向来不会落后,它推出的XML Notepad是一个非常小巧灵活的XML文档编辑器。推荐使用。
http://www.adobe.com/prodindex/framemaker/prodinfosgml.html Adobe公司的Framemaker plus是目前较好的XML编辑软件。
http://www.arbortext.com/ Arbortext公司是重点开发XML游戏的公司。
http://www.inso.com/ Inso,好象是用来处理大型SGML或者XML文档的软件。
http://www.softquad.com/ Softquad 是HTML和SGML软件的开发商,对XML自然不会放过。
六. 支持XML的浏览器
http://www.microsoft.com/windows/ie/ IE 5.X是目前流行浏览器唯一支持XML的,它可以在微软的网站免费下载到。
http://developer.netscape.com/software/communicator/ngl/ index.html?cp=dev09fg01
Gecko是另一种支持XML的浏览器,但目前只是测试版。
七. XML parser
Parser是一个检查XML文档语法是否符合DTD定义,并进行解析的软件。
在线的parser
http://validator.w3.org/ W3C组织提供的一个在线paeser。可以根据你在线提交的XML文档URL,进行验证和解吸。
http://www.stg.brown.edu/service/xmlvalid/ 一个Brown大学科技小组提供的parser,非常方便和容易理解。。
可下载的Parser
有很多可以下载到本机上运行的parser,下面列出一些主要的:
http://www.jclark.com/xml/expat.html James Clark是在SGML/XML领域的元老,他写的parser被广泛的运用。
http://www.alphaworks.ibm.com/tech/xml 一个以Java语言编写的Parser,来自IBM。
http://www.microsoft.com/xml/parser/cparser.asp 微软的XML Parser,用C++写成。
http://www.stud.ifi.uio.no/~larsga/download/python/xml/xmlproc.html 用Python写的parser。
http://www.jeremie.com/Dev/XML/ 用javascript写的parser,只用来检查语法,不进行解吸析。
http://w3c.org/RDF/Implementations/SiRPAC/ 来自W3C组织的SiRPAC,全称是Simple RDF Parser and Compiler。
八. Schema编辑软件
Schema我们前面介绍过,DTD就是一种Schema,我们可以手工写DTD,但现在已经有一些Schema编辑软件来帮助我们更方便的建立DTD。
http://www.extensibility.com/ Extensibility这个软件被称为XML权威。可以以图形化方式建立和编辑schema,包括DTD文件。
九. 国内XML资源
http://www.xml.net.cn/ XML中国论坛是一个非赢利的学术网站。由北京大学计算机科学与技术研究所创办,北大方正集团公司提供赞助。
http://www.xml.org.cn:8188 中国XML联盟将建立为国内第一个开放性网络标准组织,提供XML技术认证、咨询和交流。由上海易方公司赞助。
http://www.xml.com.cn/ chinaasp.com的子站,提供XML文章和技术交流等。
http://www.egroups.com/group/china_xml_list/info.html 中国XML邮件组包括中文XML资源, XML的最新资料,同行的交流空间。由非盈利性组织中国XML联盟负责维护。
http://weblab.crema.unimi.it/xmlzh/XML_FAQ.htm 一个XML FAQ邮件列表的中文翻译,可惜是1998年10月的
posted @
2006-09-03 17:33 摩西 阅读(245) |
评论 (0) |
编辑 收藏