2007年12月11日

//CSS样式

#f_div {
 BORDER-TOP: #fff 1px solid; OVERFLOW: hidden; WIDTH: 262px; HEIGHT: 197px
}
#f_img {
 BORDER-RIGHT: #000 1px solid; BORDER-TOP: #000 1px solid; FILTER: revealTrans(duration=1,transition=6); BORDER-LEFT: #000 1px solid; WIDTH: 260px; BORDER-BOTTOM: #000 1px solid; HEIGHT: 195px
}
#f_buttonDiv {
 RIGHT: 1px; OVERFLOW: hidden; WIDTH: 100%; POSITION: relative; TOP: -15px; HEIGHT: 14px
}
#all_button {
 BACKGROUND: #fff
}
#f_line {
 FILTER: progid:DXImageTransform.Microsoft.Alpha(startX=0, startY=0, finishX=100, finishY=100,style=1,opacity=0,finishOpacity=40); FLOAT: right; WIDTH: 100px; BACKGROUND-COLOR: #000
}
#f_buttonDiv A {
 PADDING-RIGHT: 0px! important; PADDING-LEFT: 0px! important; FLOAT: right; PADDING-BOTTOM: 0px! important; OVERFLOW: hidden; BORDER-LEFT: #fff 1px solid; WIDTH: 22px; COLOR: #fff; PADDING-TOP: 1px; HEIGHT: 14px
}
#f_buttonDiv A:link {
 BACKGROUND: #000
}
#f_buttonDiv A:visited {
 BACKGROUND: #000
}
#f_buttonDiv A:active {
 BACKGROUND: #000
}
#f_buttonDiv A:hover {
 BACKGROUND: #ff840c
}
#f_buttonDiv A.on:link {
 BACKGROUND: #ff840c
}
#f_buttonDiv A.on:visited {
 BACKGROUND: #ff840c
}
#f_buttonDiv A.on:active {
 BACKGROUND: #ff840c
}
#f_buttonDiv A.on:hover {
 BACKGROUND: #ff840c
}
#button_bg A {
 TEXT-ALIGN: center
}
#f_text {
 DISPLAY: none
}

 

//JS代码块

<SCRIPT>
var imgUrl = new Array();
var imgText = new Array();
var imgLink = new Array();
var imgAlt= new Array();
var imgWidth=260;
var imgHeight=195;
var _timeOut_=4000; //时间值
var timeOut=_timeOut_;
var timeOut2=_timeOut_/2; //onmouseout img后需要切换的时间
var now=0;
var firstTime=true;
var target="_blank";   //打开方式
var ver=2; //兼容浏览器版本 默认2 为非ie
imgUrl[0]=’http://localhost:1549/ASPProject/Images/IndexImage/图片框/1.jpg’;
imgLink[0]=’http://localhost:1549/ASPProject/index.aspx’;
imgAlt[0]=’图片文字介绍’;

imgUrl[1]=’http://localhost:1549/ASPProject/Images/IndexImage/图片框/2.jpg’;
imgLink[1]=’http://localhost:1549/ASPProject/index.aspx’;
imgAlt[1]=’图片文字介绍’;

imgUrl[2]=’http://localhost:1549/ASPProject/Images/IndexImage/图片框/3.jpg’;
imgLink[2]=’http://localhost:1549/ASPProject/index.aspx’;
imgAlt[2]=’图片文字介绍’;

imgUrl[3]=’http://localhost:1549/ASPProject/Images/IndexImage/图片框/4.jpg’;
imgLink[3]=’http://localhost:1549/ASPProject/index.aspx’;
imgAlt[3]=’图片文字介绍’;

imgUrl[4]=’http://localhost:1549/ASPProject/Images/IndexImage/图片框/5.jpg’;
imgLink[4]=’http://localhost:1549/ASPProject/index.aspx’;
imgAlt[4]=’QVGA手机壁纸第二十八期: 梦幻风景’;

var count=0;
for (i=0;i<imgUrl.length;i++) {
if( (imgUrl[i]!="") && (imgText[i]!="")&& (imgLink[i]!="")&& (imgAlt[i]!="")) {
count++;
} else {
break;
}
}
function change(){
if (ver==1){
with(eval(‘f_img’).filters.revealTrans){
Transition=6;
apply();
play();
}
}
if (firstTime){ firstTime=false;timeOut=_timeOut_/2;}
else{ 
f_img.src=imgUrl[now];
f_img.alt=imgAlt[now];
var f_imgLink = document.getElementById(‘f_imgLink’);
f_imgLink.href=imgLink[now];
f_text.innerHTML=imgText[now];
for (var i=0;i<count;i++) {eval(‘b’+i).className="button";}
eval(‘b’+now).className="on";  
now=(now>=imgUrl.length-1)?0:now+1;
timeOut=_timeOut_;  
}
theTimer=setTimeout("change()", timeOut);
}
function b_change(num){
window.clearInterval(theTimer);
now=num;
firstTime=false;
change();
}
try{  //ie版本
new ActiveXObject("DXImageTransform.Microsoft.revealTrans");
ver=1;
}
catch (e){ver=2;}
//表现层 start
with(document){
write(‘<div id="f_div">’);
write(‘<div id="f_imgDiv">’);
write(‘<a id="f_imgLink" target=’+target+’ href="’+imgLink[now]+’">’);
write(‘<img id="f_img" width=’+imgWidth+’ height=’+imgHeight+’ src="’+imgUrl[now]+’" alt="’+imgAlt[now]+’">’);
write(‘</a>’);
write(‘</div>’);
write(‘<div id="f_buttonDiv">’);
write(‘<div id="button_bg">’);  
for (var i=count;i>0;i–){  
if(i==now+1){write(‘<a id="b’+(i-1)+’" class="on" target="_self" href="javascript:b_change(‘+(i-1)+’)" onfocus="blur()" title="’+imgAlt[(i-1)]+’">’+i+’</a>’);}
else{write(‘<a id="b’+(i-1)+’"  target="_self" href="javascript:b_change(‘+(i-1)+’)" onfocus="blur()"  title="’+imgAlt[(i-1)]+’">’+i+’</a>’);}
}
write(‘</div>’);
if (ver==1){write(‘<div id="f_line"></div>’);}
write(‘</div>’);
write(‘<div id="f_text">’);
write(imgText[now]);
write(‘</div>’); 
write(‘</div>’);
}
//表现层 end
var f_img=document.getElementById(‘f_img’);
f_img.onmouseover=function(){window.clearInterval(theTimer);}
f_img.onmouseout=function(){theTimer=setTimeout("change()", timeOut2);}
var theTimer = setTimeout("change()", _timeOut_/2);

</SCRIPT>

2007年07月12日

       犹如坠入深渊般的无助 恐惧

       黑暗包围着我

       无法冲破自己的掌控

       i want , i want ,breaking the habit … but  i  can’t ,it’s so darkness.

2007年06月15日

       最近不是很好 其实我一直在努力的掌控自己 可结果往往和想的不一样

       我太追求完美了 太敏感了 有些事 有些东西 当你越想达到完美状态 最后却事与愿违

       我是一个很怕改变的人 怕环境的改变 怕生活的改变… 习惯了一种状态后 ..就不想再动了

       i’m so tired………………

        

      

2007年06月05日

需要一个外部JAR包: jspSmartUploadch.jar

<%@ page language="java" contentType="text/html; charset=gb2312"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="com.jspsmart.upload.SmartUpload"%>
<%@page import="com.jspsmart.upload.Files"%>
<%@page import="com.jspsmart.upload.File"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Insert title here</title>
</head>
<body>
<%
//事例话上传下载

SmartUpload su = new SmartUpload();
//初始化环境 pageContext为内置对象
su.initialize(pageContext);
//———————-设置属性————————–
//设置最大的文件大小
su.setMaxFileSize(1024*1024);
//设置总的文件大小
su.setTotalMaxFileSize(5*1024*1024);
//设置允许上传 和禁止上传 最好不要同时出现
su.setAllowedFilesList("jpg,png,jpeg");
su.setDeniedFilesList("exe,bat");
//上传
su.upload();
//保存
int i=su.save("/upload");
out.println("成功上传了"+i+"个文件");
//上传文件的集合
Files fs =su.getFiles();
for(int j=0;i<fs.getCount();++j){
 File f = fs.getFile(j);
 %>
 来自 :<%=f.getFieldName() %>
 文件名:<%=f.getFileName() %>
 上传路径:<%=f.getFilePathName() %>
 <hr>
 <%
 
}

另:需要在表单属性里面设置enctype="multipart/form-data" ,<input type="file" name="file1">

2007年05月16日

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class for Servlet: LoginTest
 *
 */
 public class LoginTest extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
 
 
 private static final long serialVersionUID = -7462485251572982227L;

 public LoginTest() {
  super();
 }    
 
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  doPost(request, response);
 }   
 
 
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  request.setCharacterEncoding("gb2312");
 
  
  //得到会话
  HttpSession session=request.getSession();
  Object o=session.getAttribute("isLogin");
  
  if(o!=null){
   String str=o.toString();
   if("ok".equals(str)){
    response.sendRedirect("index1.html");
    
   }
   
   
  }
  
  
  String acc=request.getParameter("account");
  String pwd=request.getParameter("pass");
  if("user".equals(acc)&&"123456".equals(pwd)){
   //
   session.setAttribute("isLogin","ok");
   response.sendRedirect("index1.html");
 
   
  }else{
   
   response.sendRedirect("index.html");
   
   
   
   
  }
  
  
  
  
 }          
}

2007年05月15日

       一个利用javaServlet操控Cookie的例子

package com.j2ee.cookie;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class for Servlet: CookieTest
 *
 */
 public class CookieTest extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
  
 private static final long serialVersionUID = 1L;

 
 public CookieTest() {
  super();
 }    
 
 
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  doPost(request, response);
 }   
 
 
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  boolean cookieFound=false;
  Cookie myCookie=null;
  Cookie[] cookieset=request.getCookies();
  
  response.setContentType("text/html;charset=gb2312");
  PrintWriter pw=response.getWriter();
  
  if(cookieset!=null){
   for(Cookie c:cookieset){
    if("logincount".equals(c.getName())){
     cookieFound=true;
     myCookie=c;
     break;
    }
   }
   if(cookieFound){
    int count=Integer.parseInt(myCookie.getValue());
    count++;
    if(count==5){
     pw.println("You are the one! Lucky~!");
    }
    else{
     pw.println("You are the   "+count);
    }
    myCookie.setValue(String.valueOf(count));
    myCookie.setMaxAge(60*60*24*30);
    response.addCookie(myCookie);
   }
   else{
    myCookie = new Cookie("logincount","1");
    myCookie.setMaxAge(60*60*24*30);
    response.addCookie(myCookie);
    
   }
   
  }
  else{
   myCookie = new Cookie("logincount","1");
   myCookie.setMaxAge(60*60*24*30);
   response.addCookie(myCookie);
  }
  
  
 }          
}

2007年05月14日

       从3月份开始 一直身体不太好 关键是胃

       上个星期做了个身体检查 验血 肝功能 一切正常

        然后做了个胃镜 慢性浅表性胃炎 医生开了点药 叫我要养胃

        身体不好 看见一切都是灰色的

       人总有怕的那一刻 请珍惜眼前的 关心周围的人       

2007年05月11日

      写的一个B/S模式例子 典型的3层架构 后台数据库为Mysql驱动  服务器端为Apache-Tomcat+Servlet

      前台表示层用JSP来处理

      以下为服务器端代码:

    //——————————————————————————————————————————

public class Student {
 private String name;
 private String pass;
 public Student(String name, String pass) {
  super();
  this.name = name;
  this.pass = pass;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getPass() {
  return pass;
 }
 public void setPass(String pass) {
  this.pass = pass;
 }
 
 
 }

//

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MysqlConnecter {
 
 private Connection con;
 public MysqlConnecter(String driver, String url, String user, String pass) {
  super();
  try {
   Class.forName(driver);
   con = DriverManager.getConnection(url,user,pass);
   
  } catch (ClassNotFoundException e) {
   
   e.printStackTrace();
  } catch (SQLException e) {
   
   e.printStackTrace();
  }
 
  
  
 }
 public Connection getCon() {
  return con;
 }
 public void setCon(Connection con) {
  this.con = con;
 }
 
 
}

 

//

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class OperateAll {
 private Connection con;
 private Student stu;
 private boolean is;
 public OperateAll(Student stu){
  this.stu=stu;
  String driver="com.mysql.jdbc.Driver";
  String url="jdbc:mysql://127.0.0.1/studb?useUnicode=true&characterEncoding=GBK";
  String user="root";
  String pass="521123";
  MysqlConnecter mysql=new MysqlConnecter(driver,url,user,pass);
  con=mysql.getCon();
  try {
   PreparedStatement ps = con.prepareStatement("select * from students where name = ? and pass=?");
   ps.setString(1,stu.getName());
   ps.setString(2,stu.getPass());
   ResultSet rs = ps.executeQuery();
   if(rs.next()){
    is=true;
    
   }
   else{
    is=false;
   }
   
  } catch (SQLException e) {
   
   e.printStackTrace();
  }
    
    
 }
 public boolean isIs() {
  return is;
 }
 public void setIs(boolean is) {
  this.is = is;
 }
 
 

}

//

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class for Servlet: Login
 *
 */
 public class Login extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
   
 /**
  *
  */
 private static final long serialVersionUID = 1L;

 public Login() {
  super();
 }    
 
 
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String name=request.getParameter("username");
  String pass=request.getParameter("pass");
  Student stu=new Student(name,pass);
  OperateAll op=new OperateAll(stu);
  response.setContentType("text/html");
  PrintWriter pw=response.getWriter();
  if(op.isIs()){
   pw.println("login");
  }
  else{
   pw.println("refuse");
  }
  
  
 }   
 
 
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  doGet(request, response);
 }          
}

 

2007年04月17日

       Mad]Q[FroG回归了 “霸王”Zacard因兵役的问题退役了

       火箭击败太阳 终于取得主场优势

       美国发生校园枪击案 死亡33人 .. ……………. .

       ……..

               

UML1997年诞生以来,受到无数厂商、组织、专家学者的追捧和拥护,短短几年时间,便有一统天下之势。提起建模语言,舍UML其谁?

UML相关标准

OMG组织作为影响力最大的面向对象技术的机构,早早便将UML收入囊中,力捧其为标准建模语言。OMGCORBA取得成功之后,最大的着力点便是MDA架构,而MDA架构的四大标准UMLMOFXMICWM中,围绕着UML的技术便有三种:UML本身自不必说,版本已经到了2.0MOF作为“建模语言的语言”,似乎就是为UML量身定做的,虽说MOF有能力创建出与UML并驾齐驱的建模语言,但是似乎没有看到谁这么干,大家只是在努力的发展UML的“方言”,例如UML Profile for CORBAUML Profile for EJB等等;XMI是“模型的标准存储交换格式”,为了解决不同的建模工具创建的模型不能互用的问题,OMG创建了XMI作为模型的存储交换标准。这样一来,UML工具更加可以大行其道,使用不同的建模工具创建的UML模型可以互相交流,只要它们都基于XMI

UML相关工具

工具的多寡与优劣可以看出某个技术的受欢迎程度,在建模工具中,不说100%,大概也有90%支持了UML语言。最出名的UML工具Rational Rose,被IBM收购了;Eclipse下面的UML工具EclipseUML让开发它的小公司Omondo也出名了;国内也有一个UML工具,听说效果也不错,就是楚凡科技的Trufun Plato 2005。至于其他国际上有点名气的UML工具,更是不胜枚举,几乎有点软件实力的国家,都有自己的UML工具。

当然,UML不仅仅出现在专用的UML工具中,它也频繁出现在最新的各种开发环境中。例如编程开发环境JBuilder,具有将代码转换为UML类图的功能;Together就更进一步,直接实现了代码和类图的同步转换;Eclipse作为最优秀的开放式开发平台,拥有众多的UML相关插件,除了前面提到的EclipseUML,比较有名的还有EMFUML2

UMLMDA出现之后,在OMG的概念中,成为了MDA的一个子集(虽然UML的名气远远大于MDA)。因此众多的MDA工具中,几乎都少不了UML功能。我认为很多MDA工具就是从UML工具直接改过来的。

UML使用现状

照理说来,如火如荼的标准和工具应该催生出如火如荼的应用才对,可是UML的使用状况实在不尽如人意。无论是身边的还是网络上的朋友,在项目中使用UML的都是凤毛麟角,即便使用了UML,也是在很小的范围内,完全没有发挥出1%的功效。现在总结一下目前我所知道的UML使用现状:

l         读代码时,用UML工具进行逆向工程,可以清晰的观察代码结构,方便理解代码。

l         写代码时,由于开发平台可以自动生成UML类图,因此有时观察UML类图得到比较清晰的代码结构。例如Together或者JBuilder等工具。当然,如果没有自动生成的UML图,大部分人也不会寻找其他工具去生成UML类图的。

l         撰写科技论文时,使用UML来表达系统架构或者系统流程等。

l         部分对UML非常熟悉的程序员,在开始写代码时,先画UML类图,然后利用工具生成代码,最后对代码进行扩展。

从上面的使用现状可以看出,很多人把UML当成一种可有可无的技术。即使使用了UML,也只是围绕着UML中的类图,其他的UML图都抛到一边去了。造成这种状况的原因,一方面固然是因为国内的正规大型软件项目比较少,软件工程技术起步很晚;另一方面是由于国内不管是架构师、系统分析员、软件工程师、程序员、测试人员等等实质上都是程序员而已,很多人是赶着鸭子上架成了架构师或者系统分析员的。这种状况下,软件工程的概念难以深入人心,UML更加成了一个国内项目的鸡肋。

看看国外的架构师、UML专家们,往往都是满脸大胡子,在计算机领域中浸淫了340年;而中国最古老的程序员,也只有十几年经验,除去在黑暗中摸索的几年,有十年以上开发经验的程序员少之又少。不经历几个大型项目,要使用软件工程技术是不可能的,也是不能起到什么效果的。因此,有人堂而皇之的撰文“UML的三大硬伤”,将UML驳斥得一无是处。高喊口号打倒某东西是很容易的,关键是打倒了UML何以取而代之?

程序员眼中的UML

既然国内90%以上的软件开发人员都是程序员,那么程序员眼中的UML到底应该是什么样子的呢?我很期望有一本好书能够让程序员们快速的掌握自己所需的UML知识,遗憾的是目前还没有看到这样的一本书。无论是“三友”的UML经典教材还是国内的一些“xx天精通UML”都不符合这样的要求。没有一本是“有中国特色的UML教材――一本写给程序员的UML入门书”。

作为一个程序员,我很了解其他同僚的心理,如果拿到一本书,翻了一个小时还没有找到可以runHelloWorld90%的人会大叫一声“去nmd”,然后把书扔进废纸堆。不能怪我们急功近利,在这个技术术语满天飞,连底层平台都动荡不安的年代,谁还有时间和兴趣看一些与自己无关的东西呢?

我很能想象一个程序员,好不容易空出时间来看看最近很热的UML技术,当他拿到一本UML入门以后,开始寻找对自己有用的东西。在开始的一个小时,满篇都是需求分析,use case,甚至书的作者还在饶有兴趣的介绍use case有六种译法:用例、用况、用案……对不起,老子一百年都没做过需求分析了,也不想知道这个狗屁的use case到底叫什么。于是开始后悔在china-pub上又白花了这么多银子。

还有些书上信誓旦旦的说“学好UML,走遍天下都不怕”,如果你做需求分析,你可以用UML和客户交流;如果你做系统分析员,你可以用UML设计系统;如果你做程序员,你可以用UML生成程序;如果你做测试员,你可以基于UML设计测试用例。而实际情况是什么呢?国内的客户有几个懂UML?懂UML的人差不多自己都可以把软件写出来了,还需要请你做需求分析么?别说客户了,上次听同学说和北京某大科研所的工程师们交流,无意中说起了UML,在场的竟然只有一个稍微了解,而且坚持认为那是一种画图工具(那位仁兄其实也没错,Visio不就是一个画图工具么)。

虽然状况如此不堪,但是UML确实是一个很优秀的“交流语言”、“代码生成工具”和“系统设计工具”。让我们擦干身上的献血,掩埋战友的尸体,睁大迷蒙的双眼来看清UML对程序员的作用。UML有九种图,作用各自不同,基本上涵盖了软件工程的各个方面,很多人就是不堪于忍受知识不足的困惑与“侮辱”(很多程序员认为一种技术自己看不懂就是对自己的侮辱),从而放弃了整片UML森林。他们怕的不是在UML这棵树上吊死,而是怕在UML森林里面迷路。但是我想说,知识学习的过程就是去芜存精,找出对自己有用的东西,然后掌握之。对于程序员来说,UML的价值就体现在三个方面:

一、UML是最好的交流语言,无论是与其他程序员交流,还是与领域专家、测试员或者用户交流。原因只有一点,UML是标准的,就像英语一样,无论多么该死,大家还是忙着把自己的论文改成英文的。当然,在小的领域可能有更好的交流方言,但是在大而长远的交流中,使用标准的交流语言是稳妥的。

二、UML是很好的代码生成工具,其实代码生成功能并不是由UML语言和规范提供的,而是由UML工具提供的,而且不同的UML工具提供的代码生成功能还不尽相同。例如Rose提供简单的代码框架生成,而Eclipse插件EMF可以生成功能丰富,提供了各种设计模式的代码包。无论如何,如果程序员可以从UML入手来写程序,比直接敲代码要高级那么一点点。从文档、版本控制、维护、测试等各方面来说,画UML类图比直接写代码都要高那么一点点。

三、UML是很好的系统设计工具。对于程序员来说,很少用到“设计”这个词,大部分时候我们都是在“编写”或者“实现”。但是勿庸置疑,程序员的许多工作中还是需要“设计”的。包和组件之间的依赖关系、复杂操作的流程、对象之间的关联和状态、程序的部署等等,都经常是程序员的工作。那么上面的四种情况可以用UML的组件图、序列图、对象图和部署图来设计。虽然,不同的程序员有不同的设计方法或者设计图例,不过,UML是标准的。不要忽视标准的力量,标准的东西意味着在全世界范围内都有可能会被看懂,不标准的东西可能出了你的办公室就没人能够清晰、准确的理解了。

—————————————————————————————-