JAVA网页设计初学jsp心得
最后就是我对java的几点希望:首先是IDE工具,有人说java已经很好了,有jbuilder,eclipse,netBeans等等,但是我认为如果java想超越.net,那么他首先要解决的就是IDE工具的整合。js|初学|心得测试情况为jdk1.2.2 jswdk-1.0 winnt4.0中文版。
1。java是巨细写敏感的,用过其他编程言语的人最简单犯这个毛病,特别是刚上手的时分。我刚入手下手调试jsp的时50%以上的编译毛病是都是由于这个。
2。java的挪用历程都是要加括号的,一入手下手对照简单无视,如title=request.getParameter("title").trim();
3。jsp中对应asp中的request.form()和request.querystring()的办理办法。
jsp中获得参数没有form和queryString之分,都是经由过程request.getParameter("XXXX")来获得。固然jsp也有request.getQueryString()办法,但测试了局是test.jsp?id=1&page=20 失掉id=1&page=20。
假如url和form有不异的参数称号呢?上面是一段测试代码:
<formmethod="POST"action="query.jsp?id=2">
<inputtype="text"name="id"value="1"size="60">
</form>
name都是id,了局是url的参数优先失掉,jsp的这类处置体例和asp比拟我觉的各有所长。
4。头疼的汉字处置成绩。
在其他的文章里曾说到在中文NT情况下以下语句输入会失掉乱码,
<%="你好"%>及out.print("你好");等。办理办法是只需对字符串变量举行编码就能够失掉准确了局,以下代码能够失掉准确的输入:
<% Stringtitle="你好";
byte[]tmpbyte=title.getBytes("ISO8859_1");
title=newString(tmpbyte);
out.print(title);%>
大概<%=title%>
关于sql语句汉字成绩,例句为select*fromtestwheretitle=谁是傻瓜
在jdbc-odbc驱动下连db2,不论是原句仍是对sql语句举行编码后都逝世活通不外。
换了ibm的jdbc间接驱动后,对sql语句编码后程序能够经由过程。
这个成绩的发生也许是中文NT的缘故原由,在其他情况下大概就没汉字处置成绩了,听说ibm的websphere对中文撑持的很好,这也给jsp的开辟带来必定的通用性成绩。听说对字符串编码是一种通用的办理办法,不外没有这么多情况来测试。
5。在asp中常常利用到字符串判别语句如ifstate="真是傻瓜"then.....
在java中String变量不是一个复杂的变量而是一个类实例,分歧的办法会失掉分歧的了局
a.
String str1="我是傻瓜";
String str2="我是傻瓜";(orString str2="我是"+"傻瓜";)
if(str1==str2)
out.print("yes");
else
out.print("no");
了局是"yes"。
也许是编译优化,str1,str2指向统一个类实例;
b.
Stringstr1,str2,str3;
str1="我是傻瓜";
str2="我是";
str3=str2+"傻瓜";
if(str1==str3)
out.print("yes");
else
out.print("no");
了局是"no"。
Stringstr1=newString("我是傻瓜");
Stringstr2=newString("我是傻瓜");
if(str1==str2)
out.print("yes");
else
out.print("no");
了局是"no"。
Stringstr1=newString("我是傻瓜");
Stringstr2=newString("我是傻瓜");
if(str1.compareTo(str2)==0)
out.print("yes");
else
out.print("no");
了局是"yes"。
以是在jsp中判别字符串要利用compareTo办法,用惯传统言语还真一会儿顺应不外来,熟习java的伴侣应当没这个成绩。
6。怎样判别数据库为空?
result=stmt.executeQuery(sql);
if(result.next())
......
result实行后游标出于一个未明的形态,不克不及举行形态判别,也不克不及取值,必定要next()一下才能够用。
7。在jsp中完成分页。
page是关头字,不克不及当变量。
conn.jsp
<%
StringsDBDriver="COM.ibm.db2.jdbc.app.DB2Driver";
StringsConnStr="jdbc:db2:faq";
Connectionconn=null;
Statementstmt=null;
ResultSetrs=null;
try{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundExceptione) {
out.print("faq():"+e.getMessage());
}
try{
conn=DriverManager.getConnection(sConnStr,"wsdemo","wsdemo1");
stmt=conn.createStatement();
}catch(SQLExceptione){
out.print(e.toString());
}
%>
query.jsp
<%@pagelanguage="java"import="java.sql.*" %>
<%@pagecontentType="text/html;charset=gb2312"%>
<%@includefile="conn.jsp"%>
<%
.......
intpages=0;
intpagesize=10;
ResultSetresult=null;
ResultSetrcount=null;
pages=newInteger(request.getParameter("pages")).intValue();
if(pages>0)
{
Stringsql="state=我不傻";
intcount=0;
try{
rcount=stmt.executeQuery("SELECTcount(id)asidfromuserwhere"+sql);
catch(SQLExceptionex){
out.print("aq.executeQuery:"+ex.getMessage());
}
if(rcount.next())
count=rcount.getInt("id");
rcount.close();
if(count>0)
{
sql="select*fromuserwhere "+sql;
try{
result=stmt.executeQuery(sql);
}
catch(SQLExceptionex){
out.print("aq.executeQuery:"+ex.getMessage());
}
inti;
Stringname;
// result.first();
// result.absolute((pages-1)*pagesize);
// 此办法jdbc2.0撑持。编译经由过程,但实行不外,不知是否是跟驱动有关,只好用上面的笨举措。
for(i=1;i<=(pages-1)*pagesize;i++)
result.next();
for(i=1;i<=pagesize;i++){
if(result.next()){
name=result.getString("name");
out.print(name);
}
result.close();
intn=(int)(count/pagesize);
if(n*pagesize<count)n++;
if(n>1)
{
for(i=1;i<=n;i++)
out.print("<ahref=query.jsp?pages="+i+">"+i+"</a>");
}
}
}
%>
数据库怎样毗连,怎样老堕落啊?以是我会合的在这写篇文章供人人参考,实在这类把数据库逻辑全体放在jsp里一定是好的做法,可是有益于初学者进修,以是我就如许做了,当人人学到必定水平的时分,能够思索用MVC的形式开辟。在实习这些代码的时分,你必定将jdbc的驱动程序放到服务器的类路径里,然后要在数据库里建一个表test,有两个字段好比为test1,test2,能够用上面SQL建
createtabletest(test1varchar(20),test2varchar(20)
然后向这个表写进一条测试记录
那末如今入手下手我们的jsp和数据库之旅吧。
1、jsp毗连Oracle8/8i/9i数据库(用thin形式)
testoracle.jsp以下:
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.sql.*"%>
<html>
<body>
<%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
Stringurl="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl为你的数据库的SID
Stringuser="scott";
Stringpassword="tiger";
Connectionconn=DriverManager.getConnection(url,user,password);
Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
Stringsql="select*fromtest";
ResultSetrs=stmt.executeQuery(sql);
while(rs.next()){%>
您的第一字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操纵乐成,祝贺你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
2、jsp毗连SqlServer7.0/2000数据库
testsqlserver.jsp以下:
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.sql.*"%>
<html>
<body>
<%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
Stringurl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
//pubs为你的数据库的
Stringuser="sa";
Stringpassword="";
Connectionconn=DriverManager.getConnection(url,user,password);
Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
Stringsql="select*fromtest";
ResultSetrs=stmt.executeQuery(sql);
while(rs.next()){%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操纵乐成,祝贺你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
3、jsp毗连DB2数据库
testdb2.jsp以下:
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.sql.*"%>
<html>
<body>
<%Class.forName("com.ibm.db2.jdbc.app.DB2Driver").newInstance();
Stringurl="jdbc:db2://localhost:5000/sample";
//sample为你的数据库名
Stringuser="admin";
Stringpassword="";
Connectionconn=DriverManager.getConnection(url,user,password);
Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
Stringsql="select*fromtest";
ResultSetrs=stmt.executeQuery(sql);
while(rs.next()){%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操纵乐成,祝贺你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
4、jsp毗连Informix数据库
testinformix.jsp以下:
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.sql.*"%>
<html>
<body>
<%Class.forName("com.informix.jdbc.IfxDriver").newInstance();
Stringurl=
"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//testDB为你的数据库名
Connectionconn=DriverManager.getConnection(url);
Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
Stringsql="select*fromtest";
ResultSetrs=stmt.executeQuery(sql);
while(rs.next()){%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操纵乐成,祝贺你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
5、jsp毗连Sybase数据库
testmysql.jsp以下:
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.sql.*"%>
<html>
<body>
<%Class.forName("com.sybase.jdbc.SybDriver").newInstance();
Stringurl="jdbc:sybase:Tds:localhost:5007/tsdata";
//tsdata为你的数据库名
PropertiessysProps=System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connectionconn=DriverManager.getConnection(url,SysProps);
Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
Stringsql="select*fromtest";
ResultSetrs=stmt.executeQuery(sql);
while(rs.next()){%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操纵乐成,祝贺你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
6、jsp毗连MySQL数据库
testmysql.jsp以下:
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.sql.*"%>
<html>
<body>
<%Class.forName("org.gjt.mm.mysql.Driver").newInstance();
Stringurl="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//testDB为你的数据库名
Connectionconn=DriverManager.getConnection(url);
Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
Stringsql="select*fromtest";
ResultSetrs=stmt.executeQuery(sql);
while(rs.next()){%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操纵乐成,祝贺你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
7、jsp毗连PostgreSQL数据库
testmysql.jsp以下:
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.sql.*"%>
<html>
<body>
<%Class.forName("org.postgresql.Driver").newInstance();
Stringurl="jdbc:postgresql://localhost/soft"
//soft为你的数据库名
Stringuser="myuser";
Stringpassword="mypassword";
Connectionconn=DriverManager.getConnection(url,user,password);
Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
Stringsql="select*fromtest";
ResultSetrs=stmt.executeQuery(sql);
while(rs.next()){%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操纵乐成,祝贺你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
在jsp中利用smartupload组件上传文件
jsp对上传文件的撑持不象php中撑持的那末好,间接做成了函数,也不象asp中要经由过程组件才干完成。jsp中能够经由过程javabean来完成。可是我们没有需要本人往写一个上载的bean,在网上已有了良多成型的手艺,smartupload就是个中的一个。可是smartupload是将文件先读到服务器的内存中,以是上传太年夜的文件(凌驾100兆)有大概会出成绩,也算是一个十全十美吧:)
先说一下提交的页面,smartupload组件请求用字撙节的体例来提交<FORMaction="upload.jsp"encType=multipart/form-datamethod=post>。上面就是个例子upload.htm:
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<!--savedfromurl=(0057)http://localhost:8080/jspsmartfile/jsp/uploadTemplate.jsp-->
<HTML><HEAD>
<METAcontent="text/html;charset=gb2312"http-equiv=Content-Type>
<METAcontent="MSHTML5.00.2920.0"name=GENERATOR></HEAD>
<BODYbgColor=#e6e6e6><BR>
<FORMaction="upload.jsp"encType=multipart/form-datamethod=post>
<TABLE>
<TBODY>
<TR>
<TD><FONTcolor=#000000face=helv,helveticasize=1>File
:</FONT><INPUTsize=60type=filename="file"></TD></TR>
<TR>
<TR>
<TD><FONTcolor=#000000face=helv,helveticasize=1>File
:</FONT><INPUTsize=60type=filename="file1"></TD></TR>
<TR>
<TD><FONTcolor=#000000face=helv,helveticasize=1>File
:</FONT><INPUTsize=60type=textname="text"></TD></TR>
<TR>
<TD
align=right><INPUTtype=submitvalue=Sendname="send"></TD></TR></TBODY></TABLE></FORM></BODY></HTML>
再来看一下吸收的页面,我们把文件上传到服务器今后就间接把它再存进数据库中:upload.jsp
<%@pagecontentType="text/hml;charset=gb2312"%>
<%@pageimport="java.sql.*"%>
<%@pageimport="com.jspsmart.upload.*"%>
<%@pageimport="DBstep.iDBManager2000.*"%>
<%
//实例化上载bean
com.jspsmart.upload.SmartUploadmySmartUpload=newcom.jspsmart.upload.SmartUpload();
//初始化
mySmartUpload.initialize(pageContext);
//设置上载的最年夜值
mySmartUpload.setMaxFileSize(500*1024*1024);
//上载文件
mySmartUpload.upload();
//轮回获得一切上载的文件
for(inti=0;i<mySmartUpload.getFiles().getCount();i++){
//获得上载的文件
com.jspsmart.upload.FilemyFile=mySmartUpload.getFiles().getFile(i);
if(!myFile.isMissing())
{
//获得上载的文件的文件名
StringmyFileName=myFile.getFileName();
//获得不带后缀的文件名
Stringsuffix=myFileName.substring(0,myFileName.lastIndexOf(.));
//获得后缀名
Stringext=mySmartUpload.getFiles().getFile(0).getFileExt();
//获得文件的巨细
intfileSize=myFile.getSize();
//保留路径
Stringaa=getServletContext().getRealPath("/")+"jsp";
Stringtrace=aa+myFileName;
//获得其余参数
Stringexplain=(String)mySmartUpload.getRequest().getParameter("text");
Stringsend=(String)mySmartUpload.getRequest().getParameter("send");
//将文件保留在服务器端
myFile.saveAs(trace,mySmartUpload.SAVE_PHYSICAL);
//上面的是将上载的文件保留到数据库中
//将文件读到流中
java.io.Filefile=newjava.io.File(trace);
java.io.FileInputStreamfis=newjava.io.FileInputStream(file);
out.println(file.length());
//翻开数据库
ResultSetresult=null;
StringmSql=null;
PreparedStatementprestmt=null;
DBstep.iDBManager2000DbaObj=newDBstep.iDBManager2000();
DbaObj.OpenConnection();
//将文件写到数据库中
mSql="insertintomarklist(markname,password,marksize,markdate,MarkBody)values(?,?,?,?,?)";
prestmt=DbaObj.Conn.prepareStatement(mSql);
prestmt.setString(1,"aaa1");
prestmt.setString(2,"0000");
prestmt.setInt(3,fileSize);
prestmt.setString(4,DbaObj.GetDateTime());
prestmt.setBinaryStream(5,fis,(int)file.length());
DbaObj.Conn.setAutoCommit(true);
prestmt.executeUpdate();
DbaObj.Conn.commit();
out.println(("上载乐成!!!").toString());
}
else
{out.println(("上载失利!!!").toString());}
}//与后面的if对应
%>
再说一下下载,下载分两种情形1。从数据库间接下载2。从服务器高低载
先说从数据库间接下载的情况:就是把输出流从数据库里读出来,然后转存为文件
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.sql.*"%>
<%@pageimport="java.io.*"%>
<%@pageimport="DBstep.iDBManager2000.*"%>
<%
intbytesum=0;
intbyteread=0;
//翻开数据库
ResultSetresult=null;
StringSql=null;
PreparedStatementprestmt=null;
DBstep.iDBManager2000DbaObj=newDBstep.iDBManager2000();
DbaObj.OpenConnection();
//获得数据库中的数据
Sql="select*fromt_local_zhongzhuan";
result=DbaObj.ExecuteQuery(Sql);
result.next();
//将数据库中的数据读到流中
InputStreaminStream=result.getBinaryStream("content");
FileOutputStreamfs=newFileOutputStream("c:/dffdsafd.doc");
byte[]buffer=newbyte;
intlength;
while((byteread=inStream.read(buffer))!=-1)
{
out.println("<DT><B>"+byteread+"</B></DT>");
bytesum+=byteread;
System.out.println(bytesum);
fs.write(buffer,0,byteread);
}
%>
再说从服务器高低载的情况:
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.io.*"%>
<%
StringfileName="zsc104.swf".toString();
f//读到流中
InputStreaminStream=newFileInputStream("c:/zsc104.swf");
//设置输入的格局
response.reset();
response.setContentType("bin");
response.addHeader("Content-Disposition","attachment;filename=""+fileName+""");
//轮回掏出流中的数据
byte[]b=newbyte;
intlen;
while((len=inStream.read(b))>0)
response.getOutputStream().write(b,0,len);
inStream.close();
%>
好了,到这里只需不是太年夜的文件的上传下载的操纵都能够完成了。
缩略图完成,将图片(jpg,gif,bmp等等)实在的酿成想要的巨细
importjava.io.*;
importjava.util.*;
importcom.sun.image.codec.jpeg.*;
importjava.awt.image.*;
importjava.awt.*;
importjava.net.*;
importjava.applet.*;
importjava.sql.*;
//缩略图类,
//本java类能将jpg图片文件,举行等比或非等比的巨细转换。
//详细利用办法
//s_pic(年夜图片路径,天生小图片路径,年夜图片文件名,天生小图片文名,天生小图片宽度,天生小图片高度,是不是等比缩放(默许为true))
publicclassSmall_pic{
StringInputDir;//输出图路径
StringOutputDir;//输入图路径
StringInputFileName;//输出图文件名
StringOutputFileName;//输入图文件名
intOutputWidth=80;//默许输入图片宽
intOutputHeight=80;//默许输入图片高
intrate=0;
booleanproportion=true;//是不是等比缩放标志(默许为等比缩放)
publicSmall_pic(){
//初始化变量
InputDir="";
OutputDir="";
InputFileName="";
OutputFileName="";
OutputWidth=80;
OutputHeight=80;
rate=0;
}
publicvoidsetInputDir(StringInputDir){
this.InputDir=InputDir;
}
publicvoidsetOutputDir(StringOutputDir){
this.OutputDir=OutputDir;
}
publicvoidsetInputFileName(StringInputFileName){
this.InputFileName=InputFileName;
}
publicvoidsetOutputFileName(StringOutputFileName){
this.OutputFileName=OutputFileName;
}
publicvoidsetOutputWidth(intOutputWidth){
this.OutputWidth=OutputWidth;
}
publicvoidsetOutputHeight(intOutputHeight){
this.OutputHeight=OutputHeight;
}
publicvoidsetW_H(intwidth,intheight){
this.OutputWidth=width;
this.OutputHeight=height;
}
publicStrings_pic(){
BufferedImageimage;
StringNewFileName;
//创建输入文件对象
Filefile=newFile(OutputDir+OutputFileName);
FileOutputStreamtempout=null;
try{
tempout=newFileOutputStream(file);
}catch(Exceptionex){
System.out.println(ex.toString());
}
Imageimg=null;
Toolkittk=Toolkit.getDefaultToolkit();
Appletapp=newApplet();
MediaTrackermt=newMediaTracker(app);
try{
img=tk.getImage(InputDir+InputFileName);
mt.addImage(img,0);
mt.waitForID(0);
}catch(Exceptione){
e.printStackTrace();
}
if(img.getWidth(null)==-1){
System.out.println("cantread,retry!"+"<BR>");
return"no";
}else{
intnew_w;
intnew_h;
if(this.proportion==true)//判别是不是是等比缩放.
{
//为等比缩放盘算输入的图片宽度及高度
doublerate1=((double)img.getWidth(null))/(double)OutputWidth+0.1;
doublerate2=((double)img.getHeight(null))/(double)OutputHeight+0.1;
doublerate=rate1>rate2?rate1:rate2;
new_w=(int)(((double)img.getWidth(null))/rate);
new_h=(int)(((double)img.getHeight(null))/rate);
}
else{
new_w=OutputWidth;//输入的图片宽度
new_h=OutputHeight;//输入的图片高度
}
BufferedImagebuffImg=newBufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);
Graphicsg=buffImg.createGraphics();
g.setColor(Color.white);
g.fillRect(0,0,new_w,new_h);
g.drawImage(img,0,0,new_w,new_h,null);
g.dispose();
JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(tempout);
try{
encoder.encode(buffImg);
tempout.close();
}catch(IOExceptionex){
System.out.println(ex.toString());
}
}
return"ok";
}
publicStrings_pic(StringInputDir,StringOutputDir,StringInputFileName,StringOutputFileName){
//输出图路径
this.InputDir=InputDir;
//输入图路径
this.OutputDir=OutputDir;
//输出图文件名
this.InputFileName=InputFileName;
//输入图文件名
this.OutputFileName=OutputFileName;
returns_pic();
}
publicStrings_pic(StringInputDir,StringOutputDir,StringInputFileName,StringOutputFileName,intwidth,intheight,booleangp){
//输出图路径
this.InputDir=InputDir;
//输入图路径
this.OutputDir=OutputDir;
//输出图文件名
this.InputFileName=InputFileName;
//输入图文件名
this.OutputFileName=OutputFileName
//设置图片长宽
setW_H(width,height);
//是不是是等比缩放标志
this.proportion=gp;
returns_pic();
}
publicstaticvoidmain(String[]a)
{
//s_pic(年夜图片路径,天生小图片路径,年夜图片文件名,天生小图片文名,天生小图片宽度,天生小图片高度)
Small_picmypic=newSmall_pic();
System.out.println(
mypic.s_pic("E:JAVAJ2EEDatum王亮jsp材料缩图例子personal",
"E:JAVAJ2EEDatum酒剑仙jsp材料缩图例子personal",
"1.jpg","new1.jpg",80,80,true)
);
}
在JSP中利用JavaMail
Java中文站
你但愿在jsp中创建一个邮件发送收取工具吗?上面将先容的就是在jsp中创建一个邮件发送收取工具。在这篇文章中你能够懂得到JavaMailAPI的一些要点和怎样在JSP中利用它。本文中还包含了在JSP中利用JavaMail的实例。JavaMail是JSP使用软件中相称壮大的API。
浏览这篇文章必要对JSP、JavaBeans和JavaMail有必定的开端懂得。固然,有关于JavaMail的常识你能够经由过程浏览这篇文章来取得。假如你关于以上三项一窍不通,但你所利用的服务器撑持JSP和JavaMail的话,你能够仅仅经由过程复制/粘贴来利用它们。
甚么是JavaMail
JavaMail是Sun公布的用来处置email的API。它能够便利地实行一些经常使用的邮件传输。
固然JavaMail是Sun的API之一,但它今朝还没有被加在尺度的java开辟工具包中(JavaDevelopmentKit),这就意味着你在利用前必需别的下载JavaMail文件。除此之外,你还必要有Sun的JavaBeansActivationFramework(JAF)。JavaBeansActivationFramework的运转很庞大,在这里复杂的说就是JavaMail的运转必需得依附于它的撑持。在Windows2000下利用必要指定这些文件的路径,在别的的操纵体系上也相似。
接上去要解说的是这篇指南的最难了解的部分。
这篇指南包含三部分:HTML表格、关于JavaMail、JavaMail和JSP的分离。
第一部分:HTML表格
第一部分供应了一个最基础的基于HTML的email发送收取程序的例子。第二部分则报告JavaMail的事情道理。第三部分则先容将JavaMail到场JSP,创立一个基础的email发送收取程序。
分别组件
JSP最主要的特征是能将全部网页分别成一些微小的组件。这里利用的组件包含:
●一个用来将email的信息发送给JSP的HTML表格;
●一个JSP页面用来处置和发送函件。
第一步,就是创立一个HTML表格用来给JSP页面发送信息。你能够将以下的HTML代码复制到你的电脑上:
用来发送email的HTML源代码
<HTML>
<BODY>
<FORMaction="sendmail.jsp"method="post">
<TABLEalign="center">
<TR>
<TDwidth="50%">
To:<BR><INPUTname="to"size="25">
</TD>
<TDwidth="50%">
From:<BR><INPUTname="from"size="25">
</TD>
</TR>
<TR>
<TDcolspan="2">
Subject:<BR><INPUTname="subject"size="50">
</TD>
</TR>
<TR>
<TDcolspan="2">
<P>Message:<BR><TEXTAREAname="text"rows=25cols=85></TEXTAREA></P>
</TD>
</TR>
</TABLE>
<INPUTtype="submit"name="cb_submit"value="Send">
<INPUTtype="reset"name="cb_reset"value="Clear">
</FORM>
</BODY>
</HTML>
以上这段程序将创立一个包括email基础信息(比方:收件地点、发送地点、主题和内容)的文件。固然你能够依据你本人的必要来决意这个文件包括那些信息。
这个HTML文件的利用有两点请求:第一点是天生的文件必需发送给接上去将先容的程序利用。在这个例子中就是sendmail.jsp,但在你利用时,必需用这个文件在体系里的URL来取代它;第二点是必需有空间来同意用户发送email。
第二部分将对JavaMail的特性举行一些剖析,为在第三部分创立JSP程序作筹办。以是接上去我们将进修JavaMail。
第二部分:关于JavaMail
文档的利用
下载的JavaMailAPI中带的文档是很有效的。你能够在JavaMail下的/docs/javadocs/index.html找到它。第二部分次要将剖析邮件程序的组件。你能够经由过程浏览文档来取得更多这方面的信息。
组件发送邮件必要利用JavaMail,它使对邮件的操纵变得复杂易用。
属性对象
JavaMail必要创立一个格局为"mail.smtp.host"的文件用来发送信息。
Propertiesprops=newProperties();
props.put("mail.smtp.host","smtp.jspinsider.com");对话对象
一切的基于JavaMail的程序都最少必要一个或全体的对话方针。
SessionsendMailSession;
sendMailSession=Session.getInstance(props,null);
传输
邮件的传输只要送出或遭到两种形态。JavaMail将这两种分歧形态形貌为传输和贮存。传输将送出邮件,而贮存将收取邮件。
Transporttransport;
transport=sendMailSession.getTransport("smtp");
利用JavaMail能为我们勤俭大批的工夫。JavaMail能取代一切的SMTP的事情。
注重:JavaMail其实不能完整的撑持一切的邮件发送收取事情。它今朝仅撑持IMAP、SMTP和POP3,除此之外你只要守候新的JavaMail版本或本人开辟协定。
信息对象
信息对象将把你所发送的邮件实在的反应出来。
MessagenewMessage=newMimeMessage(sendMailSession);
这就是我们所必要的全体四个对象。下一步将是怎样将对象到场到JSP中。
第三部分:JavaMail和JSP的分离
创立JSP
上面我们将入手下手将他们分离在一同。最主要的一点是要确认依据页面唆使分类。还要记得在邮件上标注java.util.date。
<%@page
import="javax.mail.*,javax.mail.internet.*,javax.activation.*,java.util.*"
%>
其次,创立邮件发送切实其实认信息。确认信息能够是恣意的,一样平常经常使用"你的邮件已发送进来了(Yourmailhasbeensent)。"
信息是怎样创立和发送的
我们在第二部分里已会商过信息对象的创立。我们上面将对信息举行操纵。这就和设相信息对象的属性一样复杂。你能够经由过程上面的程序来完成这项操纵。
newMessage.setFrom(newInternetAddress(request.getParameter("from")));
newMessage.setRecipient(Message.RecipientType.TO,newInternetAddress(request.getParameter("to")));
newMessage.setSubject(request.getParameter("subject"));
newMessage.setSentDate(newDate());
newMessage.setText(request.getParameter("text"));
如今将入手下手发送信息。经由过程JavaMail来完成它十分复杂。
transport.send(newMessage);
将一切的组件分离在一同
如今一切的组件都已完全了。如今将它们都放在JSP内里。要注重每个毛病信息,并将它反应给用户。代码以下,你能够经由过程复制它们间接利用:
SampleJSPemailUtilityUsingJavaMail
<%@page
import="javax.mail.*,javax.mail.internet.*,javax.activation.*,java.util.*"
%>
<html>
<head>
<TITLE>JSPmeetsJavaMail,whatasweetcombo.</TITLE>
</HEAD>
<BODY>
<%
try{
Propertiesprops=newProperties();
SessionsendMailSession;
Storestore;
Transporttransport;
sendMailSession=Session.getInstance(props,null);
props.put("mail.smtp.host","smtp.jspinsider.com");
MessagenewMessage=newMimeMessage(sendMailSession);
newMessage.setFrom(newInternetAddress(request.getParameter("from")));
newMessage.setRecipient(Message.RecipientType.TO,newInternetAddress(request.getParameter("to")));
newMessage.setSubject(request.getParameter("subject"));
newMessage.setSentDate(newDate());
newMessage.setText(request.getParameter("text"));
transport=sendMailSession.getTransport("smtp");
transport.send(newMessage);
%>
<P>Yourmailhasbeensent.</P>
<%
}
catch(MessagingExceptionm)
{
out.println(m.toString());
}
%>
</BODY>
</HTML>
你会很快体味到JavaMail的便利的地方,JSP和JavaMail将是将来的但愿。
文件/图片上传
packageuploadfile;
importjavax.servlet.ServletInputStream;
importjavax.servlet.http.HttpServletRequest;
importjava.io.FileOutputStream;
importjava.io.*;
importjava.util.Hashtable;
importjava.util.*;
publicclassFileUploadBean{
privateStringsavePath=null;//文件上传保留的路径
privateStringcontentType="";//内容范例
privateStringcharEncode=null;//字符编码
privateStringbounary="";//分界限
privateStringfileName=null;//当地文件名字
privateHashtabledic=newHashtable();//用于保留"元素名--元素值"对
privateinttotalSize=0;//上传文件总巨细
privateStringpath="";//保留文件的路径
privateStringnewFileName="";//存进随机发生的文件名
///////////////////////////////////////////////////
//设置文件上传保留的路径
publicvoidsetSavePath(Strings){
s=path+s;
savePath=s;
System.out.println("上传路径:"+savePath);
}
///////////////////////////////////////////////////
//取文件上传保留的路径
publicStringgetSavePath(){
returnsavePath;
}
////////////////////////////////////////////////////
//设置文件名字,也能够为它定名,临时先用它本来的名字
publicvoidsetFileName(Strings){
intpos=s.indexOf("";filename="");
if(pos>0){
s=s.substring(pos+13,s.length()-3);//往"和crlf
pos=s.lastIndexOf("");
if(pos<0)
pos=s.lastIndexOf("/");
if(pos<0)
fileName=s;
fileName=s.substring(pos+1);
}
}
////////////////////////////////////////////////////
//获得文件名
publicStringgetFileName(){
System.out.println("失掉文件名"+newFileName);
returnnewFileName;
}
///////////////////////////
//以工夫为种子数发生新文件名
publicStringgetNewFileName(){
intpos=0;//.的地位
longseed=0;//随机种子数
Stringext="";//存进文件扩大名
System.out.println("uploadfilename:"+fileName);
pos=fileName.lastIndexOf(".");
ext=fileName.substring(pos);//失掉扩大名
seed=newDate().getTime();
Randomrand=newRandom(seed);//以工夫为种子发生随机数作为文件名
newFileName=Long.toString(Math.abs(rand.nextInt()))+ext;//天生文件名
System.out.println("newfilename:"+newFileName);
returnnewFileName;
}
//////////////////////////////////////////////////////
//设置字符的编码体例
publicvoidsetCharEncode(HttpServletRequestreq){
charEncode=req.getCharacterEncoding();
}
/////////////////////////////////////////////////
//设置得ContentType
publicvoidsetBoundary(HttpServletRequestreq){
//传送的参数值相似"multipart/form-data;boundary=---------------------------7d21441a30013c"
//传过去的分界限比实践显现在上传数据中的要多两个"--"
boundary=req.getContentType();
//System.out.println("boundary"+boundary);
intpos=boundary.indexOf("boundary=");
//加上这两个"--"
boundary="--"+boundary.substring(pos+9);
}
////////////////////////////////////////////////////
//获得ContentType
publicStringgetBoundary(){
//前往值相似"-----------------------------7d21441a30013c"
returnboundary;
}
/////////////////////////////////////////////
//设置ContentType
publicvoidsetContentType(Strings){
intpos=s.indexOf(":");
if(pos!=-1)
contentType=s.substring(pos+2);
}
////////////////////////////////////////////
//获得ContentType
publicStringgetContentType(){
returncontentType;
}
/////////////////////////////////////////////
//初始化
publicvoidinit(HttpServletRequestreq){
setCharEncode(req);
setBoundary(req);
}
////////////////////////////////////////////////////
//取哈希表中的数据
publicStringgetFieldValue(Strings){
Stringtemp="";
if(dic.containsKey(s))//判别表中是不是存在s键,不判别则前往nullpointerException
{
temp=(String)dic.get(s);
temp=temp.trim();
}else
temp="";
returntemp;
}
////////////////////////////////////////////////
////用指定的编码体例天生字符串
publicStringnewLine(byteoneLine[],intsp,inti,StringcharEncode)
throwsjava.io.UnsupportedEncodingException{
sp=0;//startposition
StringlineStr=null;
if(charEncode!=null){
returnlineStr=newString(oneLine,sp,i,charEncode);//用指定的编码体例天生字符串
}
else{
returnlineStr=newString(oneLine,sp,i);
}
}
///////////////////////////////////////////////
//失掉上传文件的巨细
publicintgetTotalSize(){
returntotalSize/1000;
}
///////////////////////////////////////
//删除指定路径的文件
publicbooleandelFiles(Stringfn)//fn为要删除的文件名,不包含路径
{
try
{
Filefile=newFile(savePath+fn);
System.out.println(savePath+fn);
if(file.exists())
{
file.delete();
System.out.println(file.getPath()+"deletefilesuccessfully!");
returntrue;
}else
{
System.out.println("thefileisnotexisted!");
returntrue;
}
}catch(Exceptione)
{
System.out.println(e.toString());
returnfalse;
}
}
////////////////////////////////////////////////
//文件列表
publicString[]listFiles(Stringfp)
{
String[]lf=null;
try{
savePath=path+fp;
Filefile=newFile(savePath);
lf=file.list(newDirFilter());
for(inti=0;i<lf.length;i++)
System.out.println(lf);
}catch(Exceptione){e.printStackTrace();}
returnlf;
}
/////////////////////////////////////////////////
//入手下手上传文件
publicbooleandoUpload(HttpServletRequestreq)
throwsjava.io.IOException{
StringfieldValue="";//表单位素值
StringfieldName="";//表单位称号
intpos=-1;//一时变量,用于纪录地位
intpos2=-1;//一时变量,用于纪录地位
StringlineStr=null;//用oneLine[]天生的每行字符串
byteoneLine[]=newbyte;//用于每次读取的数据
FileOutputStreamfos=null;//文件输入流
init(req);//初始化
ServletInputStreamsis=req.getInputStream();
inti=sis.readLine(oneLine,0,oneLine.length);//前往实践读取的字符数,并把数据写到oneLine中
while(i!=-1){
lineStr=newLine(oneLine,0,i,charEncode);//天生字符串
if(lineStr.indexOf(getBoundary()+"--")>=0)
break;
if(lineStr.startsWith("Content-Disposition:form-data;name="")){
//分别数据,由于表单位素也一并上传,另有别的数据,对我们有效的只是
//文件的内容,表单位素及表单位素对应的值
if(lineStr.indexOf("";filename="")>=0){//是文件输出域
//设置文件名
setFileName(lineStr);
if(!fileName.equals("")){//假如文件名为空则跳过
//提取表单位素称号及表单位素对应的值
pos=lineStr.indexOf("name="");
pos2=lineStr.indexOf("";filename="");
//表单位素名字
fieldName=lineStr.substring(pos+6,pos2);
//表单位素值
fieldValue=lineStr.substring(pos2+13,lineStr.length()-3);
//到场哈希表中
dic.put(fieldName,fieldValue);
sis.readLine(oneLine,0,oneLine.length);//读取的数据相似"Content-Type:text/plain"
sis.readLine(oneLine,0,oneLine.length);//空行
//创建文件输入
fos=newFileOutputStream(newFile(getSavePath(),getNewFileName()));
//入手下手读上传文件数据
i=sis.readLine(oneLine,0,oneLine.length);
while(i!=-1){
totalSize=i+totalSize;
lineStr=newLine(oneLine,0,i,charEncode);
if(lineStr.indexOf(getBoundary())>=0)
break;//标明这个文件区的数据读取终了
fos.write(oneLine,0,i);
i=sis.readLine(oneLine,0,oneLine.length);
}//endwhile
fos.close();
}//endif(!getFileName().equals(""))
}
else{//非文件输出域
pos=lineStr.indexOf("name="");
//表单位素名字
fieldName=lineStr.substring(pos+6,lineStr.length()-3);
//读空行
sis.readLine(oneLine,0,oneLine.length);
//这行含有元素值,如里元素值为空,则这行也是空行,也要读的
Stringtemp="";
i=sis.readLine(oneLine,0,oneLine.length);
while(i!=-1)
{
temp=newLine(oneLine,0,i,charEncode);
if(temp.indexOf(getBoundary())>=0)
break;
fieldValue=fieldValue+temp;
i=sis.readLine(oneLine,0,oneLine.length);
}
//到场哈希表中
dic.put(fieldName,fieldValue);
fieldValue="";
}
}
i=sis.readLine(oneLine,0,oneLine.length);
}//endwhile
sis.close();
returntrue;
}//enddoUpload
//////////////////////////
//清空Hashtable
publicvoidclearDic(){
dic.clear();
if(dic.isEmpty()){
System.out.println("empty");
}
else{
Sstem.out.println("notempty");
}
}
//////////////////////////////////
//测试用的主函数
publicstaticvoidmain(Stringargs[])
{
String[]fileList=null;
try{
FileUploadBeanfub=newFileUploadBean();
fileList=fub.listFiles("/avatars/");
for(inti=0;i<fileList.length;i++)
System.out.println(fileList);
}catch(Exceptione){e.printStackTrace();}
}
}
///////////////////////////////////
////文件目次过滤外部类
classDirFilterimplementsFilenameFilter{
publicbooleanaccept(Filedir,Stringname){//dir为目次名,name为包括路径的文件名
Filef=newFile(dir,name);//天生文件对象
if(f.isDirectory())
returnfalse;
returntrue;
}
}
相干类申明篇
㈠File类
这个类包装了一个上传文件的一切信息。经由过程它,能够失掉上传文件的文件名、文件巨细、扩大名、文件数据等信息。
File类次要供应以下办法:
1、saveAs感化:将文件换名另存。
原型:
publicvoidsaveAs(java.lang.StringdestFilePathName)
或
publicvoidsaveAs(java.lang.StringdestFilePathName,intoptionSaveAs)
个中,destFilePathName是另存的文件名,optionSaveAs是另存的选项,该选项有三个值,分离是SAVEAS_PHYSICAL,SAVEAS_VIRTUAL,SAVEAS_AUTO。SAVEAS_PHYSICAL标明以操纵体系的根目次为文件根目次另存文件,SAVEAS_VIRTUAL标明以Web使用程序的根目次为文件根目次另存文件,SAVEAS_AUTO则暗示让组件决意,当Web使用程序的根目次存在另存文件的目次时,它会选择SAVEAS_VIRTUAL,不然会选择SAVEAS_PHYSICAL。
比方,saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)实行后若Web服务器安装在C盘,则另存的文件名实践是c:uploadsample.zip。而saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)实行后若Web使用程序的根目次是webapps/jspsmartupload,则另存的文件名实践是webapps/jspsmartupload/upload/sample.zip。saveAs("/upload/sample.zip",SAVEAS_AUTO)实行时若Web使用程序根目次下存在upload目次,则其效果同saveAs("/upload/sample.zip",SAVEAS_VIRTUAL),不然同saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)。
倡议:关于Web程序的开辟来讲,最好利用SAVEAS_VIRTUAL,以便移植。
2、isMissing
感化:这个办法用于判别用户是不是选择了文件,也即对应的表单项是不是有值。选择了文件时,它前往false。未选文件时,它前往true。
原型:publicbooleanisMissing()
3、getFieldName
感化:取HTML表单中对应于此上传文件的表单项的名字。
原型:publicStringgetFieldName()
4、getFileName
感化:取文件名(不含目次信息)
原型:publicStringgetFileName()
5、getFilePathName
感化:取文件全名(带目次)
原型:publicStringgetFilePathName
6、getFileExt
感化:取文件扩大名(后缀)
原型:publicStringgetFileExt()
7、getSize
感化:取文件长度(以字节计)
原型:publicintgetSize()
8、getBinaryData
感化:取文件数据中指定位移处的一个字节,用于检测文件等处置。
原型:publicbytegetBinaryData(intindex)。个中,index暗示位移,其值在0到getSize()-1之间。
㈡Files类
这个类暗示一切上传文件的汇合,经由过程它能够失掉上传文件的数量、巨细等信息。有以下办法:
1、getCount
感化:获得上传文件的数量。
原型:publicintgetCount()
2、getFile
感化:获得指定位移处的文件对象File(这是com.jspsmart.upload.File,不是java.io.File,注重辨别)。
原型:publicFilegetFile(intindex)。个中,index为指定位移,其值在0到getCount()-1之间。
3、getSize
感化:获得上传文件的总长度,可用于限定一次性上传的数据量巨细。
原型:publiclonggetSize()
4、getCollection
感化:将一切上传文件对象以Collection的情势前往,以便别的使用程序援用,扫瞄上传文件信息。
原型:publicCollectiongetCollection()
5、getEnumeration
感化:将一切上传文件对象以Enumeration(列举)的情势前往,以便别的使用程序扫瞄上传文件信息。
原型:publicEnumerationgetEnumeration()
㈢Request类
这个类的功效同等于JSP内置的对象request。只以是供应这个类,是由于关于文件上传表单,经由过程request对象没法取得表单项的值,必需经由过程jspSmartUpload组件供应的Request对象来猎取。该类供应以下办法:
1、getParameter
感化:猎取指定参数之值。当参数不存在时,前往值为null。
原型:publicStringgetParameter(Stringname)。个中,name为参数的名字。
2、getParameterValues
感化:当一个参数能够有多个值时,用此办法来取其值。它前往的是一个字符串数组。当参数不存在时,前往值为null。
原型:publicString[]getParameterValues(Stringname)。个中,name为参数的名字。
3、getParameterNames
感化:获得Request对象中一切参数的名字,用于遍历一切参数。它前往的是一个列举型的对象。
原型:publicEnumerationgetParameterNames()
㈣SmartUpload类这个类完成上传下载事情。
A.上传与下载共用的办法:
只要一个:initialize。
感化:实行上传下载的初始化事情,必需第一个实行。
原型:有多个,次要利用上面这个:
publicfinalvoidinitialize(javax.servlet.jsp.PageContextpageContext)
个中,pageContext为JSP页面内置对象(页面高低文)。
B.上传文件利用的办法:
1、upload
感化:上传文件数据。关于上传操纵,第一步实行initialize办法,第二步就要实行这个办法。
原型:publicvoidupload()
2、save
感化:将全体上传文件保留到指定目次下,并前往保留的文件个数。
原型:publicintsave(StringdestPathName)
和publicintsave(StringdestPathName,intoption)
个中,destPathName为文件保留目次,option为保留选项,它有三个值,分离是SAVE_PHYSICAL,SAVE_VIRTUAL和SAVE_AUTO。(同File类的saveAs办法的选项之值相似)SAVE_PHYSICAL唆使组件将文件保留到以操纵体系根目次为文件根目次的目次下,SAVE_VIRTUAL唆使组件将文件保留到以Web使用程序根目次为文件根目次的目次下,而SAVE_AUTO则暗示由组件主动选择。
注:save(destPathName)感化同等于save(destPathName,SAVE_AUTO)。
3、getSize
感化:取上传文件数据的总长度
原型:publicintgetSize()
4、getFiles
感化:取全体上传文件,以Files对象情势前往,能够使用Files类的操纵办法来取得上传文件的数量等信息。
原型:publicFilesgetFiles()
5、getRequest
感化:获得Request对象,以便由此对象取得上传表单参数之值。
原型:publicRequestgetRequest()
6、setAllowedFilesList
感化:设定同意上传带有指定扩大名的文件,当上传过程当中有文件名不同意时,组件将抛出非常。
原型:publicvoidsetAllowedFilesList(StringallowedFilesList)
个中,allowedFilesList为同意上传的文件扩大名列表,各个扩大名之间以逗号分开。假如想同意上传那些没有扩大名的文件,能够用两个逗号暗示。比方:setAllowedFilesList("doc,txt,,")将同意上传带doc和txt扩大名的文件和没有扩大名的文件。
7、setDeniedFilesList
感化:用于限定上传那些带有指定扩大名的文件。如有文件扩大名被限定,则上传时组件将抛出非常。
原型:publicvoidsetDeniedFilesList(StringdeniedFilesList)
个中,deniedFilesList为克制上传的文件扩大名列表,各个扩大名之间以逗号分开。假如想克制上传那些没有扩大名的文件,能够用两个逗号来暗示。比方:setDeniedFilesList("exe,bat,,")将克制上传带exe和bat扩大名的文件和没有扩大名的文件。
8、setMaxFileSize
感化:设定每一个文件同意上传的最年夜长度。
原型:publicvoidsetMaxFileSize(longmaxFileSize)
个中,maxFileSize为为每一个文件同意上传的最年夜长度,当文件超越此长度时,将不被上传。
9、setTotalMaxFileSize
感化:设定同意上传的文件的总长度,用于限定一次性上传的数据量巨细。
原型:publicvoidsetTotalMaxFileSize(longtotalMaxFileSize)
个中,totalMaxFileSize为同意上传的文件的总长度。
jsp上传图片并天生缩位图大概加水印
有些网站 动网, 上传图片后加给加上本人的字(是在图片上加的)
叨教在JSP里怎样完成??
//增加水印,filePath源图片路径,watermark水印图片路径
publicstaticbooleancreateMark(StringfilePath,Stringwatermark){
ImageIconimgIcon=newImageIcon(filePath);
ImagetheImg=imgIcon.getImage();
ImageIconwaterIcon=newImageIcon(watermark);
ImagewaterImg=waterIcon.getImage();
intwidth=theImg.getWidth(null);
intheight=theImg.getHeight(null);
BufferedImagebimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics2Dg=bimage.creatGraphics();
g.setColor(Color.red);
g.setBackground(Color.white);
g.drawImage(theImg,0,0,null);
g.drawImage(waterImg,100,100,null);
g.drawString("12233",10,10);//增加笔墨
g.dispose();
try{
FileOutputStreamout=newFileOutputStream(filePath);
JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParamparam=encoder.getDefaultJPEGEncodeParam(bimage);
param.setQuality(50f,true);
encoder.encode(bimage,param);
out.close();
}catch(Exceptione){returnfalse;}
returntrue;
}
/////////////////典范////////////////////
packagepackage;
importjava.io.*;
importjavax.servlet.ServletException;
importjavax.servlet.ServletInputStream;
importjavax.servlet.http.HttpServletRequest;
publicclassupload
{
privatestaticStringnewline="
";
privateStringuploadDirectory;
privateStringContentType;
privateStringCharacterEncoding;
publicupload()
{
uploadDirectory=".";
ContentType="";
CharacterEncoding="";
}
privateStringgetFileName(Strings)
{
inti=s.lastIndexOf("");
if(i<0||i>=s.length()-1)
{
i=s.lastIndexOf("/");
if(i<0||i>=s.length()-1)
returns;
}
returns.substring(i+1);
}
publicvoidsetUploadDirectory(Strings)
{
uploadDirectory=s;
}
publicvoidsetContentType(Strings)
{
ContentType=s;
inti;
if((i=ContentType.indexOf("boundary="))!=-1)
{
ContentType=ContentType.substring(i+9);
ContentType="--"+ContentType;
}
}
publicvoidsetCharacterEncoding(Strings)
{
CharacterEncoding=s;
}
publicStringuploadFile(HttpServletRequesthttpservletrequest)
throwsServletException,IOException
{
Strings=null;
setCharacterEncoding(httpservletrequest.getCharacterEncoding());
setContentType(httpservletrequest.getContentType());
s=uploadFile(httpservletrequest.getInputStream());
returns;
}
publicStringuploadFile(ServletInputStreamservletinputstream)
throwsServletException,IOException
{
Strings=null;
Strings1=null;
byteabyte0[]=newbyte;
byteabyte1[]=newbyte;
intai[]=newint;
intai1[]=newint;
Strings2;
while((s2=readLine(abyte0,ai,servletinputstream,CharacterEncoding))!=null)
{
inti=s2.indexOf("filename=");
if(i>=0)
{
s2=s2.substring(i+10);
if((i=s2.indexOf("""))>0)
s2=s2.substring(0,i);
break;
}
}
s1=s2;
if(s1!=null&&!s1.equals("""))
{
s1=getFileName(s1);
Strings3=readLine(abyte0,ai,servletinputstream,CharacterEncoding);
if(s3.indexOf("Content-Type")>=0)
readLine(abyte0,ai,servletinputstream,CharacterEncoding);
Filefile=newFile(uploadDirectory,s1);
FileOutputStreamfileoutputstream=newFileOutputStream(file);
while((s3=readLine(abyte0,ai,servletinputstream,CharacterEncoding))!=null)
{
if(s3.indexOf(ContentType)==0&&abyte0==45)
break;
if(s!=null)
{
fileoutputstream.write(abyte1,0,ai1);
fileoutputstream.flush();
}
s=readLine(abyte1,ai1,servletinputstream,CharacterEncoding);
if(s==null||s.indexOf(ContentType)==0&&abyte1==45)
break;
fileoutputstream.write(abyte0,0,ai);
fileoutputstream.flush();
}
bytebyte0;
if(newline.length()==1)
byte0=2;
else
byte0=1;
if(s!=null&&abyte1!=45&&ai1>newline.length()*byte0)
fileoutputstream.write(abyte1,0,ai1-newline.length()*byte0);
if(s3!=null&&abyte0!=45&&ai>newline.length()*byte0)
fileoutputstream.write(abyte0,0,ai-newline.length()*byte0);
fileoutputstream.close();
}
returns1;
}
privateStringreadLine(byteabyte0[],intai[],ServletInputStreamservletinputstream,Strings)
{
ai=servletinputstream.readLine(abyte0,0,abyte0.length);
if(ai==-1)
returnnull;
breakMISSING_BLOCK_LABEL_27;
Objectobj;
obj;
returnnull;
if(s==null)
returnnewString(abyte0,0,ai);
returnnewString(abyte0,0,ai,s);
obj;
returnnull;
}
}
JSP页:
<%@pagecontentType="text/html;charset=gb2312"import="package.upload"%>
<%
StringDir="c:dirupload";
Stringfn="";
uploadupload=newupload();
upload.setUploadDirectory(Dir);
fn=upload.uploadFile(request);
%>
随机图片称号
<%
mySmartUpload.initialize(pageContext);
mySmartUpload.service(request,response);
mySmartUpload.upload();
Stringfn=mySmartUpload.getFiles().getFile(0).getFileName();
mySmartUpload.save("upload/");//文件保留的目次为upload
out.println("已乐成上传了文件,请检察<ahref=http://www.163design.net/j/f/upload/"+fn+">这里</a>");
%>
下面的程序能够上传图片,不外只能上传gif大概JPG图片。
并且保留图片在upload文件夹上面,要想GIF或Jpg图片的称号变成年+月+日+随机数.gif或年+月+日+随机数.jpg
只同意上传jpg或gif图片,在客户端用javaScript把持要好些。
变图片称号可用以下代码:本人看看就分明了。:
//失掉实践路径
StringrealPath=this.masRequest.getRequest().getRealPath("/");
StringuserPhotoPath=realPath+"imagesUserPhoto";
userPhotoPath=MasString.replace(userPhotoPath,"","\");
if(!file.getFileName().trim().equals(""))
{
//依据体系工夫天生文件名
DatenowTime=newDate();
emp_Photo=userPhotoPath+String.valueOf(nowTime.getTime())+"."+file.getFileExt();
file.saveAs(emp_Photo);
System.out.println("file.saveAs()="+"OK!!!");
}
大型的应用一般不会用这些框架(因为性能考虑);开发人员根据需要选择用一些框架,也可以不选用框架;不用框架并不代表要自己写框架;修改框架的可能性更小。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
页:
[1]
2