2006年8月21日
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 摩西 阅读(29476) |
评论 (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 摩西 阅读(689) |
评论 (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 摩西 阅读(360) |
评论 (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 摩西 阅读(355) |
评论 (0) |
编辑 收藏
<entry key="webaddsuccess" value="redirect:/web.do?method=friendSitelist"/>
posted @
2007-04-27 09:30 摩西 阅读(895) |
评论 (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 摩西 阅读(1858) |
评论 (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 摩西 阅读(1318) |
评论 (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 摩西 阅读(1751) |
评论 (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 摩西 阅读(293) |
评论 (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 摩西 阅读(176) |
评论 (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) |
编辑 收藏
1.传递表单参数:
String name = new String(request.getParameter("name"));
2.数据库连接:
~~MYSQL
//设置数据库的URL
String url = "jdbc:mysql://localhost:3306/jspsky";
try
//加载驱动程序
Class.forname("org.gjt.mm.mysql.Driver").newInstance();
//建立连接
java.sql.Connection connection = java.sql.DriverManager.getConnection(url);
java.sql.Statement statement = connection.createStatement();
//SQL语句
String sqlStringi ="insert into commu(name,tel,mobile,oicq,email)values(‘"+name+"',‘"+tel+"',‘"+mobile+"',‘"+oicq+"',‘"+email+"')";
//运行SQL语句,并建立结果集
java.sql.ResultSet rsi = statement.executeQuery(sqlStringi);
//在屏幕上输出库中的内容
while(rss.next())
{
String a_name = rss.getString(1);
out.println(a_name);
{}
//关闭连接
connection.close();
}
//捕捉异常
catch(java.sql.SQLException e)
out.println(e.getMessage());
{}
catch(ClassNotFoundException e)
out.println(e.getMessage());
{}
~~DB2
//定义数据库的URL
String url = "jdbc:db2:portal";
try
//加载驱动程序
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
//建立连接,
java.sql.Connection connection = java.sql.DriverManager.getConnection(url,"user","password");
java.sql.Statement statement = connection.createStatement();
//SQL语句
String sqlString = "select * from client";
//执行SQL语句
java.sql.ResultSet rs = statement.executeQuery(sqlString);
//在屏幕上显示所连表中的内容
while(rs.next())
{
String name = rs.getString(1);
out.println(name);
{}
//关闭连接
connection.close();
}
//捕捉异常
catch(java.sql.SQLException e)
out.println(e.getMessage());
{}
catch(ClassNotFoundException e)
out.println(e.getMessage());
{}
3.文件操作
~~将一个字符串写到一个指定的文件中,如果该文件不存在,则新建一个文件,并完成写入;如果存在,则用此字符串覆盖原文件的所有内容
import java.io.*;
String str = "print me 雪峰!";
//定义好打印的目标文件名
//取得当前主机存放WEB页面的绝对路径
String hostdir = System.getProperty("user.dir");
//取得当前主机所采用的路径分隔符
String fileBar = System.getProperty("file.separator");
//书写完整的目标文件存放路径
String nameOfFile=hostdir+fileBar+"test.html";
try
//实例化一个文件输出流对象
FileOutputStream afile = new FileOutputStream(nameOfFile);
//将文件输出流,创建一个打印输出流对象
PrintWriter pw = new PrintWriter(afile);
pw.println(str);
//clean up
pw.close();
{}
catch(IOException e)
out.println(e.getMessage());
{}
~~列出指定目录下的文件列表
import java.io.*;
String cdur = System.getProperty("user.dir");
String fileBar = System.getProperty("file.separator");
String mydir =cdur+fileBar+"doc"+fileBar+"jspsky";
File my = new File(mydir);
String d[] = my.list();
int i;
int l=d.length;
for(i=0;i out.print(d);
{}
4.计数器
Integer count = null;
synchronized (application)
count =(Integer) application.getAttribute("d");
if (count ==null)
count =new Integer("0");
count = new Integer(count.intValue()+1);
application.setAttribute("d",count);
{}
out.println(count);
// 首先定义一个整形对象,并初始化为:NULL,
// 取回APPLICATION对像的属性D的值,并强制转化为整形对象,赋给COUNT
// 判断COUNT是否为空,为空时,将O赋给COUNT对象,
// 否则,通过COUNT。INTVALUE()方法,实现COUNT对象加1,并赋值给COUNT
// 最后,将COUNT对象保存在APPLICATION对象的D变量中。
posted @
2006-09-01 10:16 摩西 阅读(179) |
评论 (0) |
编辑 收藏
来自:
Matrix
:
http://www.matrix.org.cn/resource/article/43/43811.html
你需要精通面向对象分析与设计(OOA/OOD)、涉及模式(GOF,J2EEDP)以及综合模式。你应该十分了解UML,尤其是class,object,interaction以及state diagrams.
你需要学习JAVA语言的基础知识以及它的核心类库(collections,serialization,streams,networking,multithreading,reflection,event,handling,NIO,localization,以及其他)。
你应该了解JVM,class loaders,class reflect,以及垃圾回收的基本工作机制等。你应该有能力反编译一个类文件并且明白一些基本的汇编指令。
如果你将要写客户端程序,你需要学习WEB的小应用程序(applet),必需掌握GUI设计的思想和方法,以及桌面程序的SWING,AWT,SWT。你还应该对UI部件的JAVABEAN组件模式有所了解。JAVABEANS也被应用在JSP中以把业务逻辑从表现层中分离出来。
你需要学习java数据库技术,如JDBC API并且会使用至少一种persistence/ORM构架,例如Hibernate, JDO, CocoBase, TopLink,Inside Liberator(国产JDO 红工厂软件)或者iBatis。你还应该了解对象关系的阻抗失配的含义,以及它是如何影响业务对象的与关系型数据库的交互,和它的运行结果,还需要掌握不同的数据库产品运用,比如: oracle,mysql,ms sql server.
你需要学习JAVA的沙盒安全模式(class loaders, byte code verification, managers, policy and permissions, code signing, digital signatures, cryptography, certification, Kerberos,以及其他)还有不同的安全/认证API,例如JAAS( Java Authentication and Authorization Service), JCE (Java Cryptography Extension), JSSE (Java Secure Socket Extension), 以及 JGSS (Java General Security Service).
你需要学习Servlets, JSP, 以及JSTL(Standard Tag Libraries)和可以选择的第三方Tag Libraries。
你需要熟悉主流的网页框架,例如JSF, Struts, Tapestry, Cocoon, WebWork, 以及他们下面的涉及模式,如MVC/MODEL2.
你需要学习如何使用及管理WEB服务器,例如tomcat,resin,Jrun,并且知道如何在其基础上扩展和维护WEB程序。
你需要学习分布式对象以及远程API,例如RMI和RMI/IIOP。
你需要掌握各种流行中间件技术标准和与java结合实现,比如Tuxedo、CROBA,当然也包括java EE 本身.
你需要学习最少一种的XML API,例如JAXP (Java API for XML Processing), JDOM (Java for XML Document Object Model), DOM4J, 或 JAXR (Java API for XML Registries).
你应该学习如何利用JAVA API和工具来构建Web Service。例如JAX-RPC (Java API for XML/RPC), SAAJ (SOAP with Attachments API for Java), JAXB (Java Architecture for XML Binding), JAXM (Java API for XML Messaging), JAXR (Java API for XML Registries), 或者 JWSDP (Java Web Services Developer Pack)。
你需要学习一门轻量级应用程序框架,例如Spring, PicoContainer, Avalon, 以及它们的IoC/DI 风格(setter, constructor, interface injection)。
你需要熟悉不同的J2EE技术,例如JNDI (Java Naming and Directory Interface), JMS (Java Message Service), JTA/JTS (Java Transaction API/Java Transaction Service), JMX (Java Management eXtensions), 以及 JavaMail.
你需要学习企业级Java Beans(EJB)以及它们的不同组件模式:Stateless/Stateful Session Beans, Entity Beans (包含Bean-Managed Persistence [BMP] 或者 Container-Managed Persistence [CMP] 和它的 EJB-QL), 或者Message-Driven Beans (MDB).
你需要学习如何管理与配置一个J2EE应用程序服务器,如WebLogic ,JBoss等,并且利用它的附加服务,例如簇类,连接池以及分布式处理支援。你还需要了解如何在它上面封装和配置应用程序并且能够监控、调整它的性能。
你需要熟悉面向方面的程序设计以及面向属性的程序设计(这两个都被很容易混淆的缩写为AOP),以及他们的主流JAVA规格和执行。例如AspectJ 和AspectWerkz。
你需要熟悉对不同有用的API和framework等来为你服务。例如Log4J (logging/tracing), Quartz (scheduling), JGroups (network group communication), JCache (distributed caching), Lucene (full-text search), Jakarta Commons等等。
如果你将要对接或者正和旧的系统或者本地平台,你需要学习JNI (Java Native Interface) and JCA (Java Connector Architecture).
你需要熟悉JINI技术以及与它相关的分布式系统,比如掌握CROBA。
你需要Java Community Process(JCP)以及他的不同Java Specification Requests (JSRs), 例如 Portlets (168), JOLAP (69), Data Mining API (73), 等等。
你应该熟练掌握一种JAVA IDE例如sunOne ,netBeans ,IntelliJ IDEA或者Eclipse。(有些人更喜欢VI或EMACS来编写文件。随便你用什么了:))
JAVA(精确的说是有些配置)是冗长的,它需要很多的人工代码(例如EJB),所以你需要熟悉代码生成工具,例如XDoclet。
你需要熟悉一种单元测试体系(JNunit),并且学习不同的生成、部署工具(Ant, Maven)。
你需要熟悉一些在JAVA开发中经常用到的软件工程过程。例如RUP (Rational Unified Process) and Agile methodologies.
你需要能够深入了解加熟练操作和配置不同的操作系统,比如GNU/linux ,sun solaris,mac OS等,做为跨平台软件的开发者。
你还需要紧跟java发展的步伐,比如现在可以深入的学习java ME ,以及各种java 新规范,技术的运用,如 新起的web富客户端技术。
你必需要对open source有所了解,因为至少java 的很多技术直接是靠开源来驱动发展的 ,如 java 3D技术。
posted @
2006-09-01 10:14 摩西 阅读(193) |
评论 (0) |
编辑 收藏
<!DOCTYPE html PUBliC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>css菜单演示</title>
<style type="text/css">
<!--
*{margin:0;padding:0;border:0;}
body {
font-family: arial, 宋体, serif;
font-size:12px;
}
#nav {
line-height: 24px; list-style-type: none; background:#666;
}
#nav a {
display: block; width: 80px; text-align:center;
}
#nav a:link {
color:#666; text-decoration:none;
}
#nav a:visited {
color:#666;text-decoration:none;
}
#nav a:hover {
color:#FFF;text-decoration:none;font-weight:bold;
}
#nav li {
float: left; width: 80px; background:#CCC;
}
#nav li a:hover{
background:#999;
}
#nav li ul {
line-height: 27px; list-style-type: none;text-align:left;
left: -999em; width: 180px; position: absolute;
}
#nav li ul li{
float: left; width: 180px;
background: #F6F6F6;
}
#nav li ul a{
display: block; width: 156px;text-align:left;padding-left:24px;
}
#nav li ul a:link {
color:#666; text-decoration:none;
}
#nav li ul a:visited {
color:#666;text-decoration:none;
}
#nav li ul a:hover {
color:#F3F3F3;text-decoration:none;font-weight:normal;
background:#C00;
}
#nav li:hover ul {
left: auto;
}
#nav li.sfhover ul {
left: auto;
}
#content {
clear: left;
}
-->
</style>
<script type=text/javascript><!--//--><![CDATA[//><!--
function menuFix() {
var sfEls = document.getElementById("nav").getElementsByTagName("li");
for (var i=0; i<sfEls.length; i++) {
sfEls[i].onmouseover=function() {
this.className+=(this.className.length>0? " ": "") + "sfhover";
}
sfEls[i].onMouseDown=function() {
this.className+=(this.className.length>0? " ": "") + "sfhover";
}
sfEls[i].onMouseUp=function() {
this.className+=(this.className.length>0? " ": "") + "sfhover";
}
sfEls[i].onmouseout=function() {
this.className=this.className.replace(new RegExp("( ?|^)sfhover\\b"),
"");
}
}
}
window.onload=menuFix;
//--><!]]></script>
</head>
<body>
<ul id="nav">
<li><a href="#">产品介绍</a>
<ul>
<li><a href="#">产品一</a></li>
<li><a href="#">产品一</a></li>
<li><a href="#">产品一</a></li>
<li><a href="#">产品一</a></li>
<li><a href="#">产品一</a></li>
<li><a href="#">产品一</a></li>
</ul>
</li>
<li><a href="#">服务介绍</a>
<ul>
<li><a href="#">服务二</a></li>
<li><a href="#">服务二</a></li>
<li><a href="#">服务二</a></li>
<li><a href="#">服务二服务二</a></li>
<li><a href="#">服务二服务二服务二</a></li>
<li><a href="#">服务二</a></li>
</ul>
</li>
<li><a href="#">成功案例</a>
<ul>
<li><a href="#">案例三</a></li>
<li><a href="#">案例</a></li>
<li><a href="#">案例三案例三</a></li>
<li><a href="#">案例三案例三案例三</a></li>
</ul>
</li>
<li><a href="#">关于我们</a>
<ul>
<li><a href="#">我们四</a></li>
<li><a href="#">我们四</a></li>
<li><a href="#">我们四</a></li>
<li><a href="#">我们四111</a></li>
</ul>
</li>
<li><a href="#">在线演示</a>
<ul>
<li><a href="#">演示</a></li>
<li><a href="#">演示</a></li>
<li><a href="#">演示</a></li>
<li><a href="#">演示演示演示</a></li>
<li><a href="#">演示演示演示</a></li>
<li><a href="#">演示演示</a></li>
<li><a href="#">演示演示演示</a></li>
<li><a href="#">演示演示演示演示演示</a></li>
</ul>
</li>
<li><a href="#">联系我们</a>
<ul>
<li><a href="#">联系联系联系联系联系</a></li>
<li><a href="#">联系联系联系</a></li>
<li><a href="#">联系</a></li>
<li><a href="#">联系联系</a></li>
<li><a href="#">联系联系</a></li>
<li><a href="#">联系联系联系</a></li>
<li><a href="#">联系联系联系</a></li>
</ul>
</li>
</ul>
</body>
</html>
posted @
2006-08-29 15:18 摩西 阅读(231) |
评论 (0) |
编辑 收藏
简介Jakarta-Struts是Apache软件组织提供的一项开放源代码项目,它为Java Web应用提供了模型-视图-控制器(MVC)框架,尤其适用于开发大型可扩展的Web应用. Struts为Web应用提供了一个通用的框架,使得开发人员可以把精力集中在如何解决实际业务问题上. 此外,Struts框架提供了许多可供扩展和定制的地方使得应用程序可以方便的扩展框架,来更好的适应用户的实际需求.
本文是一篇介绍利用MyEclipse进行Struts开发的基础教程,通过详细的描述和大量的图片来展现Struts开发的具体过程. 这里所采用的是我们经常会遇到的用户登陆的实例,如果用户登陆成功进入程序的主界面(main.jsp),否则返回登陆页面并提示错误信息.
n 创建Web项目
在菜单中依次点击File→New→Project,然后在弹出的窗口中选择J2EE→Web Project,启动Web项目创建向导。
点击下一步,在项目名称中,我们输入StrutsDemo,然后修改Context root URL为/hello,其他我们使用默认的设置,最后点击Finish按钮完成创建工作.
在项目创建后,我们需要让它支持Struts功能. 在菜单中选择MyEclipse→Add Struts Capabilities. 在弹出的对话框中, 将Struts specification修改为1.2,将Base package for new classes修改为我们喜欢的包名,如com.study.struts,修改完成后点击Finish按钮.
在Package Explore中,我们可以看到增加了Struts能力后,MyEclipse在Web项目中增加了很多jar文件和tld文件,请参考下图:
n 创建JSP文件
在我们的登陆程序中一共需要两个JSP文件. 一个是index.jsp,作为用户登陆的界面和登陆失败后的返回界面. 一个是main.jsp,作为登陆成功后的主界面.
在Package Explore中双击struts-config.xml将其打开,在源代码窗口中点击左侧工具栏中的
,在弹出的JSP文件创建向导中修改文件名为index.jsp,选择5]Standard JSP using Struts 1.2 with a form模板,然后点击Finish按钮. MyEclipse会为我们创建一个名为index.jsp的带一个Form的JSP文件.
按照同样的方法创建main.jsp. 由于我们只是简单的在主界面中显示成功登陆的信息,因此在创建的时候,我们选择的是第一个缺省的模板.
JSP文件创建后,我们可以根据自己的需要来修改其中的内容. 对于index.jsp,我们修改Form的action属性和提交参数的名字, 并增加了标签,可参考下面的代码:
<html:form action="/login.do" method="post" focus="login">
<center><html:errors/>center>
<table border="0">
<tr>
<td>Name:td>
<td><html:text property="name" />td>
tr>
<tr>
<td>Password:td>
<td><html:password property="password" />td>
tr>
<tr>
<td colspan="2" align="center"><html:submit />td>
tr>
table>
html:form>
对于main.jsp,我们修改中的输出信息,提示用户登陆成功,代码如下:
<body>
You have logged in!<br>
body>
保存两个JSP文件和struts-config.xml文件.
n 创建ActionForm
在我们的登陆程序中需要用户提交用户名和密码,因此我们需要创建一个ActionForm Bean来保存提交的HTML表单数据.
将源代码窗口中的标签切换到struts-config.xml,右上角的Outline窗口内容如下:
选中其中的form-beans,右键单击,在弹出的菜单中选择New Form. 在Form Bean创建向导对话框中,输入Use case的名字login,然后在下方的Form Properties中增加name和password两个属性.
n 创建Action
在完成上面的创建后,我们接下来创建Action类. 在源代码窗口中切换到struts-config.xml文件,点击左侧工具栏中的. 在弹出的创建向导中输入Use case名字为Login.
在对话框的下部Optional Details中,点击Name行末的Browse按钮,选中我们刚才创建的loginForm.
点击Input Source行末的Browse按钮,在弹出的对话框中选中index.jsp.
将Optional Details标签切换到Forwards,点击Add按钮增加一个局部的Forward.
这里的success是我们给Forward的名字,你也可以使用其它你喜欢的名字. 增加后如下:
完成新建Action的设置后如下图:
点击Finish按钮后,MyEclipse会为我们创建一个名叫LoginAction.java的文件,我们可以根据自己的需要来实现具体的验证逻辑. 这里,我们仅仅通过登陆的名字是否为hello来判断. 如果不是提示登陆失败. 代码参考如下:
ActionMessages errors=new ActionMessages();
LoginForm loginForm = (LoginForm) form;
String username=loginForm.getName();
if(username.equals("hello")) {
return mapping.findForward("success");
} else {
errors.add("username",new ActionMessage("error.msg"));
saveErrors(request,errors);
return (new ActionForward(mapping.getInput()));
}
从上面的代码中我们可以看到,当用户登陆失败后会使用一个键值为error.msg的ActionMessage. 因此,我们在Package Explore中找到ApplicationResources.properties文件并双击打开,输入以下内容并保存.
error.msg=Login Failed
在完成了上述所有的工作后,我们可以看到图示化的struts-config.xml如下:
n 部署和测试应用程序
这里StrutsDemo的部署同其他的Web应用程序一样,我们就不在赘述了,具体的方法可以参阅MyEclipse系列文章的第二篇Web项目的开发.
部署成功后,在IE的地址栏中输入http://localhost:8080/hello/index.jsp并回车.
我们首先验证登陆失败的场景. 当我们输入的用户名不是hello时,应返回到登陆页面并提示登陆失败. 在Name中输入abcd,点击Submit按钮.
我们可以看到又回到了登陆页面,并且出现了Login Failed的提示信息. 修改用户名为hello,然后点击Submit按钮.
完.
posted @
2006-08-29 13:27 摩西 阅读(585) |
评论 (0) |
编辑 收藏
以一个很简单的 Web 应用来说明使用 MyEclipse 的 Web 服务器配置,应用部署和调试过程。
一、准备开发工具
这里使用 Eclipse 3.1.2 和 MyEclipse4.1.1 ,当然 Java 通常都是用来开发网络应用的,那么 Web 服务器也就少不了了,这里使用tomcat5.0版本,当然如果你没有 J2SDK 那么所有的程序都没法编译运行了,所以,你也去准备一个吧,这里使用 J2SDK 1.5.0_06-b05 ,上,就无所谓,我们就可以使用所有的功能。
下载地址:
http://www.inspiresky.com/bbs/dispbbs.asp?boardID=13&ID=6356&page=1 http://www.inspiresky.com/bbs/dispbbs.asp?boardID=13&ID=3889&page=1 http://java.sun.com http://www.eclipse.org http://www.apache.org
http://www.myeclipseide.com/ContentExpress-display-ceid-10.html
里面有 MyEclipse 的注册码,这里提供的仅供个人学习研究使用,公司用户请自行购买序列号。
二、软件的安装和注册
首先要安装 JDK ,我这里使用默认安装,目录所有的都不改变, C:\Program Files\Java ,下面有两个文件夹,一个是 jdk ,一径之类的,请去网上查找相关资料吧,那个很多文章讲了。
Tomcat 的安装,我们使用 Exe 版本的安装文件,除了选择目录外,其他的都默认好了,这里安装到 D:\Tomcat5.5 ,注意中间为有时候有空格会很麻烦。
Eclipse 的安装比较方便,直接解包就行了,然后把解开的文件 Eclipse 文件夹放置到适当的安装目录,如这里是 D:/eclipse 。 pse.exe 文件,启动 Eclipse ,设置 JDK 和工作路径后就可以看到 Eclipse 的欢迎页面了。这里我们不使用 Eclipse ,所以,把它关闭 MyEclipse 是一个 Exe 安装文件,有安装向导,直接双击安装,选择完 Eclipse 安装目录 D:/eclipse 和自身的安装目录,这里使用 pse ,然后一路 next 就行了。 我们在程序组中可以找到 MyEclipse 程序组,点击打开,如果你没有默认的工作路径,选择一个工作路径后,会看到集成 e 的典型界面。 最后需要输入 MyEclipse 的注册码,打开菜单 window->preferences ,在对话框的菜单树中打开 MyEclipse->Subscription 项, n … 按钮,然后输入注册用户名和密码即可。 OK ,到这里所有需要的软件都安装好了,下面我们来创建一个简单的工程来说明 MyEclipse 的应用。
三、创建 Web 工程
由于这里只讲解 MyEclipse 的基本操作和设置,所以,就不做很复杂的项目了,完全可以触类旁通的。
打开 MyEclipse 开发界面, File->New->Projects … ,打开新建项目对话框,选中 MyEclipse->J2EE Projects->Web Project ,点 Project Details 的 Projects Name 中输入 WebTest ,其他采用默认值,注意这里的 Context root URL 为 /WebTest ,否则,你就要在 IE 才能使用了。注意这里的最下面有是否加入标签库支持,我们选择 JSTL1.1 。然后,点击 Finish 按钮完成项目创建。
我们察看我们新建的工程,需要的类都已经自动加载了进来,还有一个 J2EE 的类环境变量,这就是使用 MyEclipse 的方便之
四、新建 Hello 类 选中工程项目 WebTest 下的 src 文件夹(注意是在 Package Explorer 下,如果这个找不到,去找 Eclipse 使用指南看吧, Window kage Explorer ),右键菜单 New->Package ,新建一个包 com.inspiresky.bean 。选中新建的包,右键菜单 New ->Class , Name 中输 static void main 选项,其他全部默认,点击 Finish 按钮完成类的创建。
编辑类的代码,如下所示:
package com.inspiresky.bean;
/* * Junsan * http://www.inspiresky.com/bbs */
public class Hello
{ private String message = "Hello World";
/** * @return Returns the message. */
public String getMessage()
{ return message; }
/** * @param message The message to set. */
public void setMessage(String message)
{ this.message = message; } }
注意这里 Bean 属性的操作方法,可以先定义好属性,然后,在编辑窗口右键菜单 Source->Generate Getters and Setters 框中选择要生成 get 和 set 方法的属性确定就可以了
五、创建 JSP 页面
在 WebTest 工程中,选中 WebRoot 文件夹,右键菜单 New->JSP , File Name 修改为 index.jsp ,其他默认,点击 Finish 按
编辑 JSP 文件的内容如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<jsp:useBean id="hello" class="com.inspiresky.bean.Hello" scope="page"/>
<jsp:setProperty name="hello" property="message" value="Hello World!"/>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<jsp:getProperty name="hello" property="message" /><br>
This is my JSP page. <br>
</body>
</html>
注意红色部分为我们添加的代码。好了我们的代码已经编写完毕了。
六、配置 Tomcat 服务器
Eclipse 菜单, Window->Preference… ,打开 Preference 对话框,找到菜单树中 MyEclipse->Application Servers->Tomcatat 5 项,在对话框中,选中 Enable 单选按钮,然后点击 Tomcat Home Directory 输入框后的 Browse 按钮,选择 Tomcat 的安装根目 omcat5.5 ,其它的框会自动填充。点击 Apply 按钮。 选中 Tomcat 5 中的 JDK 一项,这里要特别注意,默认的是 JRE 的运行环境,这里要设定成 JDK 的,否则, MyEclipse 无法正常
也无法正常运行 Tomcat 服务器。
我们点击 Add 按钮, JRE Name 中写入 JDK1.5.0_06 ,然后在 Browse 选择框中选择 JDK 的根目录,这里是 C:\Program Files\Java\jdk1.5.0_0 6 ,其他的默认,点击 OK 按钮。在 Tomcat JDK Name 中选择我们刚才创建的那个,就是 JDK1.5.0_06 。点击 Apply 按钮,每次都点 e 出问题,你不点这个跑到另一个配置页面就会丢失上面的配置。
我们在 Tomcat 5 的 Launch 中确保选中了 Debug 模式。
而 Paths 中就是一些类路径设置,第一个是提前加载的类路径,有些包一启动服务器初始化 Web Application 时就要用到第二个是运行时才用到的;第三个是没有打包的类,这里我们就不管了。
现在可以点击 preference 对话框的 OK 按钮了,完成 Tomcat 的配置。 七、部属 Web 应用程序
这里就简单点了,我们选中 WebTest 工程的根目录,右键菜单 MyEclipse->Add and Remove Projects Deployments… ,确保 Projects 为 WebTest ,点击 Add 按钮,在弹出对话框的 Server 中选择 Tomcat 5 ,下面的两个单选项, Exploaded Archive 和分别是目录方式部属和包方式部属,这个都是由 MyEclipse 来做的,我们使用目录部署方式,不用打成 war 包,其他的不管它了钮回到上一个页面。
服务器指定了,下面来部署应用程序。选中对话框服务器列表中的 Tomcat 5 项,此时,灰显的按钮变为可用,其中 Remove 是移除部署和重新部署,我们点击 Redeploy 按钮,以后我们修改了工程也可以点此按钮重新部署。这里我们可以点击一下了。
OK ,程序已经部署完成了,下面要运行调试了。
八、运行调试程序
在 Eclipse 的图形菜单栏找到(这个按钮左边那个是重新部署按钮,右边是自掉的浏览器),点击下拉按钮,后点击 Start 菜单,启动 Tomcat 。 等 Consol 窗口中提示 Tomcat 启动成功,我们就可以运行我们的程序了。打开一个 IE 浏览器窗口,输入 http://localhost:8080/WebTes t/ ,我们可以看到如下信息:
Hello World!
This is my JSP page. 说明运行成功。
posted @
2006-08-29 12:04 摩西 阅读(8124) |
评论 (6) |
编辑 收藏
posted @
2006-08-25 16:28 摩西 阅读(3130) |
评论 (2) |
编辑 收藏
初学者如何开发出一个高质量的J2EE系统
板桥里人
http://www.jdon.com 2005/06/20
J2EE学习者越来越多,J2EE本身技术不断在发展,涌现出各种概念,本文章试图从一种容易理解的角度对这些概念向初学者进行解释,以便掌握学习J2EE学习方向。
首先我们需要知道Java和J2EE是两个不同概念,Java不只是指一种语言,已经代表与微软不同的另外一个巨大阵营,所以Java有时是指一种软件系统的流派,当然目前主要是.NET和Java两大主流体系。
J2EE可以说指Java在数据库信息系统上实现,数据库信息系统从早期的dBase、到Delphi/VB等C/S结构,发展到B/S(Browser浏览器/Server服务器)结构,而J2EE主要是指B/S结构的实现。
J2EE又是一种框架和标准,框架类似API、库的概念,但是要超出它们。如果需要详细了解框架,可先从
设计模式
开始学习。
J2EE是一个虚的大的概念,J2EE标准主要有三种子技术标准:WEB技术、EJB技术和JMS,谈到J2EE应该说最终要落实到这三个子概念上。
这三种技术的每个技术在应用时都涉及两个部分:容器部分和应用部分,Web容器也是指Jsp/Servlet容器,你如果要开发一个Web应用,无论是编译或运行,都必须要有Jsp/Servlet库或API支持(除了JDK/J2SE以外)。
Web技术中除了Jsp/Servlet技术外,还需要JavaBeans或Java Class实现一些功能或者包装携带数据,所以Web技术最初裸体简称为Jsp/Servlet+JavaBeans系统。
谈到JavaBeans技术,就涉及到组件构件技术(component),这是Java的核心基础部分,很多软件设计概念(设计模式)都是通过JavaBeans实现的。
JavaBeans不属于J2EE概念范畴中,如果一个JavaBeans对象被Web技术(也就是Jsp/Servlet)调用,那么JavaBeans就运行在J2EE的Web容器中;如果它被EJB调用,它就运行在EJB容器中。
EJB(企业JavaBeans)是普通JavaBeans的一种提升和规范,因为企业信息系统开发中需要一个可伸缩的性能和事务、安全机制,这样能保证企业系统平滑发展,而不是发展到一种规模重新更换一套软件系统。
至此,JavaBeans组件发展到EJB后,并不是说以前的那种JavaBeans形式就消失了,这就自然形成了两种JavaBeans技术:EJB和POJO,POJO完全不同于EJB概念,指的是普通JavaBeans,而且这个JavaBeans不依附某种框架,或者干脆可以说:这个JavaBeans是你为这个应用程序单独开发创建的。
J2EE应用系统开发工具有很多:如JBuilder、Eclipse等,这些IDE首先是Java开发工具,也就是说,它们首要基本功能是可以开发出JavaBeans或Java class,但是如果要开发出J2EE系统,就要落实到要么是Web技术或EJB技术,那么就有可能要一些专门模块功能(如eclipse需要lomboz插件),最重要的是,因为J2EE系统区分为容器和应用两个部分,所以,在任何开发工具中开发J2EE都需要指定J2EE容器。
J2EE容器分为WEB容器和EJB容器,Tomcat/Resin是Web容器;JBoss是EJB容器+Web容器等,其中Web容器直接使用Tomcat实现的。所以你开发的Web应用程序可以在上面两种容器运行,而你开发的Web+EJB应用则只可以在JBoss服务器上运行,商业产品Websphere/Weblogic等和JBoss属于同一种性质。
J2EE容器也称为J2EE服务器,大部分时它们概念是一致的。
如果你的J2EE应用系统的数据库连接是通过JNDI获得,也就是说是从容器中获得,那么你的J2EE应用系统基本与数据库无关,如果你在你的J2EE应用系统耦合了数据库JDBC驱动的配置,那么你的J2EE应用系统就有数据库概念色彩,作为一个成熟需要推广的J2EE应用系统,不推荐和具体数据库耦合,当然这其中如何保证J2EE应用系统运行性能又是体现你的设计水平了。
衡量J2EE应用系统设计开发水平高低的标准就是:解耦性;你的应用系统各个功能是否能够彻底脱离?是否不相互依赖,也只有这样,才能体现可维护性、可拓展性的软件设计目标。
为了达到这个目的,诞生各种框架概念,J2EE框架标准将一个系统划分为WEB和EJB主要部分,当然我们有时不是以这个具体技术区分,而是从设计上抽象为表现层、服务层和持久层,这三个层次从一个高度将J2EE分离开来,实现解耦目的。
因此,我们实际编程中,也要将自己的功能向这三个层次上靠,做到大方向清楚,泾渭分明,但是没有技术上约束限制要做到这点是很不容易的,因此我们还是必须借助J2EE具体技术来实现,这时,你可以使用EJB规范实现服务层和持久层,Web技术实现表现层;
EJB为什么能将服务层从Jsp/Servlet手中分离出来,因为它对JavaBeans编码有强制的约束,现在有一种对JavaBeans弱约束,使用Ioc模式实现的(当然EJB 3.0也采取这种方式),在Ioc模式诞生前,一般都是通过工厂模式来对JavaBeans约束,形成一个服务层,这也是是Jive这样开源论坛设计原理之一。
由此,将服务层从表现层中分离出来目前有两种可选架构选择:管理普通JavaBeans(POJO)框架(如Spring、
JdonFramework
)以及管理EJB的EJB框架,因为EJB不只是框架,还是标准,而标准可以扩展发展,所以,这两种区别将来是可能模糊,被纳入同一个标准了。 但是,个人认为:标准制定是为某个目的服务的,总要牺牲一些换取另外一些,所以,这两种架构会长时间并存。
这两种架构分歧也曾经诞生一个新名词:完全POJO的系统也称为轻量级系统(lightweight),其实这个名词本身就没有一个严格定义,更多是一个吸引人的招牌,轻量是指容易学习容易使用吗?按照这个定义,其实轻量Spring等系统并不容易学习;而且EJB 3.0(依然叫EJB)以后的系统是否可称为轻量级了呢?
前面谈了服务层框架,使用服务层框架可以将JavaBeans从Jsp/Servlet中分离出来,而使用表现层框架则可以将Jsp中剩余的JavaBeans完全分离,这部分JavaBeans主要负责显示相关,一般是通过标签库(taglib)实现,不同框架有不同自己的标签库,Struts是应用比较广泛的一种表现层框架。
这样,表现层和服务层的分离是通过两种框架达到目的,剩余的就是持久层框架了,通过持久层的框架将数据库存储从服务层中分离出来是其目的,持久层框架有两种方向:直接自己编写JDBC等SQL语句(如iBatis);使用O/R Mapping技术实现的Hibernate和JDO技术;当然还有EJB中的实体Bean技术。
持久层框架目前呈现百花齐放,各有优缺点的现状,所以正如表现层框架一样,目前没有一个框架被指定为标准框架,当然,表现层框架现在又出来了一个JSF,它代表的页面组件概念是一个新的发展方向,但是复杂的实现让人有些忘而却步。
在所有这些J2EE技术中,虽然SUN公司发挥了很大的作用,不过总体来说:网络上有这样一个评价:SUN的理论天下无敌;SUN的产品用起来撞墙;对于初学者,特别是那些试图通过或已经通过SUN认证的初学者,赶快摆脱SUN的阴影,立即开溜,使用开源领域的产品来实现自己的应用系统。
最后,你的J2EE应用系统如果采取上面提到的表现层、服务层和持久层的框架实现,基本你也可以在无需深刻掌握设计模式的情况下开发出一个高质量的应用系统了。
还要注意的是: 开发出一个高质量的J2EE系统还需要正确的业务需求理解,那么域建模提供了一种比较切实可行的正确理解业务需求的方法,相关详细知识可从UML角度结合理解。
当然,如果你想设计自己的行业框架,那么第一步从设计模式开始吧,因为设计模式提供你一个实现JavaBeans或类之间解耦参考实现方法,当你学会了系统基本单元JavaBean或类之间解耦时,那么系统模块之间的解耦你就可能掌握,进而你就可以实现行业框架的提炼了,这又是另外一个发展方向了。
以上理念可以总结为一句话:
J2EE开发三件宝: Domain Model(域建模)、patterns(模式)和framework(框架)。
推荐一套高质量的J2EE开源系统:
JPestore
如果初学者没有理解,欢迎
继续讨论
,大胆提出你心中的疑问。
参考文章:Java企业系统架构选择考量
Jdon Framework的服务调用命令模式实现
posted @
2006-08-25 15:23 摩西 阅读(168) |
评论 (0) |
编辑 收藏
不解风情的猪
|
2005-01-13 17:06
|
很多同志在学习新东西时候都是先讲究招式--如何快速入门!对任何语言来说,学习我感觉分三个步骤。第一:快速掌握语言的配置 环境等。对java尤其如此。第二:开始把自己以前用其他语言写的东西慢慢用新语言来实现。比如我以前是用ASP,后来因为某些原因用VB了,因为ASP是BS的,VB呢却是CS,如果快速进入VB殿堂?这需要来找规律。用了VB后发现VB也有很多东西实现起来比较复杂与繁琐,还有一些底层的不容易实现,我第一感觉就是转向其他的用其他来实现。比如RAD的话我选择用Delphi,系统底层的如钩子Hook 行置转换我会选择用C++,这样学习的过程进行不断总结并且自己给自己找事做,我相信很快利用第二个步骤把基础打扎实的。我在学习Delphi的时候是自己慢慢与VF和VB进行比较来学习的。现在学习NET和JAVA我同样是比较。把Delphi和Net比较,语言特性上,操作上等,并且把自己的Delphi一些认识在Net上进行比划一下。拿Net的类库和Java的比较。先进在哪里不足在哪里,这样下个步骤我就有的放矢。比如一个项目分布式的应用。必须有客户端,还有一些项目管理等。我会如何来做呢?我有了各种语言之间的差异比较后,然后思考一下就会拿出一个不错的方案。客户端的话我会采用Delphi来做,因为Delphi的开发周期的确比较短,再者我自己也积累了不少的资源,这样做起来也会游刃有余,选择C#也一样,不过就是对C#精致的类库还不能面面俱到的掌握。服务器端如果没有平台限制的话我当然会采用ASP。Net或者JAVA,因为做Web服务用这两个语言毕竟很不错。这样一个项目雏形就出来了。学习第三个步骤:学习规划。经历了以上几个步骤,个人认为就应该可以独当一面,但是人的进步则是逆水行舟不进退,当然成为高手后要什么我还不知道,因为我还没成为高手。 不管学习什么,都没有捷径,“唯手熟尔”是我的看法。只有把语言了然于胸了才可能下笔入神。我大致谈论一下JAVA的学习方法,针对其他应该一样。 要想学好Java,首先要知道Java的大致分类。我们知道,自从Sun推出Java以来,就力图使 之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就 是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件 的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主 要用于分布式的网络程序的开发,如电子商务网站和ERP系统。J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有 点深奥,而且一般开发者很难有开发环境。所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是 一两天的事。 那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉 了吗?然后再从JSP学起。如果你学过HTML,那么事情要好办的多,如果没有,那你快去补 一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。然后你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱 方式了,这种方式跟ASP又有什么区别呢?还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭 建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工 作都在设计和配置中间件上。至于JDBC,就不用我多说了,你如果用java编过存取数据库的 程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 好了,对Java和J2EE有了一些基本概念之后,你就应该编一些程序了,千万不要纸上谈兵 哦。最好找一些有实例且带光盘的书来看,这样看到好的程序就可以直接Ctrl+C再Ctrl+V, 也不用劳您老大架再亲自把它 再输一遍吧,再说直接复制还不用怕出错,何乐而不为呢! 还有就是要经常上一些好的Java编程文章,有好的文章要Cut下来,有问题尽管问,只要问 题不是太傻,一般高手都会回答你的。下面介绍几个好的Java方面的编程网站: CSDN论坛
http://www.csdn.net/
中国最有名的技术论坛,《程序员》杂志就是他们出版 的,你可以在上面提出问题,马上就有人回答你,如果你觉得好,你可以给那人加分; Java研究组
http://www.javaresearch.org/
上面有很多原创文章,高手还是挺多的; Java开发者
http://www.chinajavaworld.com/
那里Java资料比较全; java.com.cn
http://www.java.com.cn/
看这域名就知道有多牛,注册用户快接近一万了, 同时在线人数也在一千左右,人气很旺的; IBM的开发者网
http://www-900.ibm.com/developerWorks/cn/java/index.shtmlIBM
永远 的蓝色巨人;
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当 然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下 手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的 代码之外,可能再没有别的东西了吧!你现在最缺的是实际的工作经验,而不是书本上那些 凭空想出来的程序。所以你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼 职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦! 还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理, 考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起, 偶最近《金装四大才子》看多了)。学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术, 如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的 在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一 部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国 外软件的差距所在)。Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完 代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就 不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户 头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
http://www.jdon.com/
去下载,或到同济技术论坛的服务器
ftp://nro.shtdu.edu.cn
去 下,安装上有什么问题,可以到论坛上去提问。Pet Store.(宠物店)是SUN公司为了演示 其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。其实说这种话的人就如当年小日本号 称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨 架,却还没有学到Java的精髓。接下来你得研究设计模式了。设计模式是高级程序员真正掌 握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅 仅展示了接口或抽象类在实际案例中的灵活应用和智慧,让你能够真正掌握接口或抽象类的 应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗 旨:要让你的程序尽可能的可重用。关于设计模式的资料,还是向大家推荐banq的网站
http://www.jdon.com/
,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真 是经典中的经典。有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只 要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精 心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧,你 可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项 目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡 献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分 散在各地却同时开发同一个软件,是不是很有意思呢? 下面介绍两个好的开源项目网站: 湖北省软件公共开发平
http://gro.clinux.org/
共创联
http://cosoft.org.cn/
哇,好高兴哦,我终于成为高手了!非也,非也。古人云:“识时务者为俊杰”。你知道计算机界现在的发展形势吗?你知道微软的.NET蓝图和SUN ONE计划之间的明争暗斗吗?你知道计算机技术将向何处发展吗?其实从各大计算机厂商最近的动作,都可以看出来“Web服务将 是下一代互联网应用的制高点”,而微软的.NET蓝图和SUN ONE计划的斗争焦点,也就是Web 服务。Web服务就是一个崭新的分布式计算模型,它是一系列标准的综合 (XML,SOAP,UDDI,WSDL和WSFL等)。它使得不同语言编写的软件能够轻易的集成起来,使网 络资源和Web站点变成一种服务而不是混乱的垃圾场。不远的将来,我们就可以在家里点击 一下鼠标,就可以完成出门旅游的全部准备工作,包括定飞机票,定旅游线路,定好房间 等。请注意,这所有的一切都是Web站点间自动完成的,再也不用象现在一样,表面上是电 子商务,实际上很多环节都是人工操作。也许你会觉得这是天方夜谈,不过就近的说,你也 很有可能承接一个项目,要集成两个企业的ERP系统。很有可能上游企业的系统是用Dephi编 的,而下游企业的系统是用Java编的。你说你是Java高手,大家都看者你怎么做呢。所以 啊,你还得学习新技术,如Web服务,而且你Dephi也要懂一点吧(Dephi6现在已经提供Web 服务的控件了)。 你编的Java系统,可能要和.NET集成,所以你.NET要懂一点吧?到最 后,你可能发现你已经成为Java高手了,但很多时间却在搞别的技术。太极张三丰里说,最 厉害的招式就是没有招式,可能就是这个道理吧! 因为刚刚兴起,所以网上Web服务的资料不是很多,我还是给大家推荐几个网站吧: 中国UDDI技术联
http://www.uddi-china.org/
CSDN的柴晓路专
http://www.csdn.net/develop/author/ColumnAuthor/fennivel/
(注: 柴晓路也是互联网上一个有名的人物,他发表过很多关于Web服务的文章,还出了一书,应 该称的上是中国Web服务技术的先行者) IBM的开发者网络的XML&Web Service专栏:
http://www-900.ibm.com/developerWorks/cn/xml/index.shtml?csdnIBM
可是Web服务的力推者 呜…你费劲千心万苦,总算成为Java高手了,怎叫人不由喜极而泣呢!是啊,真不容易,真 不简单,真叫人感动啊!
|
posted @
2006-08-25 13:01 摩西 阅读(363) |
评论 (0) |
编辑 收藏
1.新建一个"swt/jface"项目
2.新建designer application Window文件
3.在可视界面加入MenuBar
4.再加入一个SubMenu名为File
5.分别加入两个Menuitem 取名分别为OPen 和Quit
6.导入一个文本Text,并且Lines为Multi
7.分别双击OPen 与Quit ,这样就注册了事件处理方法"WidgetSelected"的SelectionListener监听器.出现如下代码.
8.分别加入代码:
openMenuItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
FileDialog fd = new FileDialog(shell, SWT.OPEN);
String s = fd.open();
if (s != null && !s.equals("")) {
FileReader fr;
try {
fr = new FileReader(s);
BufferedReader br = new BufferedReader(fr);
String s1 = br.readLine();
while (s1 != null) {
text.append(s1 + "\n");
s1 = br.readLine();
}
br.close();
fr.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
});
quitMenuItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
shell.close();
}
});
9.运行结果如下:
posted @
2006-08-25 12:21 摩西 阅读(304) |
评论 (0) |
编辑 收藏
1.先安装SWT Designer插件.
2.新建SWT/JFace项目
3.在可视窗口中Design中,进行增加如下组件.
4.各选中文本组件在Events属性中选中事件处理类型verity->text 并双击后面区域,这样将到它进行监听注册.
5.选中事件处理类型Selection->widgetselected并双击后面区域,这样将到它进行监听注册.
6.双击提交后进入代码编辑界面,输入代码:
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent e) {
String sname = name.getText();
String spwd = pwd.getText();
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(
"jdbc:odbc:test", "", "");
Statement stmt = con.createStatement();
ResultSet rs = stmt
.executeQuery("select * from userid where name='"+sname+"'and psw='"+spwd+"'");
if (rs.next()) {
MessageDialog.openInformation(shell, "",
"谢谢你的登录!你是合法用户!");
} else {
MessageDialog.openInformation(shell, "",
"请你正确登录!用户名或密码不正确!");
}
rs.close();
stmt.close();
con.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
});
7.运行如下:
8.如下为数据库设计,当然要在这个项目之运行之前设计好!
对新手一定是绝好的教程哦
posted @
2006-08-25 09:08 摩西 阅读(722) |
评论 (0) |
编辑 收藏
目录列示器
本实例演示如何得到一个目录下的所有文件列表
.
1.
这里利用了
DirFilter
实现了
FilenameFilter
接口
,
因此必须继承
accept
的方法
.
2.
用到了匹配字符序列与正则表达式指定模式的类
Matcher,Pattern
所以要
java.util.regex
引入
.
实例程序
:
package javaio;
import java.io.*;
import java.util.*;
import java.util.regex.*;
public class DirList {
public static void main(String[] args) {
File path = new File("c:/");
String[] list;
if(args.length == 0){
list = path.list();
}
else{
//
这里将输入的参数作为过滤因子
list = path.list(new DirFilter(args[0]));
}
for(int i = 0; i < list.length; i++){
System.out.println(list[i]);
}
}
}
class DirFilter implements FilenameFilter {
private Pattern pattern;
public DirFilter(String regex) {
pattern = Pattern.compile(regex);
}
public boolean accept(File dir, String name) {
//
判断名为
name
的文件是不是符合过滤条件
return pattern.matcher(new File(name).getName()).matches();/*matches()
尝试将整个区域
/
与模式匹配。
new File(name).getName()
得到
String
类的
name*/
}
}
运行结果
:
posted @
2006-08-24 19:29 摩西 阅读(223) |
评论 (0) |
编辑 收藏
本实例演示
util
包中类
Calendar
的使用
Clendar
类是一种日期处理类
,
可以想像它是一个挂在墙壁上的典型日历
,
有许多日期和页数翻阅
.
1.
Clendar
类的变量域的概念
.
每个元素都是域
,
并且这些域在
Clendar
类中表现为静态变量
.
这些变量域
,
可能通过
get/set
类方法获得或者设置域值
.
[Calendardemo.java
代码
]:
import java.util.*;
public class Calendardemo {
public static void main(String[] args) {
//
创建一个日历对象
Calendar calendar = Calendar.getInstance();
//
用当前时间初始化日历对象
calendar.setTime(new Date());
String year = String.valueOf(calendar.get(Calendar.YEAR));
String month = String.valueOf(calendar.get(Calendar.MONTH) + 1);
String date = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));
String day = String.valueOf(calendar.get(Calendar.DAY_OF_WEEK) - 1);
int hour = calendar.get(Calendar.HOUR);//
以
12
小时制
int hour_1 = calendar.get(Calendar.HOUR_OF_DAY);//
以
24
小时制
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
//
输出结果
System.out.println("year= " + year);
System.out.println("month= " + month);
System.out.println("date= " + date);
System.out.println("day= " + day);
System.out.println("hour= " + hour);
System.out.println("hour1= " + hour_1);
System.out.println("minute= " + minute);
System.out.println("second= " + second);
System.out.println("
现在时间是:
");
System.out.println(" " + year + "
年
" + month + "
月
" + date + "
星期
" + day);
calendar.set(1983, 7, 21);//
将日历翻到某个时间.
7
表示八月
long time1983 = calendar.getTimeInMillis();//
返回当前时间,作为从开始时间的
UTC
毫秒值
calendar.setTime(new Date());//
将日历翻到现在这个时间.
long time2006 = calendar.getTimeInMillis();
long interdays = (time2006 - time1983) / (1000 * 60 * 60 * 24);
System.out.println("
现在和
1983.8.21
相隔
" + interdays + "
天
");
}
}
注意
:
应该以静态方式访问静态字段
Calendar.year
运行结果
:
posted @
2006-08-24 19:28 摩西 阅读(694) |
评论 (0) |
编辑 收藏
摘要: 实现
java web
页面的登录验证
本案例中的程序主要通过
java jdbc-odbc
驱动连接
sql2000
数据库
,
并依据数据库中的用户表信息验证客户端登录请求提交的用户名和密码
.
1.
...
阅读全文
posted @
2006-08-23 14:57 摩西 阅读(3884) |
评论 (3) |
编辑 收藏
插件名称:
SQLExplorer
插件分类:
SQL Editor
插件版本:
2.2.4
插件介绍:
SQLExplorer是Eclipse集成开发环境的一种插件,它可以被用来从Eclipse连接到一个数据库。SQLExplorer插件提供了一个使用SQL语句访问数据库的图形用户接口(GUI)。通过使用SQLExplorer,能够显示表格、表格结构和表格中的数据,以及提取、添加、更新或删除表格数据。SQLExplorer同样能够生成SQL脚本来创建和查询表格。所以,与命令行客户端相比,使用SQLExplorer可能是更优越的选择。
安装条件:
eclipse-SDK-3.1.2-win32
http://mirrors.nsa.co.il/eclipse/eclipse/downloads/drops/R-3.1.2-200601181600/eclipse-SDK-3.1.2-win32.zip
Microsoft SQL Server 2000 Driver for JDBC Service Pack 3 (microsoft 微软官方 sqlserver2000 jdbc驱动)安装
SQLExplorer_2.2.4
http://puzzle.dl.sourceforge.net/sourceforge/eclipsesql/net.sourceforge.sqlexplorer_2.2.4.zip
一、安装SQLExplorer插件
在这里用link方式来安装SQLExplorer插件,将下载下来的net.sourceforge.sqlexplorer_2.2.4.zip包,解压缩到比如D:\eclipseplugins目录,将net.sourceforge.sqlexplorer_2.2.4目录重新命名为:sqlexplorer_2.2.4目录,改成如下目录结构:D:\eclipseplugins\sqlexplorer_2.2.4\eclipse\plugins\net.sourceforge.sqlexplorer_2.2.4,然后在比如:D:\eclipse-SDK-3.1.2\links新建一个sqlexplorer_2.2.4.link文件,这文件指向sqlexplorer_2.2.4插件所在的目录,也就是D:\eclipseplugins\sqlexplorer_2.2.4目录,重新启动Eclipse,就可以看到sqlexplorer插件了,若没看到,请在eclipse启动参数加上参数-clean,即eclipse.exe -clean,就可以了!如图
在Eclipse中“Window->preferences...“检查sqlexplorer是否安装成功,
二、使用SQLExplorer插件
SQLExplorer通过JDBC连接数据库的,包括Oracle、SQLServer、MySQL等流行的关系数据库,因此为了便于加深理解和使用,本例子建立一个从Eclipse到SQL Server2000数据库的JDBC连接,接着将在SQLExplorer图形SQL客户端提取和显示示例数据。
上一节介绍了安装SQLExplorer,接下来在使用SQLExplorer前需要配置,启动Eclipse后,打开SQLExplorer视窗,在Eclipse中集成环境中单击”Open perspective“->”Other...“按钮来打开一个视窗,选择SQLExplorer插件,如图:
就将看到SQLExplorer视窗显示在Eclipse左边中,Drivers标签显示了不同的数据库驱动,它们用来连接不同的数据库,现在可用的数据库包括DB2、Oracle、Sybase、HSQLDB、SQLServer和PostgreSQL,针对SQLServer来配置SQLExplorer,为了配置SQLServer驱动,右击Microsoft MSSQL Server JDBC Driver结点,并且选择 Change the selected Driver,如图
在 Modify driver框中,选择 Extra Class Path 标签,并且单击 Add 按钮将SQLServer驱动.jar文件添加到类路径中,下图显示将SQLServer的JDBC驱动加到 Eclipse 的类路径中。将 Driver 栏中的Example URL改成jdbc:microsoft:sqlserver://server-name:1433,这里的server-name指的是SQLServer服务器名称,比如连接本地数据库改成jdbc:microsoft:sqlserver://localhost:1433即可。
底下的Driver Class Name不需要改,采用默认值即可,如图
若要连接MS SQL Server数据库并提取其中的表格,需要为连接建立一个别名,一个连接的别名说明了连接设置,JDBC驱动、URL、用户名和密码。在SQLExplorer视窗中选择 Aliases 标签,单击“Create new Aliases”按钮来创建一个新的别名,如图
在“Create new Aliases”框中,指定一个别名,选择“Microsoft MSSQL Server JDBC Driver”来为MS SQL Server数据库创建一个别名。在 URL 域中指定数据库的连接 URL,如:jdbc:microsoft:sqlserver://localhost:1433,下图展示了MS SQL Server别名的设置,
以上操作将一个MS SQL Server别名加入到 Aliases标签中,如图所示,若要修改一个别名,右键点击别名结点并选择“Change the selected Alias.”
MS SQL Server别名用来连接到 SQL Server数据库并且从中提取数据,要打开数据库连接,右击MS SQL Server别名结点并选择“Open...”,如图
在 Connection框中,指定登录到 SQL Server数据库使用的用户名和密码,然后点击“OK”按钮,下图展示了登录的设置,缺省情况下,对于 sa用户不需要密码
一个与SQL Server数据库的JDBC连接建立起来了,一旦连接上了,Eclipse就会显示SQL Server数据库中不同的数据库模式,如图
以上完成了对 SQL Server数据库的配置和连接了。
对其他数据库的支持
这个JDBC连接的例子是关于配置与SQL Server数据库连接的,通过在 Drivers标签中为数据库选择合适的驱动,可以配置与其他数据库的JDBC支持,只需为选定的数据库指定驱动类和连接URL,就可以配置与该数据库的JDBC连接,以下列出的是其他数据库的驱动类、连接URL和.jar文件。
DB2
Driver Class:com.ibm.db2.jdbc.app.DB2Driver
Connetion URL:jdbc:db2:<database>
Driver .jar/.zip:db2java.zip
Sybase
Driver Class:com.sybase.jdbc2.jdbc.SybDriver
Connetion URL:jdbc:sybase:Tds:<host>:<porl>/<database>
Driver .jar/.zip:jconn2.jar
Oracle
Driver Class:oracle.jdbc.driver.OracleDriver
Connetion URL:jdbc:oracle:thin:@<host>:<porl>:<sid>
Driver .jar/.zip:classes12.zip
PostgreSQL
Driver Class:org.postgresqlDriver
Connetion URL:jdbc:postgresql://<server>:<port>/<database>
Driver .jar/.zip:postgresql.jar
MySQL
Driver Class:com.mysql.jdbc.Driver
Connetion URL:jdbc:mysql://<server>:<port>/<database>
Driver .jar/.zip:mysql-connector-java-3.0.16-ga-bin.jar
以上列表中,<database>是指数据库实例,<port>是数据库连接端口,<sid>是数据库的SID,<server>是数据库服务器。
访问数据库数据
现在我们将从示例库pubs中的示例表employee提取数据,如果是从一个命令行SQL客户端访问数据库,则使用如下命令来提取数据:
SQL>SELECT * FROM employee
这将以文本表的形式显示数据,使用图形SQL客户端SQLExplorer,数据将以结构表的形式显示,SQLExplorer同样也会生成创建表和从中提取数据的SQL脚本,如果使用DESC命令在一个命令行客户端中显示表格的结构,只有列名、列数据的类型、列数据的长度大小以及非空的值会被显示,有了SQLExplorer,索引、主键和外键值都会被显示
在Eclipse的SQLExplorer视窗中选择Database Structure View标签,为了显示表employee的结构,在Database Structure View中选择“Database->pubs->TABLE->employee”结点,下图显示了表employee的结构,
Columns标签显示了下表中列出的列:
为了显示选中的表格中的数据,请选择 Preview 标签。图中显示了表 employee中的数据。关于表格的其他的信息分别在 Indexes, Primary Key, Foreign Key 和 Row Count 标签中显示。
若想得到创建表格的 SQL 脚本,右击表结点并且选择“ Create Table Script”,如图所示,
如下图所示,这将生成创建被选表格的SQL脚本,并将其显示在SQLExplorer视窗中的SQL Editor中
Database Structure View的“Preview”标签中的数据是使用缺省的 Select 查询提取的,它包括了表格中所有的列。要想显示缺省的 Select 查询语句,右击表结点并且选择“Generate Select in Sql Editor”,如图所示
下图所示,SQL Editor中显示了从表employee中提取数据的缺省查询语句。注意:显示在 SQL Editor 中的 SELECT 查询语句的结尾没有分号(;)
通过以上SQL Editor可以运行select语句,同样也可以运行update语句、delete语句等,都可以比较好执行程序。
通过在 Eclipse 中配置 SQLExplorer 插件,该集成开发环境获得了图形用户界面(GUI)较之命令行客户端的许多优点。
对SQLExplorer 插件感兴趣的开发人员可以试一试,相信对您有很大的帮助!
总结
例子中,我们与MS SQL Server 数据库建立了一个 JDBC 连接,并访问其中的一个示例数据库。SQL Explorer 同样可以被用来配置与其他数据库的连接,包括 DB2, Sybase, Oracle, HSQLDB, SQL Server 和 PostgreSQL。
注意:在一开始要确保,sql2000与jdbc驱动都能正常运行! 可以先用dos: telnet localhost 1433 测试下1433端口是否可用.
posted @
2006-08-22 16:29 摩西 阅读(272) |
评论 (0) |
编辑 收藏
JDBC是Java DataBase Connection的简称,是一种用java实现的数据库接口技术,是开放数据库ODBC的java实现.这里我要说的是JDBC连接sql2000中的一些问题.
SQL2000配置
1.安装好sql2000,启动后,进dos命令 telnet localhost 1433 测试一下sql2000接口端口能否可用,如果进入了全黑的界面,那就恭喜你了,sql2000传输端口可用! 否测出现 ...不能打开主机的连接,在端口1433:连接失败 则要给sql2000打补丁了.
2.先安装sql2000 sq3, 再安装sql2000 sq4 .(各约50M)重启后 测试端口OK!!!
JDBC驱动配置
3.下载并安装Microsoft SQL Server 2000 Driver for JDBC Service Pack 3 (2.29M)
Eclipse 平台配置
4.新建一个Java项目 Connect_demo 下一步界面中选择库->添加外部JAR->添加msbase.jar;mssqlsever.jar;mstil.jar三文件(在jdbc的安装目录lib中可以找到!)OK进入下一步.确定.
5.新建类ConnectAccess.java 写入代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class ConnectAccess {
public static void main(String[] args) {
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs","sa","");
Statement stmt =con.createStatement();
ResultSet rs =stmt.executeQuery("select fname,minit,lname from employee");
while (rs.next()){
System.out.print("\t fname:"+rs.getString(1));
System.out.print("\t minit:"+rs.getString(2));
System.out.print("\t lname:"+rs.getString(3));
System.out.println();
}
rs.close();
stmt.close();
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
6.保存ConnectAccess.java并运行于java应用程序.
7.OK成功了!!
posted @
2006-08-22 15:05 摩西 阅读(1905) |
评论 (2) |
编辑 收藏
package connection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class ConnectionAccess {
public static void main(String[] args) {
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:employee","","");
Statement stmt =con.createStatement();
ResultSet rs =stmt.executeQuery("select fname,minit from employee");
while (rs.next()){
System.out.print("\t fname:"+rs.getString(1));
System.out.print("\t minit:"+rs.getString(2));
System.out.println();
}
rs.close();
stmt.close();
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
posted @
2006-08-22 13:07 摩西 阅读(720) |
评论 (1) |
编辑 收藏
http://tianhb.blogchina.com/1134569.html
posted @
2006-08-21 12:37 摩西 阅读(124) |
评论 (0) |
编辑 收藏