点点滴滴
百度空间 | 百度首页 
 
文章列表
 
2009-04-17 14:06

1、链接地址:http://sourceforge.net/projects/c3p0/

下载最新的C3P0版本

2、将c3p0-0.9.1.2.jar放到toamcat/lib/下面

3、在conf中server.xml中<GlobalNamingResources>和</GlobalNamingResources>之间添加

   <Resource auth="Container"
    description="DB Connection"
    driverClass="oracle.jdbc.driver.OracleDriver"
    maxPoolSize="10"
    minPoolSize="2"
    acquireIncrement="2"
    name="jdbc/oratest"
    user="user"
    password="user"
    factory="org.apache.naming.factory.BeanFactory"
    type="com.mchange.v2.c3p0.ComboPooledDataSource"
    jdbcUrl="jdbc:oracle:thin:@192.168.0.0:1521:wwhdb" />

4、在web.xml中</web-app>前添加

   <resource-ref>
     <description>DB Connection</description>
     <res-ref-name>jdbc/oratest</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
</resource-ref>

5、测试网页

<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%//!
//final String JNDINAME = "java:comp/env/jdbc/oratest" ;
%>
<%

     Connection conn=null;
     try{
         InitialContext ctx = new InitialContext();
         DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/oratest");
         conn=ds.getConnection();
     }catch(NamingException ex){
         ex.printStackTrace();
     }
     out.println("111111");
     String sql="select * from msm002";
     PreparedStatement ps=conn.prepareStatement(sql);
     ResultSet rs=ps.executeQuery();
     while(rs.next()){
     %>
         字段1:<%=rs.getString(1)%> 字段2:<%=rs.getString(3)%><br>
     <%
     }
     if(rs!=null){
         rs.close();
         rs=null;
     }
     if(ps!=null){
         ps.close();
         ps=null;
     }
     if(conn!=null){
         conn.close();
         conn=null;
     }

%>

 
2008-10-10 13:37

今天遇到一个问题,需要在java程序中执行cmd命令,将数据插入数据库中,数据库为oracle。
部分代码如下:


String strcmd="cmd /c set user"
Runtime   r=Runtime.getRuntime();
Process   p=null;
p=r.exec(strcmd);  

上面的代码也可以直接写成
Process   process   =   Runtime.getRuntime().exec("cmd /c set user");    

关于strcmd,因为要完成的是将文档中保存的数据插入到数据库的表中,所以代码要麻烦一些。
strcmd="cmd /c   sqlldr userid=dbuser/dbuserpwd@db control=d:\\yuanshi.ctl ";

d:\\yuanshi.ctl 为一个临时文件,用来存储执行的程序。如
load data
infile 'C:\data.txt'
append into table table_name
fields terminated by whitespace
(dcstr1)

table_name 为要插入的数据表名,(dcstr1)为要插入的表中的列。
上面的代码是插入某表中一列数据,当为多列数据的时候,应改为:
load data
infile 'file.txt'
append into table table_name
fields terminated by ","
(dcstr1,dcstr2)

如果在数据插入之前,需要清空原来的数据,则改为:
load data
infile 'C:\data.txt'
truncate into table table_name
fields terminated by whitespace
(dcstr1)

执行该程序的服务器需要安装oracle的客户端,当在客户端安装不完整的情况下,执行该程序,有时也不会报错,只有查看数据库,才发现数据没有插入。检测oracle客户端是否支持此方法的办法,是在“运行”中通过cmd直接执行“sqlldr userid=dbuser/dbuserpwd@db control=d:\\yuanshi.ctl”。如果成功,会显示完成行数等数据,不成功,会提示错误,代码为“Message 2100 not found; No message file for product=RDBMS, facility=ULMessage 21 00 not found; No message file for product=RDBMS, facility=UL”。这样,我们就需要重新安装客户端,问题就解决了。
关于"cmd /c set user" 中“/c”的意思是命令执行后关闭Dos立即关闭窗口。

 
2008-04-25 15:09

        今天写了一个函数,在编译过程中没有问题,但是执行测试的时候,却提示

ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小

        去网上查找,发现确实有不少人遇到相同的问题,但是可能由于原因不同,所以解决办法也不同。关于答案,就五花八门了。我检查了自己的程序,变量的大小设置的不存在问题,单步执行的话,在最后返回的时候报错。说明程序本身不存在问题。那就要想想这个“缓冲区”是什么意思了。

      我使用的编译环境是TOAD,在Set Parameters 中设置的输入输出的测试值。后来发现RetVal的大小系统给自动默认为200,而我这边返回值肯定会超过200。所以是这里返回值的大小设置有问题,改到1000,问题就解决了。
       其实这个问题在实际使用的过程中是不会出现的,毕竟上面那些是测试环境下设置的变量大小。希望能给遇到相同问题的朋友帮助。

 
2008-03-27 17:18

       先前一直使用SQL Server 2000,而且没有遇到什么不爽的问题。今天接触vxml格式的网页,链接的时候用jsp,结果数据库却无论如何都不能链接,非常郁闷。一直查找原因,有人提示说是因为没有安装sp3的补丁,但是貌似我以前安装过,可是查看版本的时候,竟然是sp2。不管那么多了,反正还是重新安装比较好。于是安装过程中就遇到了问题,经过查找,在网上发现解决方法,大家共享一下吧!

一、SQL Server补丁版本的检查   

  SQL Server的补丁版本检查不如Windows 补丁版本检查直接,一个系统管理员,如果不了解SQL Server版本对应的补丁号,可能也会遇到一点麻烦,因此在这说明一下,通过这样的办法判别机器是安全的办法,不会对系统产生任何影响。 

  1、用Isql或者SQL查询分析器登录到SQL Server,如果是用Isql,请在cmd窗口输入isql -U sa,然后输入密码,进入;如果是用SQL查询分析器,请从程序中启动,输入sa和密码(也可以用windows验证)。  

  2、在ISQL中输入:   

  Select @@Version;

  go   

  或者SQL查询分析器中输入(其实如果不想输入,只要打开帮助的关于就可以了 

  Select @@Version;   

  然后按执行;

  这时会返回SQL的版本信息,如下:   

  Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 3)   

  其中的8.00.760就是SQL Server的版本和补丁号。对应关系如下:   

  8.00.194 -——————SQL Server 2000 RTM

  8.00.384 -——————(SP1)

  8.00.534 -——————(SP2)

  8.00.760 -——————(SP3)   

  这样我们就能看到SQL Server的正确版本和补丁号了。

  我们也可以用xp_msver看到更详细的信息。   

  二、补丁安装过程中常见问题   

  如果在安装补丁的时候遇到如下类似错误:

  1、安装过程中出现“以前进行的程序创建了挂起的文件操作,运行安装程序前,必须重新启动”,请按照下面步骤解决:

  a、重启机器,再进行安装,如果发现还有该错误,请按下面步骤   

  b、在开始->运行中输入regedit

  c、到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 位置

  d、选择文件->倒出,保存

  e、在右边窗口右击PendingFileRenameOperations,选择删除,然后确认

  f、重启安装,问题解决   

  如果还有同样问题,请检查其它注册表中是否有该值存在,如有请删掉。   

  2、在安装SQL Server SP3,有时候会出现:无论用windows认证还是混和认证,都出现密码错误的情况,这时查看临时目录下的sqlsp.out,会发现以下描述:   

  [TCP/IP Sockets]Specified SQL server not found.

  [TCP/IP Sockets]ConnectionOpen (Connect()).   

  其实这是SQL Server SP3的一个小bug,在安装sp3的时候,没有监听tcp/ip端口,可以按照以下步骤进行:   

  1、打开SQL server客户器网络实用工具和服务器网络工具,确保启用的协议中包含name pipe,并且位置在第一位.

  2、确保[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo]   

  "DSQUERY"="DBNETLIB".

  如果没有,请自己建立   

  3、停止mssql.

  4、进行安装.   

  这样就可以进行正确安装了。

 
2008-03-13 13:14

最近的网页设计中涉及到关于登录超时的判断,于是总结以下几点。

一、登录超时的时间长度设置

第一个方法:

在conf文件夹下有web.xml文件,其中

<session-config>
<session-timeout>30</session-timeout> //单位:分钟
</session-config>

表示超时的时间,默认为30分钟

第二个方法

在网页中设置

session.setMaxInactiveInterval(600);//单位:秒

二、根据session判断超时

这个是比较简单的办法

if(session.getAttribute("userid")==null||session.getAttribute("userid")=="")
{
out.println("<SCRIPT language=JavaScript>");
out.println("alert(\"登录超时,请重新登录!\");");
out.println("window.top.location='index.jsp'");
out.println("</script>");
}

如果session值为空,则返回登录页面,重新登录。

 
2008-01-28 10:48

      最近接触了Oracle的读写文件操作,于是使用到UTL_FILE包,再网上查找到一些有用的信息,在此和大家分享一下。

      以下翻译来自《Oracle Built-in Packages》的第六章,只翻译了部分,想了解的更详细,请参考原文。http://www.oreilly.com/catalog/oraclebip/chapter/ch06.html

FOPEN
IS_OPEN
GET_LINE
PUT
NEW_LINE
PUT_LINE
PUTF
FFLUSH
FCLOSE
FCLOSE_ALL

UTL_FILE.FOPEN 用法
FOPEN会打开指定文件并返回一个文件句柄用于操作文件。
所有PL/SQL版本:                 Oracle 8.0版及以上:
FUNCTION UTL_FILE.FOPEN (      FUNCTION UTL_FILE.FOPEN (
    location     IN VARCHAR2,      location     IN VARCHAR2,
    filename     IN VARCHAR2,      filename     IN VARCHAR2,
    open_mode    IN VARCHAR2)      open_mode    IN VARCHAR2,
RETURN file_type;                 max_linesize IN BINARY_INTEGER)
                                RETURN file_type;

参数

location
文件地址

filename
文件名

openmode
打开文件的模式(参见下面说明)

max_linesize
文件每行最大的字符数,包括换行符。最小为1,最大为32767

3种文件打开模式:
R 只读模式。一般配合UTL_FILE的GET_LINE来读文件。
W 写(替换)模式。文件的所有行会被删除。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用
A 写(附加)模式。原文件的所有行会被保留。在最末尾行附加新行。PUT, PUT_LINE, NEW_LINE, PUTF和FFLUSH都可使用

打开文件时注意以下几点:
文件路径和文件名合起来必须表示操作系统中一个合法的文件。
文件路径必须存在并可访问;FOPEN并不会新建一个文件夹。
如果你想打开文件进行读操作,文件必须存在;如果你想打开文件进行写操作,文件不存在时,会新建一个文件。
如果你想打开文件进行附加操作,文件必须存在。A模式不同于W模式。文件不存在时,会抛出INVALID_OPERATION异常。

FOPEN 会抛出以下异常
UTL_FILE.INVALID_MODE
UTL_FILE.INVALID_OPERATION
UTL_FILE.INVALID_PATH
UTL_FILE.INVALID_MAXLINESIZE

UTL_FILE.IS_OPEN用法
如果文件句柄指定的文件已打开,返回TRUE,否则FALSE

FUNCTION UTL_FILE.IS_OPEN (file IN UTL_FILE.FILE_TYPE) RETURN BOOLEAN;

UTL_FILE只提供一个方法去读取数据:GET_LINE

UTL_FILE.GET_LINE用法
读取指定文件的一行到提供的缓存。
PROCEDURE UTL_FILE.GET_LINE
   (file IN UTL_FILE.FILE_TYPE,
    buffer OUT VARCHAR2);

file
由FOPEN返回的文件句柄

buffer
读取的一行数据的存放缓存

buffer必须足够大。否则,会抛出VALUE_ERROR 异常。行终止符不会被传进buffer。

异常
NO_DATA_FOUND
VALUE_ERROR
UTL_FILE.INVALID_FILEHANDLE
UTL_FILE.INVALID_OPERATION
UTL_FILE.READ_ERROR


UTL_FILE.PUT用法
在当前行输出数据
PROCEDURE UTL_FILE.PUT
    (file IN UTL_FILE.FILE_TYPE,
    buffer OUT VARCHAR2);
file
由FOPEN返回的文件句柄
buffer
包含要写入文件的数据缓存;Oracle8.0.3及以上最大允许32kB,早期版本只有1023B

UTL_FILE.PUT输出数据时不会附加行终止符。

UTL_FILE.PUT会产生以下异常
UTL_FILE.INVALID_FILEHANDLE
UTL_FILE.INVALID_OPERATION
UTL_FILE.WRITE_ERROR

UTL_FILE.NEW_LINE
在当前位置输出新行或行终止符,必须使用NEW_LINE来结束当前行,或者使用PUT_LINE输出带有行终止符的完整行数据。

PROCEDURE UTL_FILE.NEW_LINE
   (file IN UTL_FILE.FILE_TYPE,
    lines IN NATURAL := 1);
file
由FOPEN返回的文件句柄
lines
要插入的行数

如果不指定lines参数,NEW_LINE会使用默认值1,在当前行尾换行。如果要插入一个空白行,可以使用以下语句:
UTL_FILE.NEW_LINE (my_file, 2);
如果lines参数为0或负数,什么都不会写入文件。

NEW_LINE会产生以下异常
VALUE_ERROR
UTL_FILE.INVALID_FILEHANDLE
UTL_FILE.INVALID_OPERATION
UTL_FILE.WRITE_ERROR
例子
如果要在UTL_FILE.PUT后立刻换行,可以如下例所示:
PROCEDURE add_line (file_in IN UTL_FILE.FILE_TYPE, line_in IN VARCHAR2)
IS
BEGIN
   UTL_FILE.PUT (file_in, line_in);
   UTL_FILE.NEW_LINE (file_in);
END;


UTL_FILE.PUT_LINE
输出一个字符串以及一个与系统有关的行终止符
PROCEDURE UTL_FILE.PUT_LINE
    (file IN UTL_FILE.FILE_TYPE,
    buffer IN VARCHAR2);
file
由FOPEN返回的文件句柄
buffer
包含要写入文件的数据缓存;Oracle8.0.3及以上最大允许32kB,早期版本只有1023B
在调用UTL_FILE.PUT_LINE前,必须先打开文件。
UTL_FILE.PUT_LINE会产生以下异常
UTL_FILE.INVALID_FILEHANDLE
UTL_FILE.INVALID_OPERATION
UTL_FILE.WRITE_ERROR

例子
这里利用UTL_FILE.PUT_LINE从表emp读取数据到文件:
PROCEDURE emp2file
IS
   fileID UTL_FILE.FILE_TYPE;
BEGIN
   fileID := UTL_FILE.FOPEN ('/tmp', 'emp.dat', 'W');

   /* Quick and dirty construction here! */
   FOR emprec IN (SELECT * FROM emp)
   LOOP
      UTL_FILE.PUT_LINE
         (TO_CHAR (emprec.empno) || ',' ||
          emprec.ename || ',' ||
          ...
          TO_CHAR (emprec.deptno));
   END LOOP;

   UTL_FILE.FCLOSE (fileID);
END;
PUT_LINE相当于PUT后加上NEW_LINE;也相当于PUTF的格式串"%s\n"。

UTL_FILE.PUTF
以一个模版样式输出至多5个字符串,类似C中的printf

PROCEDURE UTL_FILE.PUTF
    (file IN FILE_TYPE
    ,format IN VARCHAR2
    ,arg1 IN VARCHAR2 DEFAULT NULL
    ,arg2 IN VARCHAR2 DEFAULT NULL
    ,arg3 IN VARCHAR2 DEFAULT NULL
    ,arg4 IN VARCHAR2 DEFAULT NULL
    ,arg5 IN VARCHAR2 DEFAULT NULL);
file
由FOPEN返回的文件句柄
format
决定格式的格式串
argN
可选的5个参数,最多5个

格式串可使用以下样式
%s
在格式串中可以使用最多5个%s,与后面的5个参数一一对应
\n
换行符。在格式串中没有个数限制
%s会被后面的参数依次填充,如果没有足够的参数,%s会被忽视,不被写入文件

UTL_FILE.PUTF会产生以下异常
UTL_FILE.INVALID_FILEHANDLE
UTL_FILE.INVALID_OPERATION
UTL_FILE.WRITE_ERROR

UTL_FILE.FFLUSH
确保所有数据写入文件。
PROCEDURE UTL_FILE.FFLUSH (file IN UTL_FILE.FILE_TYPE);
file
由FOPEN返回的文件句柄

操作系统可能会缓存数据来提高性能。因此可能调用put后,打开文件却看不到写入的数据。在关闭文件前要读取数据的话可以使用UTL_FILE.FFLUSH。
典型的使用方法包括分析执行进度和调试纪录。
UTL_FILE.FFLUSH会产生以下异常
UTL_FILE.INVALID_FILEHANDLE
UTL_FILE.INVALID_OPERATION
UTL_FILE.WRITE_ERROR

UTL_FILE.FCLOSE
关闭文件
PROCEDURE UTL_FILE.FCLOSE (file IN OUT FILE_TYPE);
file
由FOPEN返回的文件句柄

注意file是一个IN OUT参数,因为在关闭文件后会设置为NULL
当试图关闭文件时有缓存数据未写入文件,会抛出WRITE_ERROR异常

UTL_FILE.FCLOSE会产生以下异常
UTL_FILE.INVALID_FILEHANDLE
UTL_FILE.WRITE_ERROR

UTL_FILE.FCLOSE_ALL
关闭所有已打开的文件
PROCEDURE UTL_FILE.FCLOSE_ALL;

在结束程序时要确保所有打开的文件已关闭,可使用FCLOSE_ALL
也可以在EXCEPTION使用,当异常退出时,文件也会被关闭。
EXCEPTION
   WHEN OTHERS
  
THEN
      UTL_FILE.FCLOSE_ALL;
      ... other clean up activities ...
END;

注意:当使用FCLOSE_ALL关闭所有文件时,文件句柄并不会标记为NULL,使用IS_OPEN会返回TRUE。但是,那些关闭的文件不能执行读写操作(除非你再次打开文件)。
UTL_FILE.FCLOSE_ALL会产生以下异常
UTL_FILE.WRITE_ERROR

 
2007-08-22 16:33

最近又在开发新的项目,很是忙碌。

在工作过程中,这次接触到文件上传包括上传TXT格式,还有图片、视频等。
下面我就要介绍在JSP环境下,实现上传的方法。
第一、上传整个的图片、视频、TXT文件。
首先我们在第一个页面中选择好要上传的文件,这个比较简单,部分代码如下:

<form name="form1" method="post" action="" enctype="multipart/form-data">
<input type="file" name="txt_file2" id="txt_file2">
</form>
这样,我们在它的提交页面里就可以把“txt_file2”的内容取出来。

第二个页面中我们首先要把com.jspsmart.upload.*引入,所以在页面上方要添加语句
<%@ page import="com.jspsmart.upload.*" %>
<%@ page import="java.io.*"%>

下面真正的代码就开始了。
<%!
   int allbyte=81920;     ---设置上传文件的大小
%>
<%
   int alladdbyte=0;
%>
<%
//取出上传文件的路径
String s_txt=mySmartUpload.getRequest().getParameter("txt_file2");

String separator=java.io.File.separator;
   
   
//实例化上载bean
com.jspsmart.upload.SmartUpload mySmartUpload=new com.jspsmart.upload.SmartUpload();
//初始化
mySmartUpload.initialize(pageContext);
//上载文件
mySmartUpload.upload();

//循环取得所有上载的文件
     String childlist[] =new String[mySmartUpload.getFiles().getCount()];    //定义一个数组
     String myFileName="";
     int fileSize=0;
     String   ext_="";    
     for (int i=0;i<mySmartUpload.getFiles().getCount();i++){
          //取得上载的文件
          com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(i);
          if (!myFile.isMissing())
            {
             //取得上载的文件的文件名
              myFileName=myFile.getFileName();
       childlist[i]=myFileName;
              //取得不带后缀的文件名
              String   suffix=myFileName.substring(0,myFileName.lastIndexOf('.'));
              //取得后缀名
              String ext= mySmartUpload.getFiles().getFile(i).getFileExt();
              ext_=ext;
       //取得文件的大小  
              fileSize=myFile.getSize();
              alladdbyte=alladdbyte+fileSize;
              String aaa=myFile.getContentString();
       byte[] filecontent = new byte[fileSize];
       for (int j=0;j<fileSize;j++){
           filecontent[j]=myFile.getBinaryData(j);
         }
       String str = new String(filecontent,"GBK");
           }else {
                     out.println(("上载失败!!!").toString()); }
              }//与前面的if对应

       int ll=1;
       if(ext_.equals("")||ext_.equals("exe")||ext_.equals("bat")||ext_.equals("jsp")||ext_.equals("htm")||ext_.equals("html")){
      ll=0;
      out.print("<SCRIPT language=JavaScript>");
      out.print("alert(\"你上传的文件不正确!\");");
      out.print("history.back();");
      out.print("</SCRIPT>");  
        }
       int ss=1;
       if(alladdbyte>allbyte){
      ss=0;
      alladdbyte=0;
      out.print("<SCRIPT language=JavaScript>");
      out.print("alert(\"你上传的文件太大!\");");
      out.print("history.back();");
      out.print("</SCRIPT>");  
       }
       for (int k = 0; k<childlist.length; k++) {
      for (int l = k+1; l<childlist.length; l++) {
   if (!(childlist[k]==null||childlist[k].equals("")||childlist[k].equals("null")))  
   {    
         if(childlist[k].equals(childlist[l])){
       tt=0;
       out.print("<SCRIPT language=JavaScript>");
       out.print("alert(\"上传文件名称相同!\");");
       out.print("history.back();");
       out.print("</SCRIPT>");     
          }
   }else{
         tt=0;
    out.print("<SCRIPT language=JavaScript>");
    out.print("alert(\"你上传的是空文件!\");");
    out.print("history.back();");
    out.print("</SCRIPT>");     
   }
       }  
}

         // 判断是否上传
    if(ss==0||tt==0||ll==0){
    }else{
                for (int i=0;i<mySmartUpload.getFiles().getCount();i++){
      com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(i);
     
                    //上传到的文件夹路径
      String SavePath="D:\file"
                    //建立文件夹
      java.io.File file=new java.io.File(SavePath);
      if(!file.exists()){
    file.mkdirs();
      }
                    String trace=SavePath+myFileName;
      //将文件保存在服务器端
      myFile.saveAs(trace,mySmartUpload.SAVE_PHYSICAL);
      //取得不带后缀的文件名
      String   file_name=myFileName.substring(0,myFileName.lastIndexOf('.'));
      //取得后缀名
      String   file_ext= mySmartUpload.getFiles().getFile(i).getFileExt();

      java.io.File f=new java.io.File(SavePath+myFileName);
                    //文件上传后的名字
                    String shangchuan_name="";
      String new_name=String.valueOf(shangchuan_name)+"."+file_ext;
                    //修改名字
      java.io.File L=new java.io.File(SavePath,new_name);
      f.renameTo(L);
                    //上传后文件的最终路径,包括后缀    
      String newpathname=SavePath+new_name;

                  }
    
     }

      }

%>
现在你就能够把你想上传的文件传到你指定的地方了。


第二、删除文件

如果在同一个文件夹里面,存在与你想上传文件相同名字的文件,那么我们就可以把他删除之后再重新建立文件。删除代码如下:

         //要删除的文件所在文件夹
String SavePath="D:\file";
         //上传文件要存为的名字
         String filename1="11";
java.io.File file1=new java.io.File(SavePath);
if(file1.exists()){
       String childs[] = file1.list();
       for (int j = 0; j < childs.length; j++) {
           String childName = childs[j];
                  //所上传文件的不带后缀的文件名
           String   nohouzuiname=childName.substring(0,childName.lastIndexOf('.'));
           if(nohouzuiname.equals(filename1)){
        String path=SavePath+childName;
        java.io.File delefile=new java.io.File(path);   
        delefile.delete();
           }
      
              }
    
}

 
2007-06-01 16:39

        最近在制作网页的过程中,用到了热点这个方法。于是在网上搜集了一些信息。

        把一幅图片划分为不同的作用区域并链接到不同网页的标记,那就是<area>地图作用区域标记。

        <area>标记主要用于图像地图,通过该标记可以在图像地图中设定作用区域(又称为热点),这样当用户的鼠标移到指定的作用区域点击时,会自动链接到预先设定好的页面。其基本语法结构如下:

<area   
   class=type   
   id=Value   
   href=url   
   alt=text   
   shape=area-shape   
   coods=value>   
     其中。class和id:是分别指定热点的类型和id号。   
   alt:用于设定热点的替代性文字。   
   href:用于设定该热点所链接的url地址。   
   shape和coords:是两个主要的参数,用于设定热点的形状和大小。其基本用法如下:   
   <area    shape="rect"    coords="x1,    y1,x2,y2"    href=url>表示设定热点的形状为矩形,左上角顶点坐标为(X1,y1),右下角顶点坐标为(X2,y2)。   
   <area    shape="circle"    coords="x1,    y1,r"    href=url>表示设定热点的形状为圆形,圆心坐标为(X1,y1),半径为r。   
   <area    shape="poligon"    coords="x1,    y1,x2,y2    ......"    href=url>表示设定热点的形状为多边形,各顶点坐标依次为(X1,y1)、(X2,y2)、(x3,y3)    ......。   
     <area>标记是在图像地图中划分作用区域的,因此其划分的作用区域必须在图像地图的区域内,所以在用    <area>    标记划分区域前必须用HTML的另一个标记<map>来设定图像地图的作用区域,并为指定的图像地图设定名称,该标记的用法很简单,即<map    name="图像地图名称">    ......    </map>。   
     下面通过一个例子来说明这两个标记的用法:   
        
     这里是一幅新书架的图片,要做的效果是:当鼠标点“网址大全”这本书时,新开一窗口,显示关于这本书的简介及订单的网页(urlall.htm);当鼠标点“网站设计攻略”这本书时,新开一窗口,显示关于这本书的简介及订单的网页(siteall.htm);当鼠标点“网页技巧大全”这本书时,新开一窗口,显示关于这本书的简介及订单的网页(pagejqlall.htm)。制作方法:   
     1、插入图片,并设置好图像的有关参数,且在<img>标记中设置参数usemap="newbook"    ismap,以表示对图像地图(newbook)的引用;   
     2、用<map>标记设定图像地图的作用区域,并取名为:newbook;   
     3、分别用<area>标记针对三本书的位置划分出三个矩形作用区域,并设定好其链接参数href。   
     制作完成,本例的源代码如下:   
   <img    src="image/htmlp3.gif"    width="207"    height="148"    alt="新书架"    hspace="10"    align="left"    usemap="#newbook"    border="0">   
   <map    name="newbook">   
   <area    shape="rect"    coords="56,69,78,139"    href="urlall.htm"    target="_blank"    alt="这里收集十万多个网址。"    title="这里收集十万多个网址。">   
   <area    shape="rect"    coords="82,70,103,136"    href="siteall.htm"    target="_blank"    alt="网站设计师的启蒙读本。"    title="网站设计师的启蒙读本。">   
   <area    shape="rect"    coords="106,68,128,136"    href="pageall.htm"    target="_blank"    alt="网页制作者不可不读的书。"    title="网页制作者不可不读的书。">   
   </map>   
    
     在制作本文介绍的效果时应注意的几点:   
     1、在<img>标记不要忘记设置usemap、ismap参数,且usemap的参数值必须与<map>标记中的name参数值相同,也就是说,“图像地图名称”要一致;   
     2、同一“图像地图”中的所有热点区域都要在图像地图的范围内,即所有<area>标记均要在<map>与</map>之间;   
     3、在<area>标记中的    cords    参数设定的坐标格式要与shape参数设定的作用区域形状配套,避免出现在shape参数设置的矩形作用区域,而在cords    中设置的却是多边形区域顶点坐标的现象出现。    

 
2007-05-11 10:38

        最近不小心安装的Windows XP的一个自动更新,即Windows Genuine Advantage Notification (KB905474)补丁,更新后会出现每次开机出一个提示,启动后在托盘里还有个图标,时不时的提示你。真的是很烦人啊。

       今天上网查找相关资料,发现了一些解决办法。

       首先介绍一下微软弄这个补丁的原因。

    微软宣布将在中国推出针对Windows XP的Windows正版增值计划通知(WGA Notifications)。Windows正版增值计划通知作为一种验证工具,可以帮助用户识别他们所运行的Windows 软件是否为正版,并帮助非正版用户采取适当的行动以保护其电脑系统免受使用假冒软件所带来的危害和风险。

     Windows正版增值计划通知于2007年2月20日开始在全球陆续推出,并于2007年3月27日起在中国实施.届时用户可通过自动更新、Windows 更新及微软下载中心获得Windows正版增值计划通知并选择是否安装进行验证。

     本次发布的Windows正版增值计划通知与先前发布的版本相比,采用了新的安装向导,置入并提供更多关于此项计划的工作机理以及验证结果等信息,对用户进行指导并提供更多的信息。Windows正版增值计划通知发布后,用户可自愿选择是否安装Windows正版增值计划通知。在验证过程中,微软将提示消费者会收集包括Windows产品密钥、产品 ID或系统 ID、制造商、版本等信息来验证Windows 副本。

     验证结果主要包括三种情况:一、用户顺利通过验证;二、无法通过验证,用户可能是假冒伪劣软件的受害者;三、因为信息不足无法确定Windows副本是否为正版软件。

     当用户通过验证时,系统不会出现任何异样,用户可继续享受正版微软软件所带来的价值。当用户无法通过验证时,用户在之后登录 Windows XP 账户时会出现“您可能是软件盗版的受害者”的对话框,用户可以根据对话框提示选择“立即解决”或“以后解决”;系统托盘也将会间歇性地弹出“通知”气球提示用户,用户也可以选择关闭此项讯息提示.(会一直骚扰到你抓狂)如用户需要了解更信息,可以直接链接到Windows 正版增值计划验证失败网页,获取更多关于正版Windows软件信息。由于收集信息不足无法确认Windows 副本是否为正版软件时,微软将向用户提供出现此情况的详细信息及解决此问题的步骤。

解决方法:

一.1、关闭内存中的wgatray.exe进程

     2、到system32目录下把wgatray.exe改名为wgatray1.exe;把wgalogon.dll改名为wgalogon1.dll,重起电脑就不会有那个提示了

二.Windows Genuine Advantage 通知 (KB905474)
     Windows Genuine Advantage 通知工具可向您通知您的 Windows 副本是否为正版的。 如果发现您的系统不是正版的,该工具将帮助您获得 Windows 的许可副本。 详细信息...
     这个补丁是不能打的.因为MS在收集用户的信息.
     更新了Windows Genuine Advantage Notification (KB905474)补丁后,会出现每次开机出一个提示,启动后在托盘里还有个图标的后果,网上流传在控制面板的添加删除程序中可以卸载,其实在这里根本不能卸载,在进程中也不能中止(进程名是wgatray.exe),在注册表中也搜不到相关wgatray.exe的项,但可以打开运行——输入REGEDIT,进入注册表,然后找HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\WgaLogon, 删除WgaLogon 重新启动(一定要重起要不然删不了C盘的文件),wgatray.exe就不会自动启动了,再找到你装系统的那个盘比如C盘:C\windows\system 32中的wgatray.exe删除, 再搜索一下, 在另外的文件夹下还有,统统删除,终于解决了。但是以后更新时需要注意,不能再更新这个补丁了。

三.比较简单的办法,使用工具

     RemoveWGA 是一个专门用来清除 WGA 的小程序,使用者只要通过它,就可以阻止微软的 WGA 在系统每次启动时企图连回微软网站的动作,且使用它并不需要担心微软的正版验证机制,你还是一样能够正常的使用 Windows Update 的功能,两者之间并没有任何冲突。
RemoveWGA 1.1
http://www.onlinedown.net/soft/6914.htm

我就是用这个卸载掉的,很简单

 
2007-04-25 11:19

  刚才不幸的发现电脑中病毒了,是特洛伊Exploit-ANIfile.c木马,在C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files\Content.IE5\下面。我使用的是MACFEE杀毒软件,结果它只能提示,却不能清除。于是赶紧上网查找相关信息,收获不大。下面转载一段“发现这是一个微软的最新漏洞。动态图标文件(.ani)存在一个溢出漏洞,可以让人执行任何代码。“购买流量”的人先把有问题的代码放进ani文件,然后伪装成jpg。这样,浏览网站的人不知不觉就会中木马病毒,计算机就任由别人操控,QQ、密码、文件,别人想要什么就可以拿什么,刷网站排名,流量作弊更是不在话下。末了还能把这台中了木马病毒的“肉机”转卖给别人作黑客攻击使用。”
  其实最重要的问题是如何清除这个病毒。刚开始的时候我去临时文件夹下面把所有的临时文件全删除了,可是后来发现这个病毒还是会出现。本人最喜欢的方式是手动删除,但是查找一番下来,只有用杀毒软件解决的办法了。

找到一篇介绍查杀方法的文章,一起分享。
        可以用[凝逸反毒 v3.0]查杀,这个杀毒软件可以在一下地址下载:

       主站 http://503165656.ys168.com
       天空软件站 http://www.skycn.com/soft/32883.html
       华军软件园 http://www.onlinedown.net/soft/56156.htm

       下载后记得要先升级病毒库,未注册版的也可以升级,升级按扭位于软件左边菜单栏“服务”中有“更新”;更新后点击“扫描”中的“扫描病毒”。在右边“搜索组”中填加“*.jpg,”(不包括引号),因为我发现的病毒都在jpg图片文件中,如果不放心可以将“搜索组”中的文件后缀名全部删除掉,改为“*.*”(不包括引号)。

        查杀完后可以到下面的地址下载相应的补丁:

       http://bbs.janmeng.com/viewthread.php?tid=559352&extra=page%3D1
       http://www.eeye.com/html/research/tools/WindowsANIZeroDayPatchSetup.exe

       注:该补丁为第三方补丁。

 
     
 
背景音乐
 
 
 
个人档案
 
forhh

天津 
上次登录:
7月 2日
加为好友
 
   
 
最新照片
 
   
 
订阅我的空间
 
已有人次访问本空间
 
订阅RSS  什么是RSS?

您也想拥有这样的空间?请点此申请。
     
 
最近访客
 
 

薰銥_dё誮語

9夏寒

妖妖记

皓月如我

zyzx1986

天使我爱你555

初级漫画fan

农夫草堂
     


©2009 Baidu