1, on the page we can simply write:
2. Configure the servlet to jump to the Java class in Web. xml:
<servlet> <Servlet-name>Bbsfile</Servlet-name> <Servlet-class>Com.zl.common.downloadfile</Servlet-class> </servlet> <servlet-mapping> <Servlet-name>Bbsfile</Servlet-name> <Url-pattern>/bbsfile</Url-pattern> </servlet-mapping>
3. Write the Java class to download the file:
/** Created on 2004-12-22 * * TODO to change the template for this generated file go to * Window-preferences-java -Code Style-code Templates*/ PackageCom.zl.common;ImportJava.io.BufferedInputStream;ImportJava.io.BufferedOutputStream;ImportJava.io.File;ImportJava.io.FileInputStream;Importjava.io.IOException;ImportJavax.activation.FileTypeMap;Importjavax.servlet.ServletException;ImportJavax.servlet.http.HttpServlet;Importjavax.servlet.http.HttpServletRequest;ImportJavax.servlet.http.HttpServletResponse;ImportCom.cd.util.ReadPropertiesFile;Importcom.zl.base.core.Constants; Public classDownloadFileextendsHttpServlet {/** * */ Private Static Final LongSerialversionuid = 1L; /*** Default constructor. */ PublicDownloadFile () {Super(); } /*** Init method. * * @throwsservletexception * never. */ Public voidInit ()throwsservletexception {return; } Public voidService (HttpServletRequest request, httpservletresponse response)throwsServletexception, IOException {Service (Request, response,true); } Public voidService (HttpServletRequest request, httpservletresponse response,BooleanBlnsyn)throwsservletexception, IOException {Try{Object User=request.getsession (). getattribute (Constants.session_user); if(User! =NULL) {String MimeType= Request.getparameter ("MimeType"); String filename= Request.getparameter ("filename"); String Oldfilename= Request.getparameter ("Saveasfilename"); if(mimetype!=NULL) Response.setcontenttype (MimeType); if(Oldfilename = =NULL) {Response.setheader ("Content-disposition", "attachment; Filename= "+filename); } Else{oldfilename=NewString (Oldfilename.getbytes ("iso-8859-1"), "UTF-8");; Response.setheader ("Content-disposition", "attachment; Filename= "+oldfilename); //Response.setheader ("content-disposition", "attachment; //filename= "+oldfilename);} String Uploadfilepath= Readpropertiesfile.getinstance (). GetProperty ("Uploadfilepath", "c:/") + "announce/"; File File=NewFile (Uploadfilepath +filename); System.out.println ("File path:" +uploadfilepath +filename); if(!file.exists ()) {File.createnewfile (); } filetypemap FMap=Filetypemap.getdefaultfiletypemap (); String filetype=fmap.getcontenttype (file); Response.setcontenttype (filetype); Response.setcontentlength ((int) file.length ()); Bufferedoutputstream Bos=NewBufferedoutputstream (Response.getoutputstream ()); Bufferedinputstream bis=NewBufferedinputstream (Newfileinputstream (file)); byte[] input =New byte[1024]; BooleanEOF =false; while(!EOF) { intLength =bis.read (input); if(length = =-1) {EOF=true; } Else{bos.write (input,0, length); }} bos.flush (); Bis.close (); Bos.close (); } } Catch(Exception ex) {}return; } }
Where the Readpropertiesfile class is a way to define where files are saved:
PackageCom.cd.util;ImportJava.io.InputStream;Importjava.util.Properties;/*** Read the contents of the sale.properties file * *@authorlxk 2013-05-28 Single case **/ Public classReadpropertiesfile {Static PrivateReadpropertiesfile instance =NewReadpropertiesfile ();//Unique Instances PrivateProperties Dbprops =NULL; PrivateProperties Getdbprops () {returnDbprops; } //Default Private construction method PrivateReadpropertiesfile () {InputStream is= Readpropertiesfile.class. getResourceAsStream ("/sale.properties"); Dbprops=NewProperties (); Try{dbprops.load (IS); } Catch(Exception e) {System.err.println ("Cannot read the properties file. Make sure that sale.properties is in the path specified in Classpath "); } } /*** Returns a unique instance. If this method is called for the first time, the instance is created *@returnDbconnectionmanager only Instance*/ Public Static synchronizedreadpropertiesfile getinstance () {if(Instance = =NULL) {instance=NewReadpropertiesfile (); } returninstance; } Publicstring GetProperty (String key, String defaultvalue) {//If Taglib.properties does not have a key, the default DefaultValue returninstance.getdbprops (). GetProperty (key, DefaultValue); }}
Write a sale.properties file that configures the path of the server file to be stored in the project:
# #uploadfilepath =/home/webapp/sxwl_file/upload/
uploadfilepath=c:/logs/
Java server file download via hyperlinks and servlet configuration