帐前卒专栏

code, software architect, articles and novels.
代码,软件架构,博客和小说

  1. Everyone has a chance.
    每一个人都有机会,不代表机会平等。资本家的女儿可以从成千上万的巧克力中得到金纸片,而小查理的钱只能买到3块巧克力。有的机会多多,有的机会少少。
  2. hold on the chance if it is difficult to get.
    有些机会稍纵即逝,有些却可以经过自己的努力得到。小查理得到金纸片,也可以用它来换取金钱。
    最后还是决定去神秘的工厂参观,毕竟那个机会是从上亿块巧克力中抽到的五张金纸片中的一张,而相对于得到金钱的机会更加难得。

今天项目完工。
做了个j2ee项目的移植,虽然没有写什么核心代码,不过也在项目移植的过程中学到不少东西。
如怎样从oracle数据库迁移到mysql,怎样从weblogic迁移到jboss。虽然网上有很到的移植办法。但是很多都不好用。还有很多是错误的。例如jboss与mysql连接那一个地方,如果是使用一个数据源的话不如这样改:
将jboss-4.0.0/docs/examples/jca中的mysql-ds.xml复制到jboss-4.0.0/server/default/deploy
然后将下面的配置copy过去

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="UTF-8"?>  

<!-- $Id: mysql-ds.xml,v 1.3 2004/09/15 14:37:40 loubyansky Exp $ -->
<!--  Datasource config for MySQL using 3.0.9 available from:
http://www.mysql.com/downloads/api-jdbc-stable.html
\-->

<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-
url>jdbc:mysql://localhost:3306/user?useUnicode=true&amp;characterEncoding=GBK
</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>123</password>

<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional)
-->
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>

</datasources>

jboss-4.0.0/server/default/conf改动login-config.xml
添加下面的语句:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<application-policy name = "MySqlDbRealm">  
<authentication>
<login-module code =
"org.jboss.resource.security.ConfiguredIdentityLoginModule"
flag = "required">
<module-option name ="principal"></module-option>
<module-option name ="userName">root</module-option>
<module-option name ="password">123</module-option>
<module-option name ="managedConnectionFactoryName">
jboss.jca:service=LocalTxCM,name=MySqlDS
</module-option>
</login-module>
</authentication>
</application-policy>

在程序中写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

try
{
Context context = new InitialContext();
ds = (DataSource)context.lookup("java:/MySqlDS");
conn = ds.getConnection();
conn.close();
}
catch(Exception e)//NamingException e)
{
ds =null;
conn = null;
}
而且(EJB)每一个执行sql的函数中都要这样写
try
{
conn = ds.getConnection();
.............
conn.close();
}

因为jboss会自动关闭数据库的连接
所以调用一次EJB中的数据库操作就要打开一次数据库。虽然这样很费时间,但很节约资源。
否则就会有close a connection的jboss提示和sql语句执行异常。

在google中输入:oracle到mySql迁移
点第10页,点19页
点到28页会在下面显示27页而且没有下一页的标志。点26页,再点35页会显示33页。
如果可以看到后面的页,继续往下点击。一定会有点击的页数和显示的页数不一样的时候。。。。
不知道这是不是Google的小bug

首先装一个mysql的驱动程序:mysql-connector-odbc-3.51.12-win32.zip 解压点击setup即可,可能会碰到与java运行时有冲突,点击yes即可。

下一步下载一个mysql-connector-java-3.1.11-bin.jar,把它放在java-sdk的lib库里。

在管理工具的odbc数据源里用户DSN选项卡里添加:mysql odbc 3.51

Driver在connector中login选项卡添加:

1
2
3
4
5
6
7
8
9
10
DataSourceName:user(这里是程序要使用到的名字)

server:localhost

user:root

password:123

Database:user(这里的名字要和mysql中的要使用的数据库名字一样)

点击TEST,测试成功后点确定即可…

写如下程序进行测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public static void main(String[] args)  
{
Connection connection = null;
Statement statement;
ResultSet resultSet;
// 加载驱动程序以连接数据库
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//这个驱动不能是其他的..
connection = DriverManager.getConnection("jdbc:odbc:user","root","123");
//user是data Source ,root是用

//户名,123是进入mysql的密码
System.out.println("open easy");
String query = "Select * from userrole";
statement = connection.createStatement();
resultSet = statement.executeQuery( query );
connection.close();
System.out.println("close easy");

}
// 捕获加载驱动程序异常
catch ( ClassNotFoundException cnfex )
{
System.err.println(
"装载 JDBC/ODBC 驱动程序失败。" );
cnfex.printStackTrace();
System.exit( 1 ); // terminate program
}
// 捕获连接数据库异常
catch ( SQLException sqlex )
{
System.err.println( "无法连接数据库" );
sqlex.printStackTrace();
System.exit( 1 ); // terminate program
}
catch (Exception e)
{
System.out.println(e.toString());
}
}

在运行中输入:net start mysql以启动mysql服务

运行程序测试即可。

Jex16.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>
<TITLE> Pictures Test3</TITLE>
</HEAD>
<script language="javascript">
var imageList = new Array;
for (var i = 0; i < 5; i++) {
imageList[i] = new Image;
imageList[i].src = "winxpaa1" + i + ".jpg";
}

function slide(num) {
document.slidePicture.src = imageList[num].src;
num = Math.floor(Math.random() * imageList.length);
//don't worry about run out of the array.
window.setTimeout("slide(" + num + ")", 1000);
}

function testPicture() {
var result = true;
for (var i = 0; i < imageList.length; i++)
result = (result && imageList[i].complete);
if (result) {
slide(0);
} else
window.setTimeout("testPicture()", 1000);
}
</script>

<BODY onload="testPicture()">
<img src=winxpaa10.jpg name="slidePicture">

</form>
</BODY>

</HTML>

Jex17.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>

<HEAD>
<TITLE> New Document </TITLE>

</HEAD>

<BODY>
<script language="javascript">
var defaultImage = new Image;
defaultImage.src = "winxpaa10.jpg";
var rolledImage = new Image;
rolledImage.src = "winxpaa11.jpg";
var url = " [ http://www.baidu.com/ ](http://www.baidu.com/) ";
</script>
<!--<a href = " [ http://www.baidu.com/">baidu</a
](http://www.baidu.com/">baidu</a) >
<br>
<a href = "#" onMouseOver = "document.A.src = rolledImage.src" onMouseOut =
"document.A.src = defaultImage.src">rolled</a>
<br>\-->
<br>
<br>
<map name="Imagemap">
<area shape="rect" coords="0,0,100,200" onMouseOver="document.A.src =
rolledImage.src;document.B.src = rolledImage.src" onMouseOut="document.A.src
= defaultImage.src;document.B.src = defaultImage.src">
</map>
<br>
<br>
<img src="winxpaa10.jpg" name="A" width=100 height=100 useMap="#Imagemap">
<img src="winxpaa11.jpg" name="B" width=100 height=100 useMap="#Imagemap">
<img src="winxpaa13.jpg" name="C" width=100 height=100 useMap="#Imagemap">
</BODY>

</HTML>

Jex18.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>

<HEAD>
<TITLE> New Document </TITLE>

</HEAD>

<BODY>
<form name="A">
Enter you code:
<input type="text" onChange="window.alert(this.form.txt.value)" name="txt">
<br>
<!-- for test  "this"
<input type = "text" onChange = "window.alert(this.form.text.value)" name =
"tddt">
<br>
<input type = "text" onChange = "window.alert(this.A.tet.value)" name = "tet">
\-->
<select name="choose" onChange="changeTwo(this.form.choose)">
<option value="One">1</option>
<option value="Two">2</option>
</select>
<a href="#" onClick="alert(document.A.choose.value)">ddd</a>
<br>
<a href="#" onClick="change(document.A.choose)">change</a>
<script language="javascript">
document.A.choose.length++;
document.A.choose.options[document.A.choose.length - 1].text = "3";
document.A.choose.options[document.A.choose.length - 1].value = "ddd";

function change(list) {
for (var i = 0; i < list.length; i++) {
list.options[i].text = i + 3;
list.options[i].value = i;
}
}

function changeTwo(list) {
if (list.selectedIndex == 1) {
change(list);
}
}
</script>
</form>
</BODY>

</HTML>

Jex19.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>

<HEAD>
<TITLE> New Document </TITLE>

</HEAD>

<BODY>
<input type="Radio" name="A" value="F">yse<br>
<input type="Radio" name="A" value="Y" Checked>yfe<br>
<input type="Radio" name="A" value="F">ye<br>
<input type="Radio" name="B" value="Y">ye<br>
<input type="Radio" name="B" value="Y">ye<br>
</BODY>

</HTML>
Jex20.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>

<HEAD>
<TITLE> New Document </TITLE>
</HEAD>

<BODY onLoad="first(document.myForm.secondSelect);">
<form name="myForm" onClick="first(document.myForm.firstSelect)">
<select name="firstSelect" onChange="upDate(this.form);">
<option value="1">First Choice</option>
<option value="2">Second Choice</option>
</select>
<br>
<select name="secondSelect">
</select>
</form>
<script language="javascript">
function first(list) {
list.length = 3;
for (var i = 0; i < list.length; i++) {
list.options[i].text = "first" + i + 3;
list.options[i].value = i;
}
}

function second(list) {
list.length = 3;
for (var i = 0; i < list.length; i++) {
list.options[i].text = "second" + (i + 3);
list.options[i].value = i;
}
}

function upDate(thisForm) {
if (thisForm.firstSelect.selectedIndex == 0) {
first(thisForm.secondSelect);
} else {
second(thisForm.secondSelect);
}
}
</script>

</BODY>

</HTML>

有两天没有看它了。。。。主要原因是在不停的重装系统。郁闷的度过了两天。。。。

下面是关于javascript的继续学习:

Tips:

图片转换思想:

  1. javascript中有各种图片的源.
  2. 有转换图片的函数.(可以设置时间启动);将html中的<img>标记的图片替换掉.
  3. 在html中有<img>标记.name要设置.或者可以在script中写入.
1
window.setTimeout("slide("+num+")",1000);

当出现这句话时,不要在再上边添加一些立即触发的动作.这样会出现脚本错误…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function testPicture()  
{
var result = false;
for(var i = 0; i < imageList.length; i++)
result = (result || imageList[i].complete);////这里用于检测图片是否加载完成
当然这里imageList中每一个元素都必须是Image类型的.
if(result)
{
slide(0);
}
else
window.setTimeout("testPicture()",1000);
}

TipS:

动态的为动态,静态的为静态.

1
<img src = "winxpaa10.jpg" name = "A" width = 200 height = 200>

这里的src="winxpaa10.jpg"其中 winxpaa10.jpg必须是静态的字符串
如果改为defaultImage.src就显示不出来了.

1
2
<a href = "#" onMouseOver = "document.A.src = rolledImage.src" onMouseOut =
"document.A.src = defaultImage.src">rolled</a>

这里的onMouseOver onMouseOut 都是触发的事件,可以是动态的.如果改为:

1
2
3

<a href = "#" onMouseOver = "winxpaa11.jpg" onMouseOut =
"winxpaa10.jpg">rolled</a>

就会出未定义的错误.

1
2
3
4
5
6
7
8
9
10
11
12
<map name="Imagemap">做成图片组
<area shape="rect" coords="0,0,100,200"
onMouseOver="document.A.src = rolledImage.src;document.B.src = rolledImage.src" onMouseOut="document.A.src = defaultImage.src;document.B.src =
defaultImage.src">这里可以加任意多的语句.
</map>
<br>
<br>
<img src="winxpaa10.jpg" name="A" width=100 height=100 useMap="#Imagemap">与Imagemap绑定
<img src="winxpaa11.jpg" name="B" width=100 height=100 useMap="#Imagemap">
<img src="winxpaa13.jpg" name="C" width=100 height=100 useMap="#Imagemap">


onMouseOut = "document.A.src =
defaultImage.src;“这一条看似是传一个字符串给onMouseOut,但实际过程是执行了”“里的一句代码.
也就是说”“中还可以使用一次字符串.
window.setTimeout(“testPicture()”,1000);而这里就是单纯的传如字符串给setTimeout();这里”"中不能再使用字
符串.

注意:

1
2
3
4
<form name="A">
Enter you code:
<input type="text" onChange="window.alert(document.A.txt.value)" name="txt">
</form>

这里的document.A.txt.value可以用this.value代替。也可以用this.form.txt.value来代替。
但不能用this.form.text.value或this.A.text.value代替
this指的的是当前的控件句柄。所以form的name不能命名为this
其他控件也不能为this…这在命名上一定要注意

1
2
3
4
document.A.choose.length++;用于增加新的选择项。  
document.A.choose.options[document.A.choose.length-1].text = "3";
document.A.choose.options[document.A.choose.length-1].value = "ddd";

1
2
<a href = "#" onClick = "change(document.A.choose)">change</a>动态改变选项标签内容

被调用的函数

1
2
3
4
5
6
7
8
9
10
function change(list)  
{
for(var i=0; i<list.length; i++)
{
list.options[i].text = i+3;
list.options[i].value = i;
}
}


TipS:

只要是标签就是一个对象,是一个对象就可以调用javascript函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<input type = "Radio" name = "B" value="Y">ye<br>这里的name是分组名字

<input type = "Radio" name = "A" value="Y">ye<br>不是同一组的可以被同时选中。在同一组的一定不能被同时选中
<input type = "Radio" name = "A" value="Y" Checked>yfe<br>页面加载的时候就已经选中此项

function first(list)
{
list.length = 3;
for(var i=0; i<list.length; i++)
{
list.options[i].text = "first"+i+3;/// 这里结果为first03等。也就是说都转换成了字符串然后再相加。
/////如果"first"+(i+3)则先执行算术加法。
list.options[i].value = i;
}
}

Tips:
当两个对象处在并列的位置。这其中一个对象可以通过找到共同父对象然后再对另一个对象进行操作

1
2
3
4
5
6
7
<input type = "Radio" name = "A" value="Y"
Checked>yfe<br>如果将input看为一个类的话。type,name等都是类中的成员变量。而<input type = "Radio" name
= "A" value="Y" Checked onClick =
"first(document.myForm.firstSelect)">一个就是一个对象。onClick =
"first(document.myForm.firstSelect)"就是对象的一个方法。first()就是方法中的内容。


Question:配置错误。

说明:

在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。

分析器错误信息 :

在应用程序级别以外使用注册为 allowDefinition='MachineToApplication' 的部分是错误的。导致该错误的原因可能是在IIS中没有将虚拟目录作为应用程序进行配置。

Answer 解决方案:

在网上没有找到现成的答案。自己动手解决了引起它的一个原因。

在管理工具->Internet信息服务中网站->默认网站点右键:

新建->虚拟目录

点击下一步,输入一个别名a点击下一步,把自己项目所在的路径填上,允许权限随便填填即可,点击下一步,OK。

工程中往往出现的事情是全组都没有预料到的。
比如:一个程序块无法实现。或者一个程序块与已经编写的程序块无法连接到一起。这就要求项目管理者要马上做出选择,
要么马上放弃该功能模块,要么马上利用另外的可以实现的功能模块做替代。
这也要看该功能在一个系统中是处于什么位置的。
如果是核心代码。我认为一定要首先开发。否则这个系统就不在是原来设想的系统了,可能面目全非。不妨将这套系统重新改名。
如果该功能并不能影响最主要的功能,或者影响不大。我个人认为还是舍弃。留下时间给优先级更高的代码。
同时我认为应该首先进行设计,包括整个系统的体系结构、界面设计。特别是做出的系统设计要让组里的所有人知道,了解掌握。不能有任何人在设计未完成之前进行编程,即使
是自己熟悉的代码。
首先要完成体系结构的设计。只有完成了这个设计后才能让组内所有人知道你的意图。知道这系统到底要实现什么功能。要掌握什么样的知识。然后再进行界面设计。
在界面设计中一定要设计的精巧,即使是陌生用户也能一眼看出每一个图标按钮的用意。最后不要使用体系结构的层次来划分界面。要符合用户的操作习惯。设计完成后要让所有
人知道,让组内成员帮助改进。这要花至少一个月的时间。其余人可以利用这些时间看书学习。
如果是利用VC的话,可以让界面设计者将所有的界面全部实现。然后让编程者拿到设计界面的副本,在设计好的界面上进行编程。
在具体编程时一定会有难以实现的功能块。解决方法一是上网查,二是在书上查,三是到网上发帖。我个人认为到网上发帖具有针对性,
上网查快捷。到书上查是最后的路。不过要有编程时间期限,给一定的时间让编程者自己评估这段代码需要花费多少时间,能不能实现。然后汇报给管理者,让管理者心中有数,
决定采用什么样的方法:是放弃代码,还是分配时间。
最好是两个人一起编,这样错误少一些。但有些人非常喜欢自己一个人编代码。所以这种方法不强求。不过一个人编出的代码一定要进行多次测试。最好不要让一个人编写核心代
码。这样容易失控。
组长不是编程最强的,但一定是最具有凝聚力的人.其必须有一股正气.否则没有人乐意跟你去干.
一个项目做下来,组长不一定是知识增长最快的.但一定是管理经验掌握最多的.

ImageTest1.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<!--鼠标动作时图片会产生动作-->
<HTML>

<HEAD>

<TITLE> ImageTest1 </TITLE>
</HEAD>

<BODY>
<script language="javascript">
var defaultImage = new Image;
defaultImage.src = "winxpaa11.jpg";
var rolledImage = new Image;
rolledImage.src = "winxpaa13.jpg";
var thirdImage = new Image;
thirdImage.src = "winxpaa10.jpg";
/*<img src = "C:/Documents and Settings/Administrator/My
Documents/壁纸/winxpaa14.jpg" name = "myImage">
<a href = "#" onClick = "window.alert(document.myImage.width)">width</a><br>
<a href = "#" onClick = "window.alert(document.myImage.height)"><img src =
"C:/Documents and Settings/Administrator/My Documents/壁纸/winxpaa13.jpg" name =
"myImage2"></a><br><br><br>
*/
</script>
<img src="winxpaa14.jpg" name="myImage" onClick="window.alert('fefef');">
<a href="#" onClick="document.myImage3.src = defaultImage.src;"
onMouseOver="document.myImage3.src = rolledImage.src" onMouseOut="document.myImage3.src =defaultImage.src">
<image src="winxpaa15.jpg" name="myImage3">
</a><br>

</BODY>

</HTML>

ImageTest2.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--用于显示3个随机图片-->

<HTML>

<HEAD>
<TITLE> ImageTest2 </TITLE>
<script language="javascript">
var imageList = new Array;
for (var i = 0; i < 5; i++) {
imageList[i] = "winxpaa1" + i + ".jpg";
}

function X() { //var s = "<img src = C:/Documents and Settings/Administrator/My
Documents / 壁纸 / winxpaa13.jpg > ";
//document.write(s);
var imageChoice = Math.floor(Math.random() * imageList.length);
document.write('<img src="' + imageList[imageChoice] + '"width = 100 height =
100 > ');
}
</script>
</HEAD>

<BODY>
<script language="javascript">
X();
X();
X();
</script>

</BODY>

</HTML>


Q:

1
2
3
4
5
6
7
8
var rolledImage = new Image;  
rolledImage.src = "C:/Documents and Settings/Administrator/My Documents/壁纸/winxpaa12.jpg";
var thirdImage = new Image;
thirdImage.src = "C:/Documents and Settings/Administrator/MyDocuments/壁纸/winxpaa10.jpg";
<img src = "C:/Documents and Settings/Administrator/My Documents/壁纸/winxpaa13.jpg"
name = "myPicture" onMouseOver = "document.myPicture.src = rolledImage.src"
onMouseOut = "document.myPicture.src = thirdImage.src" width = 100 height =
100 border = 0><br><br>

似乎不能这样写.虽然不知道那里错了.只能显示winxpaa13.jpg其他的图片都不能显示.
<img>改为<a href = "#">也不行…不知道出了什么问题…
A:
解决方案:
使用相对路径.把源html和各种图片放在一起即可…

这个问题困扰我很长时间,在网上查没有找到,问了些人也没有人知道…最后还是用相对路径试了一下.竟然解决了

不过我还是不知道怎么用绝对路径.可能是我绝对路径设错了吧.不过我后面又加了file:/// 也不管用…

不过我的这个路径对于静态的html来说是可以显示图片的.如这句:

1
2
3
4
<img src = "C:/Documents and Settings/Administrator/My
Documents/壁纸/winxpaa12.jpg">


不知道为什么…

1
2
3
4
5
6
7
8
<img src = "C:/Documents and Settings/Administrator/My
Documents/壁纸/winxpaa13.jpg">
这里的<img要写在一起,否则只是打印字符串...

var imageChoice = Math.floor(Math.random()*imageList.length);
Math.random()产生[0,1)的随机数,Math.floor();用于取正(除掉小数点后面的部分)


0%