TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
在JSP中我们经常要调用服务器端的一些dos命令,已达到一些特殊的效果,但同时调用服务器端的dos命令也存在着一些安全隐患,因此需要慎重使用。 以下以一个例子来说明用jsp执行dos的过程,比如在服务器端调用jar.exe命令将c:javamp目录下所有文件打包到:
c:java20060722.jar
目录名称为当天的日期,备份完后再把c:javamp下所有文件删除。 如果在服务器上,我们可以在dos下直接执行: c:jdk1.5injar cf c:java20060722.jar c:javamp 命令, 然后再把c:javamp目录删除即可。 在JSP中我们应当这么来写:
<%@ 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;
}
源码下载:http://file.javaxxz.com/2014/10/1/151830984.zip |
|