Programmer

追逐梦想的人
随笔 - 6, 文章 - 0, 评论 - 5, 引用 - 0
数据加载中……

2010年3月24日

部署spring2.56中的例子jpetstore

部署环境:tomcat6.0.18   jdk5   mysql5.1

1.   下载  到www.springsource.org/download 中 下载spring-framework-2.5.6.SEC01-with-dependencies
2.   jpetstores说明(自己翻译jpetstore中的readme.txt,本人英语不好 ,翻译不到位请手下留情)
     配备spring管理的中间层和ibatis作为数据访问策略数据层,与spring的事务 和抽象DAO相结合。能使用本地的JDBC或者JTA 和2个数据库中的后者一起工作
     使用了相同的数据模型和演示内容来作为jpetstore的原型,可以分别的查看 "WEB-INF/dataAccessContext-local.xml","WEB-INF/dataAccessContext-jta.xml"
     上下文定义的细节。
     提供了相同的用户界面两种不同的Web层实现,一个基于spring mvc,一个基于struts1.1,后者与jpetstore关系密切,但是用JSTL重写作为jsp的实现,
     尽可能的具有可比性。查看"WEB-INF/web.xml", "WEB-INF/petstore-servlet.xml",and "WEB-INF/struts-config.xml" 的细节。
     与原来的jpetstore原型相比,这个实现在内部结构和松耦合方面有了显著的改善。支持的应用上下文的概念,现在核心就是构建 应用对象(application objects)
     最显著的改善就是 PetStoreLogic,现在叫做PetStoreFacade,它不再与配置,资源,事务的细节相关
     注意以spring为基础的web层实现是故意与以struts为基础的相似并不是打算改进错误信息等方面的现状。jpetstore包含2个不同实现的web层来概括除了不同
     之外在各自程序设计模型的相同点,也阐明不同风格的配置。
     这个版本的jpetstore也展示了spring远程处理的可选项 如:Hessian, Burlap, RMI, and Web Services via Apache Axis.他们都提供了即插即用通过
     默认的web应用(注意RMI是添加注释避免与EJB容器冲突)“客户端”目录包含了一个通过所有协议调用OoderService输出的简单控制行客户端。
3.   部署
  • 创建数据库  先创建数据库 执行\jpetstore\db\mysql里面 jpetstore-mysql-schema.sql,jpetstore-mysql-dataload.sql 用来建表和导入数据(不同数据库自己对应查找)
  • 改数据库配置文件  在\jpetstore\war\WEB-INF  修改jdbc.properties(自己对应自己的设置)
    1 jdbc.driverClassName=com.mysql.jdbc.Driver
    2 jdbc.url=jdbc:mysql://localhost/jpetstore?
    3 jdbc.username=root
    4 jdbc.password=root
    5 
  • web层实现的选择  在\jpetstore\war\WEB_INF   web.xml代码
    <servlet-mapping>
             
    <!--使用spring mvc默认 -->
        
    <servlet-name>petstore</servlet-name>
            
    <!--使用struts -->
    <!--<servlet-name>action</servlet-name>-->
        
    <url-pattern>*.do</url-pattern>
    </servlet-mapping>
  • 部署 /jpetstore 运行warfile.bat 生成一个文件夹dist 把里面的jpetstore.war复制到 tomcat目录下的webapps  ,把对应的数据库驱动放到tomcat\lib下
  • 运行tomcat 打开浏览器http://localhost:8080/jpetstore 可以看到jpetstore页面  have fun!



posted @ 2010-03-24 13:43 霜の哀伤 阅读(1759) | 评论 (2)编辑 收藏

2007年4月13日

java学习笔记(xml解析)

最近学习xml,把学习的代码发上来   希望对新手有用
这是note.xml
<?xml version="1.0" encoding="gb2312" ?> 
<notes>
<note date="2007-4-12">
<from>小红</from> 
<to>小林</to> 
<message>周末一起去吃火锅呀</message> 
</note>
</notes>

这是dom解析xml代码
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;


class  DomXMLTest
{
    
public static void main(String[] args)
    {   
        
try{
         
//(1)得到DOM解析器的工厂实例
        DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();     
          
//(2)从DOM工厂获得DOM解析器
        DocumentBuilder  builder=factory.newDocumentBuilder(); 
        File f
=new File("note.xml");
         
//(3)把要解析的XML文档转化为输入流,以便DOM解析器解析它
        InputStream  is=new FileInputStream(f);  
        
//(4)解析XML文档的输入流,得到一个Document
        Document doc=builder.parse(is);    
        
//(5)得到XML文档的根节点
        Element  root=doc.getDocumentElement(); 
         
//(6)得到节点的子节点
        NodeList  notes=root.getChildNodes();   

          
for(int i=0;i<notes.getLength();i++)
          {
               Node note
=notes.item(i);
            
if(note.getNodeType()==Node.ELEMENT_NODE)
                {  
                    
//(7)取得节点的属性值
                    String date =note.getAttributes().getNamedItem("date").getNodeValue(); 
                    System.out.println(date);
                    
// (8)轮循子节点
                    for(Node node=note.getFirstChild();node!=null;node=node.getNextSibling()) 
                         {
                                
if(node.getNodeType()==Node.ELEMENT_NODE)
                                     {
                                            
if(node.getNodeName().equals("from"))
                                            {
                                                 String from
=node.getFirstChild().getNodeValue();
                                                 System.out.println(from);
                                             }
                                            
if(node.getNodeName().equals("to"))
                                             {
                                                  String to
=node.getFirstChild().getNodeValue();
                                                   System.out.println(to);
                                             }
                                             
if(node.getNodeName().equals("message"))
                                             {
                                                   String message
=node.getFirstChild().getNodeValue();
                                                   System.out.println(message);
                                              }
                                      }
                           }
                  }

        }
        }
        
catch(ParserConfigurationException e)
        {
            e.printStackTrace();
        }
        
catch(SAXException e)
        {
            e.printStackTrace();
        }
        
catch(IOException e)
        {
            e.printStackTrace();
        }
     }                                  
}

还有 出现 下面的错误  是xml的格式不对 ,我就应为在 <?xml 前面多个空格 就找了好几天的错误
特别感谢那些帮我找问题的高手,用范伟的话说  谢谢啊
The processing instruction target matching "[xX][mM][lL]" is not allowed.




posted @ 2007-04-13 18:08 霜の哀伤 阅读(420) | 评论 (1)编辑 收藏

2007年4月10日

学习笔记(java中的io操作)

(1)File的操作
import java.io.File;
import java.io.IOException;
class FileDemo{
 
public static void main(String args[]){
  
try{
   File f
=new File("file1.txt");
   
   System.out.println(
"文件是否存在: "+f.exists());
     
if(!f.exists())
      {    
           System.out.println(
"文件不否存在,开始创建!");
           f.createNewFile();
      }
   System.out.println(
"文件是否存在: "+f.exists());
   System.out.println(
"是文件吗: "+f.isFile());
   System.out.println(
"是文件夹吗: "+f.isDirectory());   
   System.out.println(
"可否读取文件: "+f.canRead);
   System.out.println(
"可否修改文件: "+f.canWrite());
   System.out.println(
"是否隐藏: "+f.isHidden());
   System.out.println(
"文件名称: "+f.getName());
   System.out.println(
"标准文件名: "+f.getCanonicalFile()); 
   System.out.println(
"相对路径: "+f.getPath());  
   System.out.println(
"绝对路径: "+f.getAbsolutePath());
   System.out.println(
"标准路径: "+f.getCanonicalPath());
   System.out.println(
"最后修改时间: "+f.lastModified());
   System.out.println(
"文件大小: "+f.length()+" 字节");        
  } 
  
catch(IOException ex){
   ex.printStackTrace();
  }   
 }
}

(2)简单文件读写
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.File;
class test{
 
public static void main(String args[]){
  
try{
   File f
=new File("file1.txt");
   
if(!f.exists())
      {
           f.createNewFile();
      }
   FileWriter fw
=new FileWriter(f);
   BufferedWriter bw
=new BufferedWriter(fw);
   bw.write(
"大家好,我正在学习Java");
   bw.newLine();
   bw.write(
"请多多指教");
   System.out.println(
"file1.txt写入成功!***************开始读..\n");
   bw.flush();
   bw.close();
   
   FileReader fr
=new FileReader("file1.txt");
   BufferedReader br
=new BufferedReader(fr);
   String temp
=null;
   
do{
    temp
=br.readLine();
    System.out.println(temp
==null?"":temp);
   }
   
while(temp!=null);
   fr.close();
   br.close();
   
   System.out.println(
"file1.txt已经读完!*************");
  }
  
  
catch(IOException ex){
   ex.printStackTrace();
  }   
 }
}


(3)分隔符读取
import java.io.File;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.StringTokenizer;
class StringTokenizerTest
{
    
public static void main(String[] args) 
    {   
        
try{
                 File f
=new File("file1.txt");
                 
if(!f.exists())
                {
                   f.createNewFile();
                }
                FileWriter fw
=new FileWriter(f);
                BufferedWriter bw
=new BufferedWriter(fw);
                bw.write(
"小明,男,1980-1-1,13624577654");
                bw.newLine();
                bw.write(
"小强,男,1984-2-1,13634375634");
                bw.newLine();
                bw.write(
"小红,女,1986-1-5,13724777774");
                System.out.println(
"数据写入成功!");
                bw.flush();
                bw.close();

                FileReader fr
=new FileReader(f);
                BufferedReader br
=new BufferedReader(fr);
                String s
=null;
                
                
while  ((s  =br.readLine())!=  null)  
                {  
                     StringTokenizer  st  
=  new  StringTokenizer(s,",");  
                     System.out.println(s  
==  null?" " : s);  
                     
while  (st.hasMoreTokens())  {  
                       String  name  
=  st.nextToken();  
                       String  sex  
=  st.nextToken();  
                       String  birthday  
=  st.nextToken();  
                       String  tel  
=  st.nextToken();  
                       System.out.println(  
"姓名:  "  +  name);  
                       System.out.println(  
"性别:  "  +  sex);  
                       System.out.println(  
"生日:  "  +  birthday);  
                       System.out.println(  
"电话:  "  +  tel);  
                       System.out.println(  
"_______________________________  ");  
                          }  
                }   
                
while(s!=null);
                fr.close();
                br.close();          
           }
           
catch(IOException e){
               e.printStackTrace();
         }
    }
}



posted @ 2007-04-10 23:53 霜の哀伤 阅读(1239) | 评论 (0)编辑 收藏

2007年4月8日

JavaScript 技巧


1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键
<table oncontextmenu=return(false)></table> 可用于Table

2. <body onselectstart="return false"> 取消选取、防止复制

3. onpaste="return false" 不准粘贴

4. oncopy="return false;" oncut="return false;" 防止复制

5. <link rel="Shortcut Icon" href="favicon.ico"> IE地址栏前换成自己的图标

6. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夹中显示出你的图标

7. <input style="ime-mode:disabled"> 关闭输入法

8. 永远都会带着框架
<script language="JavaScript"><!--
if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页
// --></script>

9. 防止被人frame
<SCRIPT LANGUAGE=JAVASCRIPT><!--
if (top.location != self.location)top.location=self.location;
// --></SCRIPT>

10. 网页将不能被另存为
<noscript><iframe src="/blog/*.html>";</iframe></noscript>

11. <input type=button value=查看网页源代码
onclick="window.location = "view-source:"+ "http://www.williamlong.info"">

12.删除时确认
<a href="javascript:if(confirm("确实要删除吗?"))location="boos.asp?&areyou=删除&page=1"">删除</a>

13. 取得控件的绝对位置
//Javascript
<script language="Javascript">
function getIE(e){
var t=e.offsetTop;
var l=e.offsetLeft;
while(e=e.offsetParent)
alert("top="+t+"/nleft="+l);
}
</script>

//VBScript
<script language="VBScript"><!--
function getIE()
dim t,l,a,b
set a=document.all.img1
t=document.all.img1.offsetTop
l=document.all.img1.offsetLeft
while a.tagName<>"BODY"
set a = a.offsetParent
t=t+a.offsetTop
l=l+a.offsetLeft
wend
msgbox "top="&t&chr(13)&"left="&l,64,"得到控件的位置"
end function
--></script>

14. 光标是停在文本框文字的最后
<script language="javascript">
function cc()
{
var e = event.srcElement;
var r =e.createTextRange();
r.moveStart("character",e.value.length);
r.collapse(true);
r.select();
}
</script>
<input type=text name=text1 value="123" onfocus="cc()">

15. 判断上一页的来源
javascript:
document.referrer


16. 最小化、最大化、关闭窗口
<object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Minimize"></object>
<object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Maximize"></object>
<OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAM NAME="Command" VALUE="Close"></OBJECT>
<input type=button value=最小化 onclick=hh1.Click()>
<input type=button value=最大化 onclick=hh2.Click()>
<input type=button value=关闭 onclick=hh3.Click()>
本例适用于IE

17.屏蔽功能键Shift,Alt,Ctrl
<script>
function look(){
if(event.shiftKey)
alert("禁止按Shift键!"); //可以换成ALT CTRL
}
document.onkeydown=look;
</script>

18. 网页不会被缓存
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
或者<META HTTP-EQUIV="expires" CONTENT="0">

19.怎样让表单没有凹凸感?
<input type=text style="border:1 solid #000000">

<input type=text style="border-left:none; border-right:none; border-top:none; border-bottom:

1 solid #000000"></textarea>

20.<div><span>&<layer>的区别?
<div>(division)用来定义大段的页面元素,会产生转行
<span>用来定义同一行内的元素,跟<div>的唯一区别是不产生转行
<layer>是ns的标记,ie不支持,相当于<div>

21.让弹出窗口总是在最上面:
<body onblur="this.focus();">

22.不要滚动条?
让竖条没有:
<body style="overflow:scroll;overflow-y:hidden">
</body>
让横条没有:
<body style="overflow:scroll;overflow-x:hidden">
</body>
两个都去掉?更简单了
<body scroll="no">
</body>

23.怎样去掉图片链接点击后,图片周围的虚线?
<a href="#" onFocus="this.blur()"><img src="/blog/logo.jpg" border=0></a>

24.电子邮件处理提交表单
<form name="form1" method="post" action="mailto:****@***.com" enctype="text/plain">
<input type=submit>
</form>

25.在打开的子窗口刷新父窗口的代码里如何写?
window.opener.location.reload()

26.如何设定打开页面的大小
<body onload="top.resizeTo(300,200);">
打开页面的位置<body onload="top.moveBy(300,200);">

27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动
<STYLE>
body
{background-image:url(/blog/logo.gif); background-repeat:no-repeat;
background-position:center;background-attachment: fixed}
</STYLE>

28. 检查一段字符串是否全由数字组成
<script language="Javascript"><!--
function checkNum(str){return str.match(//D/)==null}
alert(checkNum("1232142141"))
alert(checkNum("123214214a1"))
// --></script>

29. 获得一个窗口的大小
document.body.clientWidth; document.body.clientHeight

30. 怎么判断是否是字符
if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");
else alert("全是字符");

31.TEXTAREA自适应文字行数的多少
<textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight">
</textarea>

32. 日期减去天数等于第二个日期
<script language=Javascript>
function cc(dd,dadd)
{
//可以加上错误处理
var a = new Date(dd)
a = a.valueOf()
a = a - dadd * 24 * 60 * 60 * 1000
a = new Date(a)
alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")
}
cc("12/23/2002",2)
</script>

33. 选择了哪一个Radio
<HTML><script language="vbscript">
function checkme()
for each ob in radio1
if ob.checked then window.alert ob.value
next
end function
</script><BODY>
<INPUT name="radio1" type="radio" value="style" checked>Style
<INPUT name="radio1" type="radio" value="barcode">Barcode
<INPUT type="button" value="check" onclick="checkme()">
</BODY></HTML>

34.脚本永不出错
<SCRIPT LANGUAGE="JavaScript">
<!-- Hide
function killErrors() {
return true;
}
window.onerror = killErrors;
// -->
</SCRIPT>

35.ENTER键可以让光标移到下一个输入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">


36. 检测某个网站的链接速度:
把如下代码加入<body>区域中:
<script language=Javascript>
tim=1
setInterval("tim++",100)
b=1
var autourl=new Array()
autourl[1]="www.njcatv.net"
autourl[2]="javacool.3322.net"
autourl[3]="www.sina.com.cn"
autourl[4]="www.nuaa.edu.cn"
autourl[5]="www.cctv.com"
function butt(){
document.write("<form name=autof>")
for(var i=1;i<autourl.length;i++)
document.write("<input type=text name=txt"+i+" size=10 value="/blog/测试中......>" =》<input type=text
name=url"+i+" size=40> =》<input type=button value=GO

onclick=window.open(this.form.url"+i+".value)><br/>")
document.write("<input type=submit value=刷新></form>")
}
butt()
function auto(url)
else

b++
}
function run(){for(var i=1;i<autourl.length;i++)document.write("<img src=http://"+autourl+"/"+Math.random()+" width=1 height=1

onerror=auto("http://"+autourl+"")>")}
run()</script>

37. 各种样式的光标
auto :标准光标
default :标准箭头
hand :手形光标
wait :等待光标
text :I形光标
vertical-text :水平I形光标
no-drop :不可拖动光标
not-allowed :无效光标
help :?帮助光标
all-scroll :三角方向标
move :移动标
crosshair :十字标
e-resize
n-resize
nw-resize
w-resize
s-resize
se-resize
sw-resize

38.页面进入和退出的特效
进入页面<meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)">
推出页面<meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)">
这个是页面被载入和调出时的一些特效。duration表示特效的持续时间,以秒为单位。transition表示使用哪种特效,取值为1-23:
  0 矩形缩小
  1 矩形扩大
  2 圆形缩小
  3 圆形扩大
  4 下到上刷新
  5 上到下刷新
  6 左到右刷新
  7 右到左刷新
  8 竖百叶窗
  9 横百叶窗
  10 错位横百叶窗
  11 错位竖百叶窗
  12 点扩散
  13 左右到中间刷新
  14 中间到左右刷新
  15 中间到上下
  16 上下到中间
  17 右下到左上
  18 右上到左下
  19 左上到右下
  20 左下到右上
  21 横条
  22 竖条
  23 以上22种随机选择一种

39.在规定时间内跳转
<META http-equiv=V="REFRESH" content="5;URL=http://www.williamlong.info">

40.网页是否被检索
<meta name="ROBOTS" content="属性值">
  其中属性值有以下一些:
  属性值为"all": 文件将被检索,且页上链接可被查询;
  属性值为"none": 文件不被检索,而且不查询页上的链接;
  属性值为"index": 文件将被检索;
  属性值为"follow": 查询页上的链接;
  属性值为"noindex": 文件不检索,但可被查询链接;
  属性值为"nofollow": 文件不被检索,但可查询页上的链接。

最大化窗口?
<script language="JavaScript">
<!--
self.moveTo(0,0)
self.resizeTo(screen.availWidth,screen.availHeight)
//-->
</script>




解 决问题:由于层与下拉框之间的优先级是:下拉框 > 层,因此在显示的时候,会因为优先级的次序而会出现如上问题。(如果几个元素都是层的话,我们可以通过层的 z-index 属性来设置)解决办法就是:给层中放一个优先级比下拉框更高的元素(iframe),从而解决此问题!具体解决代码如下:

<div id="menu" style="position:absolute; visibility:hidden; top:20px; left:20px; width:100px; height:200px; background-color:#6699cc;">
<table>
<tr><td>item 1</td></tr>
<tr><td>item 2</td></tr>
<tr><td>item 3</td></tr>
<tr><td>item 4</td></tr>
<tr><td>item 5</td></tr>
</table>
<iframe src="/blog/javascript:false" style="position:absolute; visibility:inherit; top:0px; left:0px; width:100px; height:200px; z-index:-1; filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';"></iframe>
</div>

<a href="#" onclick="document.getElementById('menu').style.visibility='visible'">menu</a>

<form>
<select><option>A form selection list</option></select>
</form>

输入框也可以做的很漂亮了
<div align="center"><input type="hidden" name="hao" value="yes">
外向数:<input
name=answer
style="color: #ff0000; border-left: medium none; border-right: medium none; border-top: medium none; border-bottom: 1px solid #c0c0c0">
 没回答的题数:<input
name=unanswer id="unanswer"
style="color: #ff0000; border-left: medium none; border-right: medium none; border-top: medium none; border-bottom: 1px solid #c0c0c0">
<br/>
总得分:
<input
name=score id="score"
style="color: #ff0000; border-left: medium none; border-right: medium none; border-top: medium none; border-bottom: 1px solid #c0c0c0">
 结    论:
<input
name=xgjg id="xgjg"
style="color: #ff0000; border-left: medium none; border-right: medium none; border-top: medium none; border-bottom: 1px solid #c0c0c0">
<br/>
<br/>

<input onClick=processForm(this.form) style="FONT-FAMILY: 宋体; FONT-SIZE: 9pt" type=button value=查看结果 name="button">
<input type="reset" name="Submit" value="重做">
</div>
注意:修改<body>为<body onload="max.Click()">即为打开最大

化窗口,而如果改为<body onload="min.Click()">就变为窗口一打开就最小化

<object id="min" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<param name="Command" value="Minimize">
</object> <object id="max" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<param name="Command" value="Maximize">
</object>
</body>

页面自动刷新(说明)

当你做网页时,是不是有的时候想让你的网页自动不停刷新,或者过一段时间自动跳转到另外一个你自己设定的页面?其实实现这个效果非常地简单,而且这个效果甚至不能称之为特效。你只要把如下代码加入你的网页中就可以了。

1,页面自动刷新:把如下代码加入<head>区域中<meta http-equiv="refresh" content="20">,其中20指每隔20秒刷新一次页面.

2, 页面自动跳转:把如下代码加入<head>区域中<meta http-equiv="refresh" content="20;url=http://www.williamlong.info">,其中20指隔20秒后跳转到http: //www.williamlong.info页面。

页面自动关闭

5000是指时间<body onLoad="setTimeout(window.close, 5000)">

弹出窗口自动关闭

10秒后弹出窗口自动关闭

注意:在新的tan.htm的body中要加 <onLoad="closeit()">
head

<script language="JavaScript">

<!--

var gt = unescape('%3e');

var popup = null;

var over = "Launch Pop-up Navigator";

popup = window.open('', 'popupnav', 'width=225,height=235,resizable=1,scrollbars=auto');

if (popup != null) {

if (popup.opener == null) {

popup.opener = self;

}

popup.location.href = 'tan.htm';

}

// -->

</script>
<body>注意:这段代码是在新建文件中的
<script language="JavaScript">

function closeit()

</script>

这个可不是<iframe>(引用)呀。是直接调用的。以下代码加入<body>区域

<object type="text/x-scriptlet" width="800" height="1000" data="../index.htm">
</object>


posted @ 2007-04-08 23:38 霜の哀伤 阅读(253) | 评论 (0)编辑 收藏

2007年4月3日

EditPlus 用户工具配置

 

工具集成——编译器集成例子(Java、Borland C++、Visual C++、Inno Setup、nsis)
在“工具→参数选择→用户工具”选项页设置,设置步骤
① 设置组名称,这里也可以不设置
② 单击“添加工具→应用程序”按钮并进行如下设置
③ 各种类似"$(FilePath)"的参数可以在文本框右侧的箭头下拉菜单中获取,具体含义如下
参数 描述
$(FilePath) 文件路径(文件全名,含目录和文件名)
$(FileDir) 文件目录(不带文件名)
$(FileName) 文件名(不带目录)
$(FileNameNoExt) 不带扩展名的文件名(不带目录)
$(FileExt) 扩展名(当前文件)
$(ProjectName) 工程名称(当前工程名)
$(CurLine) 当前行号(光标位置处的行号)
$(CurCol) 当前列号(光标位置处的列号)
$(CurSel) 当前文本(插入当前选定文本)
$(CurWord) 当前单词(插入当前单词)
$(WindowList) 显示当前窗口列表并选择特定文件


例子 1. Java 编译器

菜单文本:Java 编译器
命令:c:\java\bin\javac.exe
参数:"$(FilePath)"
初始目录:$(FileDir)
捕获输出:开启

要运行已编译的 Java 类文件,你可以进行如下设置:
菜单文本:Java
命令:c:\java\bin\java.exe
参数:$(FileNameNoExt)
初始目录:$(FileDir)
“命令”部分应当替换为实际的 Java 解释器的路径。

例子 2. Borland C++

菜单文本:Borland C
命令:c:\bc\bin\bcc32.exe
参数:-Ic:\bc\include -Lc:\bc\lib -n$(FileDir) $(FilePath)
初始目录:c:\bc\bin
捕获输出:开启

例子 3. Visual C++

菜单文本:Visual C++
命令:c:\msdev\vc98\bin\cl.exe
参数:"$(FilePath)"
初始目录:$(FileDir)
捕获输出:开启

例子 4. Inno Setup
菜单文本:编译 Inno
命令:C:\Program Files\Inno Setup 4\Compil32.exe”
参数:/cc $(FileName)
初始目录:$(FileDir)
捕获输出:开启

例子 5. nsis
菜单文本:编译 nsis
命令:C:\NSIS\makensis.exe
参数:$(FileName)
初始目录:$(FileDir)
捕获输出:开启

例子 6. C#
菜单文本:编译 C#
命令:C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\csc.exe
参数:$(FileName)
初始目录:$(FileDir)
捕获输出:开启

在上面设置中,在命令部分,必须使用系统中各自编译器的绝对路径。

设置完毕后,你可以在“工具”菜单运行对应工具了,运行结果会显示在底部的输出窗口,你也可以通过快捷键(Ctrl + 0-9) 运行,或者是通过“用户工具栏”的快捷按钮运行。

要运行已编译的 *.exe 文件,你可以进行如下设置(此时可执行文件需要和编译文件同名):
菜单文本:Run
命令:$(FileNameNoExt)
参数:
初始目录:$(FileDir)

原文章地址:http://www.cppblog.com/shyli/archive/2006/12/17/16531.aspx

posted @ 2007-04-03 22:12 霜の哀伤 阅读(558) | 评论 (0)编辑 收藏

java排序常见算法

  • 選擇排序
將要排序的對象分作兩部份,一個是已排序的,一個是未排序的,從後端未排序部份選擇一個最小值,並放入前端已排序部份的最後一個,例如:

排序前:70 80 31 37 10 1 48 60 33 80

  1. [1] 80 31 37 10 70 48 60 33 80 選出最小值1
  2. [1 10] 31 37 80 70 48 60 33 80 選出最小值10
  3. [1 10 31] 37 80 70 48 60 33 80 選出最小值31
  4. [1 10 31 33] 80 70 48 60 37 80 ......
  5. [1 10 31 33 37] 70 48 60 80 80 ......
  6. [1 10 31 33 37 48] 70 60 80 80 ......
  7. [1 10 31 33 37 48 60] 70 80 80 ......
  8. [1 10 31 33 37 48 60 70] 80 80 ......
  9. [1 10 31 33 37 48 60 70 80] 80 ......

  • 插入排序
像是玩樸克一樣,我們將牌分作兩堆,每次從後面一堆的牌抽出最前端的牌,然後插入前面一堆牌的適當位置,例如:

排序前:92 77 67 8 6 84 55 85 43 67

  1. [77 92] 67 8 6 84 55 85 43 67 將77插入92前
  2. [67 77 92] 8 6 84 55 85 43 67 將67插入77前
  3. [8 67 77 92] 6 84 55 85 43 67 將8插入67前
  4. [6 8 67 77 92] 84 55 85 43 67 將6插入8前
  5. [6 8 67 77 84 92] 55 85 43 67 將84插入92前
  6. [6 8 55 67 77 84 92] 85 43 67 將55插入67前
  7. [6 8 55 67 77 84 85 92] 43 67 ......
  8. [6 8 43 55 67 77 84 85 92] 67 ......
  9. [6 8 43 55 67 67 77 84 85 92] ......

  • 氣泡排序法
顧名思義,就是排序時,最大的元素會如同氣泡一樣移至右端,其利用比較相鄰元素的方法,將大的元素交換至右端,所以大的元素會不斷的往右移動,直到適當的位置為止。

基本的氣泡排序法可以利用旗標的方式稍微減少一些比較的時間,當尋訪完陣列後都沒有發生任何的交換動作,表示排序已經完成,而無需再進行之後的迴圈比較與交換動作,例如:

排序前:95 27 90 49 80 58 6 9 18 50

  1. 27 90 49 80 58 6 9 18 50 [95] 95浮出
  2. 27 49 80 58 6 9 18 50 [90 95] 90浮出
  3. 27 49 58 6 9 18 50 [80 90 95] 80浮出
  4. 27 49 6 9 18 50 [58 80 90 95] ......
  5. 27 6 9 18 49 [50 58 80 90 95] ......
  6. 6 9 18 27 [49 50 58 80 90 95] ......
  7. 6 9 18 [27 49 50 58 80 90 95] 由於接下來不會再發生交換動作,排序提早結束

public class BasicSort {
//选择排序
public static void selectionSort(int[] number) {
for(int i = 0; i < number.length - 1; i++) {
int m = i;
for(int j = i + 1; j < number.length; j++)
if(number[j] < number[m])
m = j;

if(i != m)
swap(number, i, m);
}
}
//插入排序
public static void injectionSort(int[] number) {
for(int j = 1; j < number.length; j++) {
int tmp = number[j];
int i = j - 1;
while(tmp < number[i]) {
number[i+1] = number[i];
i--;
if(i == -1)
break;
}

number[i+1] = tmp;
}
}
//冒泡排序
public static void bubbleSort(int[] number) {
boolean flag = true;

for(int i = 0; i < number.length-1 && flag; i++) {
flag = false;
for(int j = 0; j < number.length-i-1; j++) {
if(number[j+1] < number[j]) {
swap(number, j+1, j);
flag = true;
}
}
}
}

private static void swap(int[] number, int i, int j) {
int t;
t = number[i];
number[i] = number[j];
number[j] = t;
}
}

posted @ 2007-04-03 10:40 霜の哀伤 阅读(1999) | 评论 (2)编辑 收藏