java execute script in Tomcat
I created a spring boot project, which I'm running on a local tomcat (I'm planning to deploy this to a webserver). Within this project I created a rest-service, which should execute a .bat file.
my rest services look like this (neither of them works)
@RequestMapping(value = "/esc", method= RequestMethod.GET)
public String esc() throws IOException, InterruptedException {
String folder = "P:\Documents\testcmd";
String cmdarray = new String{"cmd -c","dosomething.cmd"};
ProcessBuilder processBuilder = new ProcessBuilder( cmdarray );
processBuilder.directory(new File(folder));
Process process = processBuilder.start();
int exitCode = -1;
boolean finished = false;
while ( !finished ) {
exitCode = process.waitFor();
finished = true;
}
return folder;
}
@RequestMapping(value = "/ex", method= RequestMethod.GET)
public String executeShellScript(){
//final String shCmd = "/bin/bash -c helloworld.sh";
System.out.println("Working Directory = " +
System.getProperty("user.dir"));
final String shCmd = "cmd -c P:/Documents/testcmd/dosomething.cmd";
String output = executeCommand(shCmd);
return output;
}
private String executeCommand(String command){
Process p;
InputStream in = null;
String value = "";
try {
p = Runtime.getRuntime().exec(command);
in = p.getInputStream();
int ch;
while((ch = in.read()) != -1) {
value = String.valueOf((char)ch);
}
}catch (IOException e){
e.printStackTrace();
}
return value;
}
I tried it with a processbuilder and with runtime.
The file I want to execute is in this folder: "P:Documentstestcmd"
Is it even possible to execute a local file with a tomcat server?
java spring rest shell tomcat
add a comment |
I created a spring boot project, which I'm running on a local tomcat (I'm planning to deploy this to a webserver). Within this project I created a rest-service, which should execute a .bat file.
my rest services look like this (neither of them works)
@RequestMapping(value = "/esc", method= RequestMethod.GET)
public String esc() throws IOException, InterruptedException {
String folder = "P:\Documents\testcmd";
String cmdarray = new String{"cmd -c","dosomething.cmd"};
ProcessBuilder processBuilder = new ProcessBuilder( cmdarray );
processBuilder.directory(new File(folder));
Process process = processBuilder.start();
int exitCode = -1;
boolean finished = false;
while ( !finished ) {
exitCode = process.waitFor();
finished = true;
}
return folder;
}
@RequestMapping(value = "/ex", method= RequestMethod.GET)
public String executeShellScript(){
//final String shCmd = "/bin/bash -c helloworld.sh";
System.out.println("Working Directory = " +
System.getProperty("user.dir"));
final String shCmd = "cmd -c P:/Documents/testcmd/dosomething.cmd";
String output = executeCommand(shCmd);
return output;
}
private String executeCommand(String command){
Process p;
InputStream in = null;
String value = "";
try {
p = Runtime.getRuntime().exec(command);
in = p.getInputStream();
int ch;
while((ch = in.read()) != -1) {
value = String.valueOf((char)ch);
}
}catch (IOException e){
e.printStackTrace();
}
return value;
}
I tried it with a processbuilder and with runtime.
The file I want to execute is in this folder: "P:Documentstestcmd"
Is it even possible to execute a local file with a tomcat server?
java spring rest shell tomcat
1
Are you running on Windows or Linux ? (it's unclear as you call /bin/bash and cmd -c )
– Eugène Adell
Nov 13 '18 at 16:23
i am running this on windows
– vZ_LiTe
Nov 14 '18 at 6:36
add a comment |
I created a spring boot project, which I'm running on a local tomcat (I'm planning to deploy this to a webserver). Within this project I created a rest-service, which should execute a .bat file.
my rest services look like this (neither of them works)
@RequestMapping(value = "/esc", method= RequestMethod.GET)
public String esc() throws IOException, InterruptedException {
String folder = "P:\Documents\testcmd";
String cmdarray = new String{"cmd -c","dosomething.cmd"};
ProcessBuilder processBuilder = new ProcessBuilder( cmdarray );
processBuilder.directory(new File(folder));
Process process = processBuilder.start();
int exitCode = -1;
boolean finished = false;
while ( !finished ) {
exitCode = process.waitFor();
finished = true;
}
return folder;
}
@RequestMapping(value = "/ex", method= RequestMethod.GET)
public String executeShellScript(){
//final String shCmd = "/bin/bash -c helloworld.sh";
System.out.println("Working Directory = " +
System.getProperty("user.dir"));
final String shCmd = "cmd -c P:/Documents/testcmd/dosomething.cmd";
String output = executeCommand(shCmd);
return output;
}
private String executeCommand(String command){
Process p;
InputStream in = null;
String value = "";
try {
p = Runtime.getRuntime().exec(command);
in = p.getInputStream();
int ch;
while((ch = in.read()) != -1) {
value = String.valueOf((char)ch);
}
}catch (IOException e){
e.printStackTrace();
}
return value;
}
I tried it with a processbuilder and with runtime.
The file I want to execute is in this folder: "P:Documentstestcmd"
Is it even possible to execute a local file with a tomcat server?
java spring rest shell tomcat
I created a spring boot project, which I'm running on a local tomcat (I'm planning to deploy this to a webserver). Within this project I created a rest-service, which should execute a .bat file.
my rest services look like this (neither of them works)
@RequestMapping(value = "/esc", method= RequestMethod.GET)
public String esc() throws IOException, InterruptedException {
String folder = "P:\Documents\testcmd";
String cmdarray = new String{"cmd -c","dosomething.cmd"};
ProcessBuilder processBuilder = new ProcessBuilder( cmdarray );
processBuilder.directory(new File(folder));
Process process = processBuilder.start();
int exitCode = -1;
boolean finished = false;
while ( !finished ) {
exitCode = process.waitFor();
finished = true;
}
return folder;
}
@RequestMapping(value = "/ex", method= RequestMethod.GET)
public String executeShellScript(){
//final String shCmd = "/bin/bash -c helloworld.sh";
System.out.println("Working Directory = " +
System.getProperty("user.dir"));
final String shCmd = "cmd -c P:/Documents/testcmd/dosomething.cmd";
String output = executeCommand(shCmd);
return output;
}
private String executeCommand(String command){
Process p;
InputStream in = null;
String value = "";
try {
p = Runtime.getRuntime().exec(command);
in = p.getInputStream();
int ch;
while((ch = in.read()) != -1) {
value = String.valueOf((char)ch);
}
}catch (IOException e){
e.printStackTrace();
}
return value;
}
I tried it with a processbuilder and with runtime.
The file I want to execute is in this folder: "P:Documentstestcmd"
Is it even possible to execute a local file with a tomcat server?
java spring rest shell tomcat
java spring rest shell tomcat
asked Nov 13 '18 at 13:00
vZ_LiTevZ_LiTe
194
194
1
Are you running on Windows or Linux ? (it's unclear as you call /bin/bash and cmd -c )
– Eugène Adell
Nov 13 '18 at 16:23
i am running this on windows
– vZ_LiTe
Nov 14 '18 at 6:36
add a comment |
1
Are you running on Windows or Linux ? (it's unclear as you call /bin/bash and cmd -c )
– Eugène Adell
Nov 13 '18 at 16:23
i am running this on windows
– vZ_LiTe
Nov 14 '18 at 6:36
1
1
Are you running on Windows or Linux ? (it's unclear as you call /bin/bash and cmd -c )
– Eugène Adell
Nov 13 '18 at 16:23
Are you running on Windows or Linux ? (it's unclear as you call /bin/bash and cmd -c )
– Eugène Adell
Nov 13 '18 at 16:23
i am running this on windows
– vZ_LiTe
Nov 14 '18 at 6:36
i am running this on windows
– vZ_LiTe
Nov 14 '18 at 6:36
add a comment |
1 Answer
1
active
oldest
votes
I solved the problem. The sollution with Runtime.getRuntime().exec(command)
was correct. Only my system call was wrong. Instead of final String shCmd = "cmd -c P:/Documents/testcmd/dosomething.cmd";
I had to use "P:/Documents/testcmd/dosomething.cmd"
. In addition I had to change the dosomething.cmd
because it was wrong. When executing the plain java code, the file would open a cmd terminal and then print hello in an endless loop. I changed the file content that instead of the endless loop in the terminal it prints hello into another file.
// method is mapped on root/ex
@RequestMapping(value = "/ex", method= RequestMethod.GET)
public String executeShellScript(){
System.out.println("Working Directory = " +
System.getProperty("user.dir"));
final String shCmd = "P:\Documents\testcmd\dosomething.cmd -c";
String output = executeCommand(shCmd);
return output;
}
batch file before & after
@echo off
:start
echo hallo
pause
goto start
after
@echo off
@echo This is a test>> P:/Documents/testcmd/file.txt
@echo 123>> P:/Documents/testcmd/file.txt
@echo 245.67>> P:/Documents/testcmd/file.txt
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53281578%2fjava-execute-script-in-tomcat%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I solved the problem. The sollution with Runtime.getRuntime().exec(command)
was correct. Only my system call was wrong. Instead of final String shCmd = "cmd -c P:/Documents/testcmd/dosomething.cmd";
I had to use "P:/Documents/testcmd/dosomething.cmd"
. In addition I had to change the dosomething.cmd
because it was wrong. When executing the plain java code, the file would open a cmd terminal and then print hello in an endless loop. I changed the file content that instead of the endless loop in the terminal it prints hello into another file.
// method is mapped on root/ex
@RequestMapping(value = "/ex", method= RequestMethod.GET)
public String executeShellScript(){
System.out.println("Working Directory = " +
System.getProperty("user.dir"));
final String shCmd = "P:\Documents\testcmd\dosomething.cmd -c";
String output = executeCommand(shCmd);
return output;
}
batch file before & after
@echo off
:start
echo hallo
pause
goto start
after
@echo off
@echo This is a test>> P:/Documents/testcmd/file.txt
@echo 123>> P:/Documents/testcmd/file.txt
@echo 245.67>> P:/Documents/testcmd/file.txt
add a comment |
I solved the problem. The sollution with Runtime.getRuntime().exec(command)
was correct. Only my system call was wrong. Instead of final String shCmd = "cmd -c P:/Documents/testcmd/dosomething.cmd";
I had to use "P:/Documents/testcmd/dosomething.cmd"
. In addition I had to change the dosomething.cmd
because it was wrong. When executing the plain java code, the file would open a cmd terminal and then print hello in an endless loop. I changed the file content that instead of the endless loop in the terminal it prints hello into another file.
// method is mapped on root/ex
@RequestMapping(value = "/ex", method= RequestMethod.GET)
public String executeShellScript(){
System.out.println("Working Directory = " +
System.getProperty("user.dir"));
final String shCmd = "P:\Documents\testcmd\dosomething.cmd -c";
String output = executeCommand(shCmd);
return output;
}
batch file before & after
@echo off
:start
echo hallo
pause
goto start
after
@echo off
@echo This is a test>> P:/Documents/testcmd/file.txt
@echo 123>> P:/Documents/testcmd/file.txt
@echo 245.67>> P:/Documents/testcmd/file.txt
add a comment |
I solved the problem. The sollution with Runtime.getRuntime().exec(command)
was correct. Only my system call was wrong. Instead of final String shCmd = "cmd -c P:/Documents/testcmd/dosomething.cmd";
I had to use "P:/Documents/testcmd/dosomething.cmd"
. In addition I had to change the dosomething.cmd
because it was wrong. When executing the plain java code, the file would open a cmd terminal and then print hello in an endless loop. I changed the file content that instead of the endless loop in the terminal it prints hello into another file.
// method is mapped on root/ex
@RequestMapping(value = "/ex", method= RequestMethod.GET)
public String executeShellScript(){
System.out.println("Working Directory = " +
System.getProperty("user.dir"));
final String shCmd = "P:\Documents\testcmd\dosomething.cmd -c";
String output = executeCommand(shCmd);
return output;
}
batch file before & after
@echo off
:start
echo hallo
pause
goto start
after
@echo off
@echo This is a test>> P:/Documents/testcmd/file.txt
@echo 123>> P:/Documents/testcmd/file.txt
@echo 245.67>> P:/Documents/testcmd/file.txt
I solved the problem. The sollution with Runtime.getRuntime().exec(command)
was correct. Only my system call was wrong. Instead of final String shCmd = "cmd -c P:/Documents/testcmd/dosomething.cmd";
I had to use "P:/Documents/testcmd/dosomething.cmd"
. In addition I had to change the dosomething.cmd
because it was wrong. When executing the plain java code, the file would open a cmd terminal and then print hello in an endless loop. I changed the file content that instead of the endless loop in the terminal it prints hello into another file.
// method is mapped on root/ex
@RequestMapping(value = "/ex", method= RequestMethod.GET)
public String executeShellScript(){
System.out.println("Working Directory = " +
System.getProperty("user.dir"));
final String shCmd = "P:\Documents\testcmd\dosomething.cmd -c";
String output = executeCommand(shCmd);
return output;
}
batch file before & after
@echo off
:start
echo hallo
pause
goto start
after
@echo off
@echo This is a test>> P:/Documents/testcmd/file.txt
@echo 123>> P:/Documents/testcmd/file.txt
@echo 245.67>> P:/Documents/testcmd/file.txt
answered Nov 14 '18 at 10:23
vZ_LiTevZ_LiTe
194
194
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53281578%2fjava-execute-script-in-tomcat%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Are you running on Windows or Linux ? (it's unclear as you call /bin/bash and cmd -c )
– Eugène Adell
Nov 13 '18 at 16:23
i am running this on windows
– vZ_LiTe
Nov 14 '18 at 6:36