在JSP中我们经常要调用服务器端的一些dos命令,已达到一些特殊的效果,但同时调用服务器端的dos命令也存在着一些安全隐患,因此需要慎重使用。
以下以一个例子来说明用jsp执行dos的过程,比如在服务器端调用jar.exe命令将c:\java\bmp目录下所有文件打包到:
c:\java\20060722.jar
目录名称为当天的日期,备份完后再把c:\java\bmp下所有文件删除。
如果在服务器上,我们可以在dos下直接执行:
c:\jdk1.5\bin\jar cf c:\java\20060722.jar c:\java\bmp 命令, 然后再把c:\java\bmp目录删除即可。
在JSP中我们应当这么来写: </td> </tr> </table>
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.io.*"%>
<%
//执行dos命令 String commandstr = "c:/jdk1.5/bin/jar cf c:/java/20060722.jar c:/java/bmp"; Process p ; try { p = Runtime.getRuntime().exec(commandstr); //等待刚刚执行的命令的结束 while (true){ if(p.waitFor() == 0) break; } } catch (Exception e) { out.println(e.toString()); } //删除已经打包的文件及其目录 File f = new File("c:/java/bmp"); String[] allFiles = f.list(); for (int i = 0; i < allFiles.length; i++) { File delF = new File("c:/java/bmp/",allFiles[i]); delF.delete(); } File delD = new File("c:/java/bmp"); delD.delete();%>
在jsp中以下代码必须执行,如果没有该代码,则由于删除文件的速度快于打包的速度,因此当压缩包还没有打包完成,一些文件已经被删除,加入下面的代码,会在此一直做循环,一直p.waitFor()(这个方法的说明是:等待子进程的结束,如果已经结束,一般返回0)返回0为止才会接着执行后面的代码
while (true){
if(p.waitFor() == 0) break;
}
↑返回目录
前一篇: 表单Form中的get和post方法
后一篇: jsp入门实例:购物车