posts - 119, comments - 62, trackbacks - 0, articles - 0

这是进行上传

import java.sql.*;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.jspsmart.upload.*;

public class UpLoad extends HttpServlet {

    private ServletConfig config;
    /**
     * Init the servlet
     */
    final public void init(ServletConfig config) throws ServletException {
        this.config = config;
    }

    final public ServletConfig getServletConfig() {
        return config;
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("============UpLoad begin ddd=============");
        String id = null;
        SmartUpload mySmartUpload = new SmartUpload();
        PrintWriter out = response.getWriter();
        java.io.File file=null;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (java.lang.ClassNotFoundException e) {
            System.err.print("ClassNotFoundException: " + e.getMessage());
        }

        try {
            //Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@10.216.0.2:1521:ORCL", "test", "test");

            conn.setAutoCommit(false); //设置手动提交,以提高性能。
            Statement stmt = conn.createStatement();
            // Initialization
            mySmartUpload.initialize(config, request, response);

            mySmartUpload.setMaxFileSize(500 * 1024);

            // Upload
            mySmartUpload.upload();

            //取得text框中的数据
            id = mySmartUpload.getRequest().getParameter("id");

            //取得文件和文件名
            com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);
            String fileName = myFile.getFileName();

            if (!myFile.isMissing()) {
                //save data
                myFile.saveAs(fileName, mySmartUpload.SAVE_PHYSICAL);
                System.out.println("============fileName=" + fileName + "====");
                file = new java.io.File(fileName);

                java.io.InputStream inStream = new java.io.FileInputStream(file);

                int fileSize = myFile.getSize();
                byte[] bytes = new byte[fileSize];
                System.out.println("============fileSize=" + fileSize + "====");

                //将数据插入到表中
                String strSql = "insert into test(id,name,content) values(’" + id + "’,’" + fileName + "’,empty_blob())";
                stmt.execute(strSql);

                ResultSet rs = stmt.executeQuery("select content from zyw_test where id=’" + id + "’ for update ");
                if (rs.next()) {
                    oracle.sql.BLOB blob = ( (oracle.jdbc.OracleResultSet) rs).getBLOB("content");
                    OutputStream outStream = blob.getBinaryOutputStream();
                    inStream.read(bytes);
                    outStream.write(bytes);
                    outStream.flush();
                    stmt.execute("commit");
                    outStream.close();
                }
                inStream.close();
                stmt.close();

                if(file!=null)//删除文件
                    file.delete();

                out.println("upload sucess");
            } else {
                out.println("no file");
            }
        } catch (Exception ex) {
            if(file!=null)
                file.delete();
            out.println("upload fail");
            ex.printStackTrace();
        }

        System.out.println("============UpLoad end=============");
    }
}

这是下载,进行显示图片


import java.sql.*;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class DownLoad extends HttpServlet{
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        doPost(request,response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        System.out.println("======DownLoad begin=====");
        try{
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@10.216.0.2:1521:ORCL","test","test");
            Statement stmt=conn.createStatement();
            String id=request.getParameter("id");
            String sql="SELECT id, name, content FROM test where id=’"+id+"’";
            ResultSet rs=stmt.executeQuery(sql);
            if(rs.next()){
                Blob blob = rs.getBlob("content");
                byte[] ab = blob.getBytes(1, (int)blob.length());
                response.setContentType("image/jpeg");
                ServletOutputStream op = response.getOutputStream();
                op.write(ab);
                op.flush();
                op.close();
            }
        }catch(Exception ex){
            ex.printStackTrace();
        }
        System.out.println("======DownLoad end=====");
    }
}

posted @ 2006-07-24 23:59 Kevin Meng 阅读(824) | 评论 (0)编辑 收藏

我们在写OA的时候经常遇到的问题就是员工图片档案的储存问题,解决这个问题有两个方法,

1.JSP/html页面里面读取web服务器上的图片,也就是把图片放到(上传)到web 服务器上,然后用html 语句读取:

<img src=" 绝对或相对路径 " border="0" />

2.就是上传到数据库里面(oracle).关于oracle 数据库,它支持blob, 和clob, 分别对应着图片和文本(长字符串)操作

由于性能原因,我们还是要采用第二种方法,而且存到数据库里面比较容易管理,是吧?

 

首先,我们要解决上传问题,这里采用普遍使用的apache commons 组件里面的FileUpload class.

具体步骤如:

 

DiskFileUpload dfu=new DiskFileUpload();

  dfu.setSizeMax(100000000);

  dfu.setSizeThreshold(100000);

  dfu.setRepositoryPath("f:\\public");

 

  try{

  List fileItems=dfu.parseRequest(request);

  Iterator i=fileItems.iterator();

 

  while(i.hasNext()){

  FileItem fi=(FileItem)i.next();

  if(!fi.isFormField()){

  name=fi.getName();                    

  size=fi.getSize();                    

  if((name==null||name.equals(""))&&size==0)

  continue;

                        }

  name=fi.getName();

  size=fi.getSize();

  (InputStream)is=fi.getInputStream();

 

                    }

                    

上面的代码是web服务器接受上传的代码,参考文件已经在我上篇写的上传文本文件里给出,今天,终于想明白了:

dfu.setRepositoryPath("f:\\public"); 的意思

原来是转义字符也就是说\n\t等而要打印反斜杠要用\\,其实这个问题原先已经知道,可是由于经验没有写过图片上传处理什么的,觉得很高深,也很可怕,哈哈,心里有点畏惧.看来基础的东西,那怕一点点小细节也很重要,接着还有下面的java IO 问题.刚才读core java 的时候突然发现在讲io的时候特意提醒了这个问题,可是我没有注意!

 

通过上面的代码已经实现文件上传了.然后,我们要实现JDBC数据源链接,目的是要把数据插入到oracle.

                  

  Context ctx=new InitialContext();

  DataSource ds=(DataSource)ctx.lookup("jdbc/asdbCoreDS");

  conn=ds.getConnection();

  conn.setAutoCommit(false);

关于要import java.sql.* javax.sql.* java.naming.* 不再详细叙述了

接着根据很有用的一篇文章的提示,插入blob类型一定要先1.插入一个空的

  String insert=" insert into uploadpicture "+

                " values(?, empty_blob()) "     ;

2.然后找到这个blob的oracle 里面的游标:

String findCursor=" select content "+

                    " from uploadpicture "+

                    " where name=?  for update ";

注意这个for update(注意!!!必须加for update,这将锁定该行,直至该行被修改完毕,保证不产生并发冲突。这里还是难以理解,先记下来吧)

3.然后再修改

String update=" update uploadpicture  "+

                " set content=? "+

                " where name=? ";

这里的问号是为PreparedStatement参数处理而写的!

 

写这个程序用到了oracle.sql.BLOB class ,这个类是用来操作BLOB数据类型的

当我们通过ResultSet 对象得到

blob=(BLOB)rs.getBlob(1);

的时候我不知道如何处理了,Blob 是什么?String, int ,long? 我现在也不明白!估计CSDN上的人也不明白,否则我发个帖子半天没有人回答,也许是很烂,也许是太简单了,大家不屑一顾,看来我还要继续追赶!

不发牢骚了,回到程序里(总觉得自己的发散思维很强,看来写程序的时候不能这样,多亏java 是纯面向对象语言,如果是过程就麻烦了)

我们如何处理这个blob 呢?回答是,不管它是什么,直接写入  BufferedOutputStream out1 =new BufferedOutputStream(blob.getBinaryOutputStream());

这里是建立了缓冲写如blob 的流(注意getBinaryOutputStream()已经不被赞成使用了,一定有更优秀的方法替代!),说到流,我到现在还有点晕,类很多,不知道究竟用哪个好!

基础的东西非常重要,这曾经是我的口头禅,这里用到了流的读入写和写入,有些流是从文件或其它位置上读取字节(如, FileInputStream),有写流是把字节组合成有用的数据(如, DataInputStream).我们读取数字的时候,需要首先建议一个FileInpuStream, 然后, 再把该类的对象传递给DataInputStream

FileInputStream fin=new FileInputStream(“emp.dat”);

DataInputStream din=new DataInputStream(fin);//把fin传递给din

double s=din.readDouble();

默认情况下,流是没有缓冲的, 如果使用缓冲就是

DataInputStream din=new DataInputStream(

new BufferedInputStream(new FileINputStream(“emp.dat”)));

 

有了这点理解也很管用,

  BufferedOutputStream out1 =new BufferedOutputStream(blob.getBinaryOutputStream());

就是建立一个缓冲写的对象到blob.注意这里的out1 不是out,否则程序运行的时候不能打印了temp 数据了!

已经准备好如何写了, 可是如何读呢?

BufferedInputStream in=new BufferedInputStream(is);

在我们上传的时候  (InputStream)is=fi.getInputStream();

读取图片为输入的流.保存为is 对象,然后就用到这里了,准备好了读和写了,我们开始干活:

int c;

  while((c=in.read())!=-1) {out1.write(c);}

  in.close();

  out1.close();

通过缓冲一个个读数据,然后一个个写数据.-1 为文件的末尾,

最后当读写完成后我们要关闭读写对象!

程序分析就是这样,以后还要对此问题进行研究,最后还要注意,

<%@ page contentType="image/jpeg;charset=GBK"%>

不是

<%@ page contentType="text/html;charset=GBK"%>

否则是以文字显示图片---乱码.

 

这里研究了上传图片到oralce 里面的程序,关于显示还要麻烦一点,借助资料我实现了,明天再研究一下.

 

 //插入上传图片到数据库
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<%@ page import="org.apache.commons.*"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="oracle.sql.*"%>
<html>
 
 
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    <title>getPicture.jsp</title>
  </head>
 
 
 
 
  <body>
 
  <%
  request.setCharacterEncoding("GBK");
   
 
  String name=null;
  long size=0;
 
  Connection conn=null;
  String insert=" insert into uploadpicture "+
                " values(?, empty_blob()) "     ;
 
  String findCursor=" select content "+
                    " from uploadpicture "+
                    " where name=?  for update ";
 
  String update=" update uploadpicture  "+
                " set content=? "+
                " where name=? ";
  BLOB blob=null;
    InputStream is=null;
 
  DiskFileUpload dfu=new DiskFileUpload();
  dfu.setSizeMax(100000000);
  dfu.setSizeThreshold(100000);
  dfu.setRepositoryPath("f:\\public");
 
  try{
  List fileItems=dfu.parseRequest(request);
  Iterator i=fileItems.iterator();
 
  while(i.hasNext()){
  FileItem fi=(FileItem)i.next();
  if(!fi.isFormField()){
  name=fi.getName();                   
  size=fi.getSize();                    
  if((name==null||name.equals(""))&&size==0)
  continue;
                        }
  name=fi.getName();
  size=fi.getSize();
  is=fi.getInputStream();
 
                    }
                   
  Context ctx=new InitialContext();
  DataSource ds=(DataSource)ctx.lookup("jdbc/asdbCoreDS");
  conn=ds.getConnection();
  conn.setAutoCommit(false);
 
  //step 1
  PreparedStatement ps=conn.prepareStatement(insert);
  ps.setString(1, name);
  int a=ps.executeUpdate();
  if(a>0)
  out.println("insert success!"+"<br>");
 
  //step 2
  ps=conn.prepareStatement(findCursor);
  ps.setString(1, name); 
  ResultSet rs=ps.executeQuery();
  while(rs.next())
  {
  blob=(BLOB)rs.getBlob(1);
 
 
   out.println("find cursor success!"+"<br>");
   out.println("cursor            :"+blob+"<br>");
  //step 3
  ps=conn.prepareStatement(update);
  ps.setBlob(1, blob);
  ps.setString(2, name);
  ps.executeUpdate();
  ps.close();
  BufferedOutputStream out1 =new BufferedOutputStream(blob.getBinaryOutputStream());
  BufferedInputStream in=new BufferedInputStream(is);
  int c;
  while((c=in.read())!=-1) {out1.write(c);}
  in.close();
  out1.close();
  out.println("update success!"+"<br>");}
  conn.commit();
  }
 
  catch(SQLException se)
  {se.printStackTrace();}
  catch(FileUploadException fue)
  {fue.printStackTrace();}
  %>
 
 
  </body>

</html>


//显示数据库里面的图片

<%@ page contentType="image/jpeg;charset=GBK"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="java.io.*"%>
<%@ page import="com.sun.image.codec.jpeg.*"%>
<%@ page import="javax.imageio.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.awt.image.*"%>


<html>
 
 
 
  <head>
    <meta http-equiv="Content-Type" content="image/jpeg; charset=GBK">
    <title>showDBImage.jsp</title>
  </head>
 
 
 
  <body>
  <%
  String showImage=" select * "+
                   " from uploadpicture "+
                   " where name=´TXC with snow.JPG´ " ;
  Connection conn=null;
  BufferedInputStream inputImage=null;
 
 
  try{
  Context ctx=new InitialContext();
  DataSource ds=(DataSource)ctx.lookup("jdbc/asdbCoreDS");
  conn=ds.getConnection();
  Statement st=conn.createStatement();
  ResultSet rs=st.executeQuery(showImage);
  while(rs.next())
  {
  oracle.sql.BLOB blob=(oracle.sql.BLOB)rs.getBlob("content");
  inputImage =new BufferedInputStream(blob.getBinaryStream());
  /*String name=rs.getString(1);
  String content=rs.getString(2);
  out.println(name+"<br>");*/}
 
  BufferedImage image=null;
  image=ImageIO.read(inputImage);
 
  ServletOutputStream sos=response.getOutputStream();
  JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(sos);
  encoder.encode(image);
  inputImage.close();
  conn.commit();
 
  }
  catch(SQLException se)
  {se.printStackTrace();
  conn.rollback();  }
  catch(IOException ie)
  {ie.printStackTrace();} 
  %>
 
  </body>


</html>

posted @ 2006-07-21 16:41 Kevin Meng 阅读(1225) | 评论 (0)编辑 收藏

新建立一个名为vb6.exe.manifest的文件,用文本编辑器打开,输入以下内容:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
   version="1.0.0.0"
   processorArchitecture="X86"
   name="Microsoft.VB6.VBnetStyles"
   type="win32"
/>
<description>VBnet Manifest for VB6 IDE</description>
<dependency>
   <dependentAssembly>
     <assemblyIdentity
       type="win32"
       name="Microsoft.Windows.Common-Controls"
       version="6.0.0.0"
       processorArchitecture="X86"
       publicKeyToken="6595b64144ccf1df"
       language="*"
     />
   </dependentAssembly>
</dependency>
</assembly>
然后把该文件放到与vb6.exe相同的目录,启动vb6.exe就可以了。

posted @ 2006-06-15 13:46 Kevin Meng 阅读(329) | 评论 (0)编辑 收藏

内容摘要
在基于ArcIMS的Web GIS的应用开发中,无论是通过HTML Viewer,还是ActiveX Connector 或者 Java Connector,我们经常需要提供圆形选择的工具,在地图上任意选择圆心和半径,进而查找位于该圆形区域内的某个图层内的要素。在这种情况下,由于这个圆的圆心并不是来自某个点状图层的要素,而这个圆也不是由图层中的点要素通过缓冲区生成,所以ArcIMS所提供的Buffer缓冲区功能无法直接调用,在这种情况下,我们可以采取其他的变通方式。
过程描述
在本文中,我们通过圆的内接多边形法来实现。原理就是根据提供的圆心位置和半径,生成一个接近圆形的内接48边形,然后利用这个多边形对象再结合Filter进行空间查询。当然,内接多边形的边数越多就越接近圆,查询结果就越精确。示例代码如下:

//Java
public Polygon createCirlePolygon(Point pnt,double dRadius){
double sineTheta, cosineTheta, twoPi;
int numPoints = 48; //内接多边形的边数
Polygon poly=new Polygon();
Points pnts=new Points();
twoPi = 3.1415 * 2.0;
//构造多边形
for(int i=0;i<numPoints;i++){
Point cpt = new Point();
sineTheta = Math.sin(twoPi * (i*1.0/ numPoints));
cosineTheta = Math.cos(twoPi * (i*1.0 / numPoints));
cpt.setX(pnt.getX() + dRadius * cosineTheta);
cpt.setY(pnt.getY() + dRadius * sineTheta);
pnts.addPointObject(cpt);
}
pnts.addPointObject(pnts.getPointObject(0));
Ring ring=new Ring();
ring.setPoints(pnts);
poly.addRing(ring);
return poly;
}

//ASP.NET
public IMSPolygon createCirlePolygon(IMSPoint pnt,double dRadius)
{
IMSPolygon poly=new IMSPolygon();
double sineTheta, cosineTheta, twoPi;
int numPoints = 48; //内接多边形的边数

IMSPoints pnts=new IMSPoints();
twoPi = 3.1415 * 2.0;

//构造多边形
for(int i=0;i<numPoints;i++)
{
IMSPoint cpt = new IMSPoint();
sineTheta = Math.Sin(twoPi * (i*1.0/ numPoints));
cosineTheta = Math.Cos(twoPi * (i*1.0 / numPoints));
cpt.X=(pnt.X + dRadius * cosineTheta);
cpt.Y=(pnt.Y + dRadius * sineTheta);
pnts.Add(cpt);
}
pnts.Add(pnts[0]);
IMSParts parts=new IMSParts();
parts.Add(pnts);
poly.Parts=parts;
return poly;
}

posted @ 2006-06-08 09:59 Kevin Meng 阅读(184) | 评论 (0)编辑 收藏

在oracle中用prepareStatement时,如果SQL语句写成:
select distinct(mpfullname) from suzhou.menpaipoint where mpfullname like '%?%'
运行时就会出现ORA-01006错误,解决办法是把SQL语句改成:
select distinct(mpfullname) from suzhou.menpaipoint where mpfullname like ?
而用
stmt.setObject(1, "%关键字%");
来付值就可以了。

posted @ 2006-06-05 15:50 Kevin Meng 阅读(9241) | 评论 (3)编辑 收藏

(1)安装Subversion;
(2)安装TortoiseSVN;
(3)新建一个储存库目录,例如d:\svn\suzhou;
(4)进入d:\svn\suzhou,点击鼠标右键盘TortoiseSVN->create reposity here...会生成一大堆目录和文件;
(5)进入d:\svn\suzhou\config,打开svnserve.conf文件,吧#password-db = passwd前面的"#"去掉;
(6)进入d:\svn\suzhou\config,打开passwd文件,添加新用户如:
ameng=ameng
test=test
(7)进入DOS,运行命令:D:\Subversion\bin>svnserve -d -r d:\svn\suzhou,启动服务;也可以把这个命令写成一个runservice.bat,每次运行一下这个文件就可以了。
(8)在Eclipse中选中一个项目文件夹,如d:\eclipse3.1\workspace\suzhou,选择TortoiseSVN->Import把这个项目导到svn中。此刻要求输入用户名和密码,输入ameng密码ameng就可以了。

(9)在另一台机器上安装TortoiseSVN,作为客户端,安装完后,新建立一个空的文件夹,如d:\eclispe3.1\workspace\suzhou,进入该文件夹,点鼠标右键,选择SVN Checkout...,URL of  Repository为:svn://servername/svn/suzhou,点OK就可以下载数据了。

其他内容请看subversion和TortoiseSVN的帮助文档

posted @ 2006-06-04 13:17 Kevin Meng 阅读(517) | 评论 (0)编辑 收藏

以前作web开发,从来不用关心界面设计,现在不一样了,当爹又当娘,玩起界面设计来了,谈谈心得吧。
作为面向用户的窗口,站点的主界面是最重要的,主界面的好坏,直接决定着界面设计的成功与否。而且主界面的风格决定着别的次要界面的风格,只有主界面定下来以后,才有可能开发出别的次要界面。
web界面设计要用到两个关键的软件,即Dreamwaever和大名鼎鼎的PS。
建议看两本书:《Dreamweaver MX 2004完全自学手册》中国青年出版社 强力推荐
                            《PS CS中文版基础与应用》海洋出版社 简单,实用,便宜:) 当然PS的书还有很多
步骤
(1)用PS 设计总的界面框架;
(2)用PS的切片工具把图片切割,然后选择文件->储存为web所用格式。PS帮我们生成一个*.html文件和一个images文件夹;
(3)用Deamweaver打开PS生成的html文件,看到了没有,PS已经帮我们排版了!适当修改一下,就OK了。
(4)把html文件和images文件夹拷贝到网站下面就可以了。

posted @ 2006-05-31 17:18 Kevin Meng 阅读(397) | 评论 (1)编辑 收藏

There are 5 predefined entity references in XML:

&lt; < less than
&gt; > greater than
&amp; & ampersand 
&apos; ' apostrophe
&quot; " quotation mark

Note: Only the characters "<" and "&" are strictly illegal in XML. Apostrophes, quotation marks and greater than signs are legal, but it is a good habit to replace them.

posted @ 2006-05-24 14:48 Kevin Meng 阅读(614) | 评论 (0)编辑 收藏

Dreamweaver里有一个设置:把不安全的带码安全的过滤掉,所以,从2004开始就会有每个页面的第一个代码
"<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">"
就是起过滤作用的,你把那句代码删掉就可以运行啦!

posted @ 2006-05-23 16:41 Kevin Meng 阅读(742) | 评论 (0)编辑 收藏

在tomcat 5.5.9 ,已经没有Catalina.bat了,所以不用在里面写-Xms128m -Xmx512之类的了。只要运行tomcat5w.exe,在java选项里面设置inital menory pool和maximum memory pool就可以了。

posted @ 2006-05-22 17:07 Kevin Meng 阅读(229) | 评论 (0)编辑 收藏

仅列出标题
共12页: First 上一页 4 5 6 7 8 9 10 11 12 下一页