// 特殊字符转为Html
public static String toHtml(String s){
if(s == null){
s = "";
return s;
}
s = Replace(s.trim(),"&","&");
s= Replace(s.trim(),"<","<");
s = Replace(s.trim(),">",">");
s = Replace(s.trim(),"\t"," ");
s = Replace(s.trim(),"\r\n","\n");
s = Replace(s.trim(),"\n","
");
s = Replace(s.trim()," "," ");
s = Replace(s.trim(),"'","'");
s = Replace(s.trim(),"\\","\");
return s;
}
/**
* ubb
*/
public static String toUbbHtml(String s){
if(s == null){
s = "";
return s;
}
s = Replace(s,"\n","
");
s = Replace(s," "," ");
s = Replace(s,"'","'");
s = Replace(s,"\\","\");
return s;
}

//逆
public static String unHtml(String s){
s = Replace(s,"
","\n");
s = Replace(s," "," ");
return s;
}

public static String Replace(String source,String oldString,String newString){
StringBuffer output = new StringBuffer();
int lengthOfsource = source.length();//源字符串长度
int lengthOfold = oldString.length();//老字符串长度
int posStart = 0;//开始搜索位置
int pos;//搜索到的老字符串的位置
//source.indexOf(oldString,posStart)检索某子串在字符串postStart以后第一次出现的位置,如果未找到就返回一个-1。
while((pos = source.indexOf(oldString,posStart)) >= 0){//得到字符串的位置(eg:如果有
就执行,没有就跳出,不要处理。)
//将以posStart起始以pos-1结束之间的内容拷贝到另一个字符串中。因为posStar从0开始的。
output.append(source.substring(posStart,pos));//append方法将文本添加到当前StringBuffer对象内容的结尾。
output.append(newString);//替换成新字符串
posStart = pos + lengthOfold;//位置也变为找到了之后的位置,pos为得到第一次出现字符的位置,lengthold为字符的长度
}
if(posStart < lengthOfsource){
//source.substring(posStart)以lengthOfsource开始的字符串拷贝到列一个字符串中
output.append(source.substring(posStart));
}
//这个方法将其内容转换成一个可以被用于输出的字符串对象。它允许操作对应的文本用于输出或数据存储。
return output.toString();
}

indexOf方法:

返回 String 对象内第一次出现子字符串的字符位置。

strObj.indexOf(subString[, startIndex])
参数
strObj
必选项。String 对象或文字。
subString
必选项。要在 String 对象中查找的子字符串。
starIndex
可选项。该整数值指出在 String 对象内开始查找的索引。如果省略,则从字符串的开始处查找。
说明
indexOf 方法返回一个整数值,指出 String 对象内子字符串的开始位置。如果没有找到子字符串,则返回 -1。

如果 startindex 是负数,则 startindex 被当作零。如果它比最大的字符位置索引还大,则它被当作最大的可能索引。

从左向右执行查找。否则,该方法与 lastIndexOf 相同。

示例
下面的示例说明了 indexOf 方法的用法。

程序代码 程序代码
function IndexDemo(str2){
var str1 = "BABEBIBOBUBABEBIBOBU"
var s = str1.indexOf(str2);
return(s);
}


lastIndexOf 方法:

返回 String 对象中子字符串最后出现的位置。

strObj.lastIndexOf(substring[, startindex])
参数
strObj
必选项。String 对象或文字。
substring
必选项。要在 String 对象内查找的子字符串。
startindex
可选项。该整数值指出在 String 对象内进行查找的开始索引位置。如果省略,则查找从字符串的末尾开始。
说明
lastIndexOf 方法返回一个整数值,指出 String 对象内子字符串的开始位置。如果没有找到子字符串,则返回 -1。

如果 startindex 是负数,则 startindex 被当作零。如果它比最大字符位置索引还大,则它被当作最大的可能索引。

从右向左执行查找。否则,该方法和 indexOf 相同。

下面的示例说明了 lastIndexOf 方法的用法:

程序代码 程序代码
function lastIndexDemo(str2)
{
var str1 = "BABEBIBOBUBABEBIBOBU"
var s = str1.lastIndexOf(str2);
return(s);
}


substring 方法:

返回位于 String 对象中指定位置的子字符串。

程序代码 程序代码
strVariable.substring(start, end)
"String Literal".substring(start, end)


参数

start
指明子字符串的起始位置,该索引从 0 开始起算。
end
指明子字符串的结束位置,该索引从 0 开始起算。
说明

substring 方法将返回一个包含从 start 到最后(不包含 end )的子字符串的字符串。

substring 方法使用 start 和 end 两者中的较小值作为子字符串的起始点。例如, strvar.substring(0, 3) 和 strvar.substring(3, 0) 将返回相同的子字符串。

如果 start 或 end 为 NaN 或者负数,那么将其替换为0。

子字符串的长度等于 start 和 end 之差的绝对值。例如,在 strvar.substring(0, 3) 和 strvar.substring(3, 0) 返回的子字符串的的长度是 3。

示例
下面的示例演示了 substring 方法的用法。

程序代码 程序代码
function SubstringDemo(){
var ss; // 声明变量。
var s = "The rain in Spain falls mainly in the plain..";
ss = s.substring(12, 17); // 取子字符串。
return(ss); // 返回子字符串。
}

一个是标准输出 一个是标准错误输出 在不同的容器,System.out.println() 和System.err.println()会输出 不同的文件中。

System.err.println()不能被重定向


System.out.println() 是标准输出 System.err.println() 是标准错误输出 默认情况下都是将结果输出到控制台,不过可以对其进行重定向从而改变其默认输出的方式。

〈script>
function toBreakWord(intLen){
var obj=document.getElementById("strT");
var strContent=obj.innerHTML;
var strTemp="";
while(strContent.length>intLen){
strTemp+=strContent.substr(0,intLen)+"〈br>";
strContent=strContent.substr(intLen,strContent.length);
}
strTemp+=strContent;
obj.innerHTML=strTemp;
}
〈/script>

〈div id=strT>要控制的字符串。。。。〈/div>

〈script>
if(document.getElementById &&amp;amp;amp; !document.all) toBreakWord(54);//每行54个字符换行
〈/script>

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;

public class Test {
public static void main(String[] args){
ArrayList arr = new Test().getRandom(10);
Iterator it = arr.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
public ArrayList getRandom(int num){
ArrayList randomNum = new ArrayList();
Random random = new Random();
int temp = 0;
for (int i = 0;i < num; i ++){
temp = random.nextInt(num);
int nums = temp + 1;
if (randomNum.indexOf(new Integer(nums)) == -1){
randomNum.add(new Integer(nums));
}else{
i -- ;
}
}
return randomNum;
}
}

  • 对于tomcat:

@echo off

set JAVA_HOME=E:\jdk1.6.0
set CATALINA_HOME=E:\tomcat-5.5.20
set path=%CATALINA_HOME%\bin\
catalina run


  • 对于weblogic:
@echo off

echo ╭══╮
echo ╭╯ΘΘ║
echo ╰⊙═⊙╯。oо○

cd D:\bea\user_projects\domains\bjpaward
d:
call D:\bea\user_projects\domains\bjpaward\startWebLogic.cmd

DTD规范

1.属性类型- CDATA
属性值可以是任何字符(包括数字和中文)

2.属性类型-NMTOKEN / NMTOKENS
NMTOKEN是CDATA 的一个子集,表示属性值必须是英文字母、数字、句号、破折号、下划线或冒号(不能是中文!)。



其他详见:
http://www.cnblogs.com/anan/articles/294009.html

  Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类。

  Stratrgy应用比较广泛,比如,公司经营业务变化图,可能有两种实现方式,一个是线条曲线,一个是框图(bar),这是两种算法,可以使用Strategy实现。

  这里以字符串替代为例, 有一个文件,我们需要读取后,希望替代其中相应的变量,然后输出.关于替代其中变量的方法可能有多种方法,这取决于用户的要求,所以我们要准备几套变量字符替代方案。

  首先,我们建立一个抽象类RepTempRule 定义一些公用变量和方法:

public abstract class RepTempRule{

protected String oldString="";
public void setOldString(String oldString){
  this.oldString=oldString;
}

protected String newString="";
public String getNewString(){
  return newString;
}



public abstract void replace() throws Exception;


}

  在RepTempRule中有一个抽象方法abstract需要继承明确,这个replace里其实是替代的具体方法。我们现在有两个字符替代方案,

  1.将文本中aaa替代成bbb;
  2.将文本中aaa替代成ccc;

  对应的类分别是RepTempRuleOne RepTempRuleTwo

public class RepTempRuleOne extends RepTempRule{


public void replace() throws Exception{

  //replaceFirst是jdk1.4新特性
  newString=oldString.replaceFirst("aaa", "bbbb")
  System.out.println("this is replace one");
  
}


}

public class RepTempRuleTwo extends RepTempRule{


public void replace() throws Exception{

  newString=oldString.replaceFirst("aaa", "ccc")
  System.out.println("this is replace Two");
  
}


}

  至此我们完成了类图的设计和程序编制.调用如下:

public class test{

......

  public void testReplace(){

    //使用第一套方案进行替换.
    RepTempRule rule=new RepTempRuleOne();
    rule.setOldString(record);
    rule.replace();

  }

.....

}

  实际整个Strategy的核心部分就是抽象类的使用,使用Strategy模式可以在用户需要变化时,修改量很少,而且快速。

  Strategy和Factory有一定的类似,Strategy相对简单容易理解:

  Strategy适合下列场合:

  1.以不同的格式保存文件;

  2.以不同的算法压缩文件;

  3.以不同的算法截获图象;

  4.以不同的格式输出同样数据的图形,比如曲线 或框图bar等。

if(str.indexOf("0")《str.length-1){
var sti=str.substring(str.indexOf("0")+1,str.length);
return parseInt(sti);
}else{
return parseInt(str);
}

ajax基本应用

var url = "historydetail.shtml";
var pars = "detail="+modeId;
document.getElementById('a'+divId).innerText="loading......";

var myAjax = new Ajax.Updater(('a'+divId),url, {method: 'get', parameters: pars});

javascript打印

  • 复制table到剪切板
window.clipboardData.setData("Text",obj.outerHTML);\\复制table到剪切板。
window.open ('<%=request.getContextPath()%>/common/print.jsp', 'newwindow', 'width=10000,height=10000,top=0, left=0, toolbar=no, menubar=no, scrollbars=yes, resizable=no,location=no, status=no')
  • 粘贴
document.body.innerHTML+= window.clipboardData.getData("Text");

  • 打印
OBJECT:id=WebBrowser classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"
document.all.WebBrowser.ExecWB(6,1);

DOJO Widgets系统

1.1 dojo.widget.LayoutContainer

dojo的布局通过LayoutContainer组件来进行管理,而且,在LayoutContainer容器里面的组件,必须具有layoutAlign属性(这个属性决定了这些组件的位置)!

LayoutContainer组件无法决定其包含的子组件的位置,只有子组件本身才能通过layoutAlign属性来定位自身。

LayoutContainer的重要属性:

l layoutChildPriority:表示在布局容器所包含的组件的时候,其优先顺序如何,有三个取值:none/top-bottom/left-right

n none 表示无优先顺序,其布局取决于子组件在HTML出现的先后顺序而决定。

n top-bottom 上下布局优先,以layoutAlign=toplayoutAlign=bottom属性的子组件为优先,即先对具有这些属性的子组件进行布局,其次再到具有leftright属性的子组件布局

n left-right 左右布局优先,与top-bottom刚好相反。

LayoutContainer当然也可以嵌套使用,但需要注意添加layoutAlign属性(被别的LayoutContainer包含的时候,需要这个属性来定位)

1.2 dojo.widget.SplitContainer

此容器也是用于布局,但功能与LayoutContainer不同的是,SplitContainer所布局分离出来的区块,可以通过显示边界来拖动,以便动态改变每个区域的大小。

重要的属性:

l orientation - 标识分隔的方向,默认取值是:horizontal,表示是水平方向分隔,取任何其它值都表示垂直分隔(但一般明确的标识垂直分隔的值是:vertical

l sizerWidth 分隔线的宽度,默认取值是15

l persist 是否为本次会话保存当前调整的分隔位置。默认值为true。即如果当前会话不结束,那么客户端所调整的位置便一直有效!

l activeSizing 是否在调整位置的时候,内容跟着动态变化。0表示不会跟着动态变化,直到鼠标释放之后,里面的内容才开始调整;1则反之。

SplitContainer所包含的组件,可以设置下列属性:

l sizeMin 默认值为10,本组件在SplitContainer容器中可允许的最小宽度,即拖动缩小的时候,不能小于本值。

l sizeShare 默认值为10,这个值的意思是本组件在容器中所占的宽度,请注意,这是一个相对值。比如,父容器有两个子组件,如果这两个子组件的sizeShare均设置为1(或均设置为其它任意相等的两个数值),意味着每个组件各占据50%的宽度。注意,在SplitContainer容器中的组件,你不能通过style=width:XXpx这样的style代码来设置宽度,将不会起作用。

1.3 dojo.widget.TabContainer

TAB标签的容器,在这个容器下面的组件,将会被显示成Tab标签的样子。

重要的属性:

l selectedTab 指定哪个tab是初始化的时候被选中的tab,用idwidgetId来标识

l labelPosition TAB标签的位置,可以取值topbottom,当取值leftright的时候,显示有点怪异!

重要的方法:

l selectTab(tab,_noRefresh) -选择某个TAB

其它说明:

TAB容器一般会包含ContentPane组件,而且需要在子组件中指定label属性。作为TAB显示的label

TAB容器所包含的子组件,如果它被选中,那么其selected属性为true,否则为false

1.4 dojo.widget.ContentPane

用来承载页面的内容。一般它会被加入到XXXContainer容器中。

下面是部分重要属性介绍:

l href 远程加载的内容

l preload 是否提前加载

l refreshOnShow 在显示的时候是否刷新内容,如果里面有javascript脚本,也会重新执行

l executeScripts 是否在加载的时候执行其中的javascript脚本

下面是部分重要方法介绍:

l setUrl 设置远程加载的内容,当调用这个方法后,内容便被即时覆盖了!

onLoad url被加载的时候调用(好像不太好用)

onUnLoad -

ContentPane继承自HtmlWidget,因此也具有它的一些方法和属性:

templateCssPath/ templatePath

还有:onShowonHide方法,这些方法在showhide之后被调用,你可以通过dojoevent系统,编写自己的方法,来连接到这些方法上,以便提供更多额外的处理。

或者直接将onShow这样的方法添加到标签属性中(在IE中有点问题,刷新的时候也有可能会调用到这个方法!!!!!!)




例子连接:


http://www.topxp.org/?url=html/tech/4028813c0c730092010c7306162e0006.html

近日学习spring,照抄tutorial程序,运行时碰见如下提示:According to TLD or attribute directive in tag file, attribute items does not accept any expressions。说白了意思就是tag中不接受任何的表达式。

因为原来程序我在别的机器上也试过是没有问题的,所以觉得非常奇怪。google了一下相关内容,虽然说法比较混乱,但也算是有点帮助,顺着方向仔细比对了一下文件,发现问题所在。就我所知,这个问题的主要原因,在于servlet/jsp版本的混乱。Example程序中用的是web.xml版本是2.3,所以core taglib的URI是http://java.sun.com/jstl/core。而我偷懒用Eclipse webtools生成的web.xml缺省是2.4,那么正确的URL应该是http://java.sun.com/jsp/jstl/core。就是在2.4的web app,core taglib的声明改成
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
就可以了。

double 转型问题

public class Tee {
public static void main(String[] args) {
try {
Object obj = new Float("23.45"); // obj的真实类型是Float
Double dobj = (Double) obj; // 你在将真实类型为Float类型的的Object反造型成Double类型的对象,所以会有错。如果Double为Float的父类,则这行代码就会是正确的了
} catch (ClassCastException e) {
System.out.println(e);
}
}
}

如果需要转换可以把ojb造型成Float类型,取其doubleValue,然后用这个值新建一个Double对象
Object obj = new Float("23.45");
Double dobj = new Double(((Float) obj).doubleValue());

http://www.cnlei.org/blog/article.asp?id=293

http://www.qqread.com/asp/2006/05/h919112012.html

MySQL基本操作

MySQL数据库的基本操作 [ 转载 ]


一、连接MYSQL

  格式: mysql -h主机地址 -u用户名 -p用户密码

  1、例1:连接到本机上的MYSQL。

  首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -h localhost -u root -p+回车,也可以键入命令mysql -u root -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>

  2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:
   mysql -h110.110.110.110 -uroot -pabcd123

  (注:u与root可以不用加空格,其它也一样)

  3、退出MYSQL命令: exit (回车)

二、修改密码

  格式:mysqladmin -u用户名 -p旧密码 password 新密码

  1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令
   mysqladmin -uroot -password ab12

  注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

  2、例2:再将root的密码改为djg345。
   mysqladmin -uroot -pab12 password djg345

三、增加新用户(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)

  格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"

  例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:
   grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";
   但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。

  例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。
   grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";

  如果你不想test2有密码,可以再打一个命令将密码消掉。
   grant select,insert,update,delete on mydb.* to test2@localhost identified by "";

  下面来看看MYSQL中有关数据库方面的操作。注意:必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。


四、操作技巧

  1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。
五、显示命令

  1、显示数据库列表。
   show databases;
   刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。

  2、显示库中的数据表:
   use mysql; //打开库,学过FOXBASE的一定不会陌生吧
   show tables;

  3、显示数据表的结构:
   describe 表名;

  4、建库:
   create database 库名;

  5、建表:
   use 库名;
   create table 表名 (字段设定列表);

  6、删库和删表:
   drop database 库名;
   drop table 表名;

  7、将表中记录清空:
   delete from 表名;

  8、显示表中的记录:
   select * from 表名;



六、一个建库和建表以及插入数据的实例

drop database if exists school; //如果存在SCHOOL则删除
create database school; //建立库SCHOOL
use school; //打开库SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default '南阳',
year date
); //建表结束
//以下为插入字段
insert into teacher values(','xuefeng','南阳理工,'1984-05-27');
insert into teacher values(','huifan','杞县高中','1985-07-23');

注:在建表中:
1.将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not null而且让他成为主字段primary key。
2.将NAME设为长度为10的字符字段。
3.将ADDRESS设为长度50的字符字段,而且缺省值为'南阳'。  
4.将YEAR设为日期字段。

如果你在mysql提示符键入上面的命令也可以,但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql,然后复制到c:\下,并在DOS状态进入目录\mysql\bin,然后键入以下命令:

   mysql -u root -p 密码 <> maildb.sql
   注释:将数据库mail_db备份到maildb.sql文件,maildb.sql是一个文本文件,文件名任取,打开看看你会有新发现。

九、恢复备份数据库
mysql -u root -p < maildb.sql

特效

http://www.softcomplex.com/download.html

http://together.javaeye.com/blog/29482

 
Copyright 2005-2007. Hello Wiki designed by Fen, Blogger Templates by Blogcrowds.