Нужна помощь в запуске рекурсивного касания из Java JSP

#java #unix #command #execute

#java #unix #команда #выполнить

Вопрос:

Есть ли в Java какой-либо способ использовать метод exec для выполнения рекурсивного касания?

Цель состоит в том, чтобы настроить простую веб-страницу, которая при перезагрузке будет касаться каталога сайта, чтобы дизайн мог гарантировать, что кэширование больше не происходит. Пожалуйста, любая помощь!!!

Вот что у меня есть на данный момент, и не работает в моем jsp:

 <%@ page import="java.io.BufferedReader,java.io.File,java.io.FileWriter, java.io.IOException, java.io.InputStreamReader, java.util.Map" %>

<%


String s = null;
// system command to run
String cmd = "find /home/abcdefg/ -exec touch {} \;";
// set the working directory for the OS command processor
File workDir = new File("/home/ss/public_html/ss");

try {
Process p = Runtime.getRuntime().exec(cmd, null, workDir);
int i = p.waitFor();
if (i == 0){
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
// read the output from the command
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
}
else {
BufferedReader stdErr = new BufferedReader(new InputStreamReader(p.getErrorStream()));
// read the output from the command
while ((s = stdErr.readLine()) != null) {
System.out.println(s);
}

}
}
catch (Exception e) {
System.out.println(e);
}


%>
  

Комментарии:

1. я думаю, было бы лучше добавить случайный параметр ?u = 12345 к URL-адресам, чтобы браузер не видел URL-адреса как кэшируемые, и измените значение этого параметра, если когда-либо вам понадобится «функциональность касания» В стороне, не помещайте Java-код в jsp. Поместите java-код в классы java и используйте el для вызова метода approprate.

2. Полностью согласен. Это была скорее страница быстрой утилиты для моего специалиста по Javascript, чтобы его изменения всегда появлялись, не беспокоя меня о перезапуске ;-).

Ответ №1:

Вы действительно хотите коснуться файлов под /home/abcdefg ? Я мог бы представить, что вы хотите коснуться всех файлов под /home/ss/public_html/ss . Если это так, вам нужно изменить команду find:

 String cmd = "find /home/ss/public_html/ss -exec touch {} \;"
  

Ответ №2:

Попробуйте разделить аргументы команды:

 // system command to run
String[] cmd = {"find","/home/abcdefg/","-exec","touch","{}",";"};
  

Ответ №3:

Все по тому же пути — я выяснил ответ, и он близок к тому, что вы, ребята, опубликовали:

<% String[] cmd = {«/bin/sh», «-c», «cd /xx/xx/xx/xx; найти . -exec touch {} ;»}; Процесс p = Runtime.getRuntime().exec(cmd); %>

Спасибо вам, ребята, за быстрый ответ!!

Дэниел