|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
关于第二点:俺问问你,如果是企业级项目的话,诸如RMI,EJB,等一些关键技术,这些难道都不需要学么?如果光是使用jsp,servlet,javabean的话。数据|数据库 当必要把文件存进到服务器真个数据库中,有四种体例可行:
1.servlet/jsp+fileupload/smartupload/本人编一个完成承受文件的javaBean.然后挪用相干的程序,把文件存进数据库中。这也是一般的选择。
2.经由过程数据库的存储历程,间接用sql来操纵能够完成,必要会见文件体系。见全文搜刮中向数据库中存进文件的举措。
3.rmi客户/服务器的体例,因为rmi对完成的接口的参数请求是可串行化的,因而能够选用byte[]或fileupload组件中fileItem对象等,因为在rmi中一般利用两边协商好的对象范例,因而在文件传输,可选用界说一承继seriable接口的类对象,包括文件和文件的相干信息。
4.固然EJB是不克不及会见文件体系,并且请求完成的接口的参数请求是可串行化的,还必需是EJB标准下的数据范例(基础的数据范例)因而不克不及选用java.io包下的类(非串行化)和像fileupload组件等以外的类对象(串行化)作为参数。可是在EJB外部是可使用java.io包中的对象。经由过程EJB来完成把文件存进到数据库的办法:
1).用byte[]作为远程接口的参数范例.
2).用file,fileinputstream,datoutputstream来完成文件对象,
3).然后以文件对象流的情势存进数据库中。
在EJB中的完成办法:
publicStringupFile(byte[]fileByte,java.lang.StringfileName){
try{
System.out.println("fdjkj");
Filef=newFile(fileName);
DataOutputStreamfileout=newDataOutputStream(newFileOutputStream(f));
FileInputStreamfi=newFileInputStream(f);
intli=fi.read(fileByte,0,fileByte.length-1);
fileout.write(fileByte,0,fileByte.length-1);//这两句不克不及倒置,下面根据是暗示入手下手向fileInputStream中读进数据,这一句才是把byte[]中的数据读进到流中
System.out.println("fdjkj");
StringdName="com.microsoft.jdbc.sqlserver.SQLServerDriver";
StringconURL="jdbc:microsoft:sqlserver://159.164.176.116:1038;DatabaseName=DigitalLab";
//Filef1=newFile(""+fds.get("fileID"));
Connectioncon=null;
Statementstm=null;
ResultSetrs=null;
PreparedStatementps=null;
Class.forName(dName).newInstance();System.out.println("fdjkj");
con=DriverManager.getConnection(conURL,"gaolong1","831001");System.out.println("fdjkj");
Stringsql="insertintotestEJBFilevalues("+fileName+",?,"+(fileByte.length-1)+")";
//Stringsel="select*fromxinxiwherechanghao=215;";
//Stringsel="select*fromcustomwhereyuming=212;";
ps=con.prepareStatement(sql);System.out.println("fdsssssjkj");
ps.setBinaryStream(1,fi,(int)fileByte.length-1);
//ps.setBytes(1,b);
ps.executeUpdate();System.out.println("fdjkj");
ps.close();
return"ok";
}catch(Exceptione){
e.printStackTrace();
return"false";
}
}
}
挪用EJB的客户端程序:
packagecom.J2EE.first.interfaces;
importjavax.naming.Context;
importjavax.naming.InitialContext;
importjavax.rmi.PortableRemoteObject;
importjava.util.Properties;
importjava.io.*;
/**
*@authorgaolong1
*
*TODO要变动今生成的范例正文的模板,请转至
*窗口-首选项-Java-代码款式-代码模板
*/
publicclassEJBClient{
publicstaticvoidmain(String[]args){
try{
Stringurl="t3://59.64.76.16:7001";
Propertiesprop=newProperties();
prop.put(Context.PROVIDER_URL,url);
prop.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
Contextctx=newInitialContext(prop);
Objectobj=ctx.lookup("ejb/com/J2EE/first/ejb/HelloHome");
/*Propertiespr=System.getProperties();
Contextctx=newInitialContext(pr);
Objectobj=ctx.lookup("ejb/com/fristEJB/Trader/ejb/TraderHome");
*/
HelloHometrH=(HelloHome)PortableRemoteObject.narrow(obj,HelloHome.class);
Hellotr=trH.create();
System.out.println(tr.hello());
Filef=newFile("12.xml");
BufferedReaderbr=newBufferedReader(newInputStreamReader(newFileInputStream(f),"UTF-8"));
Stringstr="";
Stringstrup="";
while((str=br.readLine())!=null)
strup+=str;
System.out.println(strup);
byte[]bt=strup.getBytes();//把文件酿成byte数组
System.out.println(bt);
Stringtest=tr.upFile(bt,"12.xml");//挪用EJB程序
System.out.println(test);
tr.remove();
}catch(Exceptione){
e.printStackTrace();
}
}
}
在EJB中完成文件存进数据库的办法,就是经由过程把string或byte[]酿成文件对象,然后存进到数据库中,但在操纵的过程当中要注重EJB不克不及操纵文件体系,同时也不由于这而以为在EJB中不克不及操纵文件流。操纵文件流大概功能有所下落。利用J2EE组件时要严厉注重标准,在标准内完成必要的功效。
windows系统样,他们做了什么事或者留了一些后门程序,谁都不知道,二,java开发是跨平台,任何系统上都可以运行,对于保密型系统和大型系统开发这是必要的 |
|