Avatar billede eerikk Nybegynder
08. november 2003 - 17:09 Der er 69 kommentarer og
2 løsninger

Gåseøjne i Java/JSP

Hejsa,

Jeg har et problem der gør mig vanvittig:

Jeg har en bean hvorfra jeg kalder en kommando til det serveren:

String inputFile =
      "\"/home/userC/public_html/erk.dk/tomcat4-webapps/ROOT/gimages/"+ filnavn + "\"";
     
      String outputFile =
      "\"/home/userC/public_html/erk.dk/tomcat4-webapps/ROOT/gimages/" + (translateToThumbnail(filnavn)) + "\"";
     
      String executableStatement =
      ("convert -geometry " + maxSize + "x" + maxSize + " "+inputFile + " " + outputFile);

try {
        Runtime.getRuntime().exec(executableStatement);
      }
      catch(Exception e) {
        System.out.println("FEJL....");
      }

----------------------------------------------
"convert" er en unix-kommando. Jeg har sat gåse-øjne omkring stil/filnavn for at der ikke skal opstå problemer med filnavne der indeholder mellemrum, men gør jeg det som ovenstående funker det slet ikke - heller ikke med filnavne uden mellemrum i. Tager jeg det ovenstående og gør det manuelt fungerer det dog fint! Hvorfor!?
Avatar billede erikjacobsen Ekspert
08. november 2003 - 17:28 #1
Prøv at droppe de "..."-ere og prøv igen
Avatar billede arne_v Ekspert
08. november 2003 - 17:28 #2
To spørgsmål:

1)  Har du checket om den konstruerede kommando er god nok ved at
    skrive executableStatement ud lige inden exec ?

2)  Er convert i PATH for Tomcat processen ?
Avatar billede arne_v Ekspert
08. november 2003 - 17:29 #3
(iøvrigt kan du få Tomcat til at give dig den fulde sti for en fil
i din webapp, så du undgår den hardcoded sti)
Avatar billede erikjacobsen Ekspert
08. november 2003 - 17:31 #4
Jah, det vil så ikke hjælpe at droppe dem i dit tilfælde ;)
Jeg fik ikke læst det ikke hele.
Avatar billede eerikk Nybegynder
08. november 2003 - 17:33 #5
arne v>> To spørgsmål:

1: Ja - lige præcis... Jeg skriver den ud copy-paster over i Telnet vindue og så virker den fint nok - meget mærkeligt.

2: Yes - har brugt convert med succes, men blev opmærksom på at den ikke lavede min thumbnail når filnavnet for kilde-billedet indeholdt mellemrum.
Avatar billede eerikk Nybegynder
08. november 2003 - 17:38 #6
*glad for at se arne v - det tegner godt...* arne v>> Du kan regne med jeg har høje forventninger nu, men det er din egen skyld, når du tidligere er kommet med sådan nogle overvældende ekstensive og gode svar :o)
Avatar billede arne_v Ekspert
08. november 2003 - 17:38 #7
Fordi convert er i PATH for din process behøver den jo ikke at være det
for Tomcat processen.

Prøv evt. med fuld sti til convert altsp /usr/bin/convert (eller hvor den
nu ligger henne).
Avatar billede arne_v Ekspert
08. november 2003 - 17:39 #8
Og det skal være en executable det duer ikke med et alias.
Avatar billede eerikk Nybegynder
08. november 2003 - 17:42 #9
... Jeg har svært ved at forstå det... Jeg skal sige jeg ikke ved så meget om Tomcat og at jeg har et jsp-hotel der klarer serversiden for mig. Hvilke filer hvor skal jeg gøre hvad med? hvordan modificerer jeg et udtryk som det jeg har skrevet til at starte med?
Avatar billede arne_v Ekspert
08. november 2003 - 17:44 #10
Ret:

String executableStatement =
("convert -geometry " + maxSize + "x" + maxSize + " "+inputFile + " " + outputFile);

til så der er absolut sti på convert:

String executableStatement =
("/et/eller/andet/convert -geometry " + maxSize + "x" + maxSize + " "+inputFile + " " + outputFile);
Avatar billede eerikk Nybegynder
08. november 2003 - 17:46 #11
ok hvad forskel gør det og hvordan finder jeg ud af hvad "et eller andet" skal være? (unskyld min hjælpeløse uvidenhed)... :o}
Avatar billede arne_v Ekspert
08. november 2003 - 17:51 #12
Prøv først i en telnet/ssh session at check om det er et alias med
kommandoen:

alias

Derefter ser du din PATH med kommandoen:

echo $PATH

og kigger i de directories efter convert.
Avatar billede erikjacobsen Ekspert
08. november 2003 - 17:52 #13
eller

  which convert
Avatar billede arne_v Ekspert
08. november 2003 - 17:55 #14
Min hypotese er at PATH ikke er sat op for Tomcat processen som den er for
en telnet/ssh bruger.
Avatar billede arne_v Ekspert
08. november 2003 - 17:57 #15
Det er også en mulighed at dit JSP hotel har disablet muligheden for
at bruge exec.
Avatar billede eerikk Nybegynder
08. november 2003 - 17:58 #16
which convert giver "/usr/X11R6/bin/convert"
Avatar billede eerikk Nybegynder
08. november 2003 - 17:59 #17
alias gav ikke noget med convert - faktisk næsten ingenting
Avatar billede eerikk Nybegynder
08. november 2003 - 18:02 #18
"Det er også en mulighed at dit JSP hotel har disablet muligheden for
at bruge exec." -->

? Det forstår jeg ikke for convert virker fint - bare ikke på failnavne der indeholder mellemrum... Der bruger jeg exec uden problemer...

"Min hypotese er at PATH ikke er sat op for Tomcat processen som den er for
en telnet/ssh bruger."-->

Er det ikke mulig at det  stedet er noget med tegn-konvertering mellem jsp og unix er anderledes end mellem Telnet og unix og mellem jsp og html?
Avatar billede arne_v Ekspert
08. november 2003 - 18:02 #19
Så prøv med:

String executableStatement =
("/usr/X11R6/bin/convert -geometry " + maxSize + "x" + maxSize + " "+inputFile + " " + outputFile);
Avatar billede arne_v Ekspert
08. november 2003 - 18:03 #20
Det er muligt at jeg har misforstået dig - virker exec og convert fint
uden "" med filnavne uden mellemrum i ?
Avatar billede eerikk Nybegynder
08. november 2003 - 18:06 #21
Ja det gør de - jeg undskylder hvis jeg har udtrykt mig uklart... :o)
Avatar billede eerikk Nybegynder
08. november 2003 - 18:07 #22
"String executableStatement =
("/usr/X11R6/bin/convert -geometry " + maxSize + "x" + maxSize + " "+inputFile + " " + outputFile);" er unødvendigt hvis convert og exec virker uden mellemrum og "" ikke også?
Avatar billede arne_v Ekspert
08. november 2003 - 18:09 #23
Jo.
Avatar billede eerikk Nybegynder
08. november 2003 - 18:16 #24
Er det ikke bare mærkeligt? kan man se et sted hvad den bean jeg bruger har bedt serveren om at gøre? min 'String executableStatement' bliver jo formateret når jeg får den vist i html via min jsp-side...
Avatar billede eerikk Nybegynder
08. november 2003 - 18:19 #25
jeg aner ikke hvad jeg skal stille op...
Avatar billede erikjacobsen Ekspert
08. november 2003 - 18:23 #26
formatteret? Kan du ikke bare sige "vis kilde" for at se hvordan den rigtigt
siger ud. Men kunne en løsning ikke være at forbyde mellemrum - fx. lave dem
om til "_".
Avatar billede eerikk Nybegynder
08. november 2003 - 18:28 #27
erikjacobsen hvad med dette: fil "a_b.jpg" overskriver "a b.jpg" og desuden er dette et problem som jeg tror mange andre kunne have glæde af - altså hvis det bliver løst i stedet for at blive "omgået". Desuden bruger jeg en upload-bean der hedder "com.jspsmart.upload.SmartUpload". jeg kan ikke sætte filnavnet for den uploadede fil fordi metoden til det er protected... Jeg prøvede først at fjerne mellemrum i det navn jeg gav thumbnailen, men så kløjsede convert bare på kilde-filnavnet som jo har mellemrum...
Avatar billede arne_v Ekspert
08. november 2003 - 18:30 #28
Hvilken server bruger dit JSP hotel ? Tomcat ? Resin ?
Avatar billede eerikk Nybegynder
08. november 2003 - 18:30 #29
Men lad os nu se hvad arne v har i ærmet - dette er første gang jeg oplaver at han ikke øjeblikkeligt har har rystet den perfekte løsning ud af ærmet.
Avatar billede eerikk Nybegynder
08. november 2003 - 18:31 #30
arne v>> Ups.. hehe.. :o) den bruger Tomcat
Avatar billede eerikk Nybegynder
08. november 2003 - 18:32 #31
min web.xml ser sådan ud hvis det kan bruges til noget...:

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Test</display-name>
</web-app>
Avatar billede arne_v Ekspert
08. november 2003 - 18:33 #32
Jeg har ikke givet op, men jeg er helt på bar bund med hensyn til hvad det kan være.
Avatar billede eerikk Nybegynder
08. november 2003 - 18:36 #33
!...
Avatar billede eerikk Nybegynder
08. november 2003 - 18:38 #34
Og der blev Erik meget bange *lol*
Avatar billede eerikk Nybegynder
08. november 2003 - 18:47 #35
ARG! Nu kan jeg ikke engang komme ind og compile den bean det handler om via Telnet fordi win2000 Prof hele tiden lukker forbindelsen hvis vinduet står ubrugt i bare 5 minutter, uden at jeg kan exitte korrekt, så nu kan jeg ikke komme på fordi der er for mange samtidige forbindelser! Det er ikke rigtig min dag... :o)
Avatar billede arne_v Ekspert
08. november 2003 - 18:53 #36
Jeg er nu kommet så langt at jeg kan genskabe problemet på min Linux box.

Stay tuned !
Avatar billede eerikk Nybegynder
08. november 2003 - 18:58 #37
aha! Det lyder MEGET interessant... Jeg skal til Lisa Ekhdal - koncert med kæresten iaften, men jeg glæder mig meget til at se hvad der sker...

Jeg er iøvrigt glad for det ikke bare er mig der er helt åndsvag..., men at der er noget om det.
Avatar billede erikjacobsen Ekspert
08. november 2003 - 19:01 #38
String a[] = new String[3];
      a[0] = "cp";
      a[1] = "/home/ej/public_html/a";
      a[2] = "/home/ej/public_html/b b b";

try {
        Runtime.getRuntime().exec(a);
      }
      catch(Exception e) {
        out.println("FEJL...."+e);
      }
Avatar billede arne_v Ekspert
08. november 2003 - 19:01 #39
Der kom Erik før mig !
Avatar billede erikjacobsen Ekspert
08. november 2003 - 19:02 #40
Den virker. Alle dine parametre skal blot ind i dit array, på hver sin
position. Også "-geometry"
Avatar billede arne_v Ekspert
08. november 2003 - 19:02 #41
[arne@arne2 arne]$ cat QCP.java
public class QCP {
  public static void main(String[] args) throws Exception {
      String cmd = "cp QCP.java \"z z/QCP.java\"";
      System.out.println(cmd);
      Runtime.getRuntime().exec(cmd);
  }
}
[arne@arne2 arne]$ cat QCP2.java
public class QCP2 {
  public static void main(String[] args) throws Exception {
      String[] cmd = { "cp", "QCP2.java", "z z/QCP2.java" };
      System.out.println(cmd);
      Runtime.getRuntime().exec(cmd);
  }
}
Avatar billede erikjacobsen Ekspert
08. november 2003 - 19:06 #42
Så kan du jo underholde kæresten i pauserne med problem og løsning på dette problem.
Så får I i hvert fald en hyggelig aften ;)
Avatar billede eerikk Nybegynder
08. november 2003 - 19:06 #43
wuåw... Hvad skal hvor hvordan med hvafforen-hvodden? *sunder sig*
Avatar billede erikjacobsen Ekspert
08. november 2003 - 19:09 #44
String[] executableStatement =
      {"convert","-geometry",maxSize + "x" + maxSize,inputFile,outputFile);

og så laver du ikke strof magi på dine filer
Avatar billede erikjacobsen Ekspert
08. november 2003 - 19:09 #45
og en } og ikke en ) til sidst
Avatar billede eerikk Nybegynder
08. november 2003 - 19:09 #46
*prøver at forstå svarene*
Avatar billede eerikk Nybegynder
08. november 2003 - 19:11 #47
Hvad skal ind i et array og hvorfor? kan exec-metoden modtage et array og hvorledes/hvorfor?
Avatar billede erikjacobsen Ekspert
08. november 2003 - 19:11 #48
Og forklaringen er at der ikke bliver kørt en shell der skal fortolke
kommandolinien. Det skal enten være simpelt (opdeling med mellemrum mellem
argumenterne) eller et array af argumenter. Det er faktisk det shellen gør,
finder program og argumenter, propper dem ind i et array, og kalder på
samme måde som du gør nu.
Avatar billede erikjacobsen Ekspert
08. november 2003 - 19:11 #49
Ja, exec metoden kan tage et array
Avatar billede eerikk Nybegynder
08. november 2003 - 19:13 #50
Gid jeg kunne afprøve det lige nu! --> gentagelse af tidligere besked:

"ARG! Nu kan jeg ikke engang komme ind og compile den bean det handler om via Telnet fordi win2000 Prof hele tiden lukker forbindelsen hvis vinduet står ubrugt i bare 5 minutter, uden at jeg kan exitte korrekt, så nu kan jeg ikke komme på fordi der er for mange samtidige forbindelser! Det er ikke rigtig min dag... :o)"
Avatar billede arne_v Ekspert
08. november 2003 - 19:14 #51
Der er 6 exec metoder i runtime med forskellige kombinationer
af enkelt kommando versus array, environment eller ej og default
directory eller ej.
Avatar billede erikjacobsen Ekspert
08. november 2003 - 19:15 #52
Men du skal til koncert.... Og så står du tidligt op søndag og bliver glad
når det virker. Tro os.

Brug hellere putty - et gratis telnet/ssh program, der er rigtigt godt.
Du kan sætte det til at holde forbindelsen lææænge.
Avatar billede eerikk Nybegynder
08. november 2003 - 19:17 #53
EJ> Ja - jeg glæder mig... "Putty" - er det freeware?
Avatar billede arne_v Ekspert
08. november 2003 - 19:19 #54
Avatar billede erikjacobsen Ekspert
08. november 2003 - 19:19 #55
http://www.putty.nl/download.html

Mere end freeware: Du får penge for at bruge det ... nemlig den tid du
sparer fordi det er et godt produkt. Og tid er penge. ;)
Avatar billede eerikk Nybegynder
08. november 2003 - 19:25 #56
erikjacobsen > *lol*
Avatar billede eerikk Nybegynder
08. november 2003 - 19:26 #57
Hey - har i ikke tænkt jer at smide nogle svar?
Avatar billede erikjacobsen Ekspert
08. november 2003 - 19:26 #58
"eerikk" - minder mig om min barndom, når de råbte: "Eerikk - det må du ikke!"
Avatar billede erikjacobsen Ekspert
08. november 2003 - 19:26 #59
Se nu om det virker.
Avatar billede eerikk Nybegynder
08. november 2003 - 19:35 #60
OK - To af de dygtigste "Eksperter" (ja jeg har set jer på ekspertens top-score) arbejder på problemet og er enige om løsningen - det kan ikke gå galt... Men ok - jeg prøver det imorgen når min telnet er færdig med at spasse ud...

ej> *g*
Avatar billede eerikk Nybegynder
08. november 2003 - 19:41 #61
*tager til koncert*
Avatar billede erikjacobsen Ekspert
08. november 2003 - 20:15 #62
Avatar billede eerikk Nybegynder
09. november 2003 - 00:13 #63
*tilbage* Det var en alle tiders koncert - nu skal jeg prøve det i koden - har installeret putty :o)
Avatar billede eerikk Nybegynder
09. november 2003 - 00:30 #64
... Det virkede! Tænkte jeg det ikke nok - Kæft hvor er det godt!

Kan vi så få nogen svar på? :o]
Avatar billede eerikk Nybegynder
09. november 2003 - 00:51 #65
arne v>> I tilfælde af at du ellers ikke ser det har jeg et lille ekstra-problem mht. replaceAll problematikken du hjalp mig så godt med:

http://www.eksperten.dk/spm/424683
Avatar billede eerikk Nybegynder
09. november 2003 - 01:36 #66
*går i seng og falder i søvn*

..eller...

*falder i seng og går i søvne*
Avatar billede erikjacobsen Ekspert
09. november 2003 - 09:51 #67
Husk med putty at sætte

  Connection | Seconds between keepalive

til fx. 60
Avatar billede eerikk Nybegynder
09. november 2003 - 11:08 #68
erikjacobsen> det gjorde jeg  så snart jeg så det option :o)

arne v>> hvor er dit svar? :o]
Avatar billede arne_v Ekspert
09. november 2003 - 11:50 #69
Jeg kan da godt svare, men strengt taget var Erik jo først med løsningen.
Avatar billede eerikk Nybegynder
09. november 2003 - 11:58 #70
arne v>> Jeg har bare sat pointene på så ej får samtlige point og du får 30. Det synes jeg virker rigtigt, men jeg modtager meget gerne råd om god etikette på eksperten.dk :o]
Avatar billede erikjacobsen Ekspert
09. november 2003 - 12:15 #71
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester