Avatar billede stringbuffer Nybegynder
14. marts 2003 - 23:58 Der er 23 kommentarer og
2 løsninger

Sti til filer

Er der nogen måde, man kan undgå at bruge absolut path hvis man skal åbne en fil? Jeg tænker på noget i stil med Server.MapPath("minfil.txt") som det hedder i ASP.
Avatar billede arne_v Ekspert
15. marts 2003 - 00:08 #1
Selvfølgelig.

Du kan godt referere relativt i forhold til hvor din JSP engine kører
efter helt normale operativ-systems regler.

Du kan også godt accesse ressourcer relativt til din web applikatiosn
root.
Avatar billede arne_v Ekspert
15. marts 2003 - 00:10 #2
Det sidste er med:

getServletContext().getResource() eller
getServletContext(9.getResourceAsStream()
Avatar billede stringbuffer Nybegynder
15. marts 2003 - 00:27 #3
Er der nogen måde at gøre det relativt til JSP siden? altså uden at vide hvor JSP siden kommer til at ligge i forhold til web-root osv...?

Kan du lave et eksempel?
Avatar billede arne_v Ekspert
15. marts 2003 - 00:30 #4
Nej.

Ja.
Avatar billede arne_v Ekspert
15. marts 2003 - 00:35 #5
Men du kan sikkert opnå det du vil ved at bruge request.getRequestURI()
som returnerer URL for JSP siden. Og så manipulere lidt med den.
Avatar billede arne_v Ekspert
15. marts 2003 - 00:48 #6
Mit første svar var vist iøvrigt forkert.

<%
URL fil = application.getResource("test.txt");
%>

er vist det der skal til for at få en URL til test.txt !
Avatar billede stringbuffer Nybegynder
15. marts 2003 - 00:59 #7
Heh, det er åbenbart en tricky opgave... jeg havde forestillet mig lidt at sådan noget evt. kunne laves i en servlets init(), men problemet er vel at der ikke er noget request-objekt endnu...
Avatar billede stringbuffer Nybegynder
15. marts 2003 - 01:02 #8
Det er ret irriterende at en så fundamental feature ikke er tilgængelig i noget java-noget...

Problemet er jo at man ikke kan lave en side, der er helt portabel hvis man skal bruge en sti i forhold til en mappe, i forhold til hvilken siden kan blive placeret forskelligt.
Avatar billede arne_v Ekspert
15. marts 2003 - 01:04 #9
I en servlet kan du kalde getServletContext().getResource(), men
request.getRequestURI() kan naturligvis først kaldes når requesten
er modtaget.

Det er relativt almindeligta t bruge getResource i servlets.
Avatar billede stringbuffer Nybegynder
15. marts 2003 - 01:05 #10
Heh, tror alligevel at der er:

String path = application.getRealPath(filename);
Avatar billede arne_v Ekspert
15. marts 2003 - 01:09 #11
Ja det lyder som en meget naturlig feature.

Jeg kan imidlertid ikke umiddelbart komme i tanke om en
måde at lave det på.

Men måske er der andre som kan.
Avatar billede arne_v Ekspert
15. marts 2003 - 01:11 #12
Ah ja - og så regne baglæns fra den.
Avatar billede arne_v Ekspert
15. marts 2003 - 01:13 #13
application er naturligvis JSP igen.
Avatar billede stringbuffer Nybegynder
15. marts 2003 - 01:14 #14
Nej, den virker (såvidt jeg kan se) PRÆCIS som Server.MapPath() i ASP, hvilket jeg efterlyste.
Avatar billede stringbuffer Nybegynder
15. marts 2003 - 01:14 #15
Nu mangler jeg bare en ekvivalent metode til servlet, nogen der kan hjælpe dér?
Avatar billede arne_v Ekspert
15. marts 2003 - 01:15 #16
Muligt - jeg kender intet til ASP og Server.MapPath() !
Avatar billede stringbuffer Nybegynder
15. marts 2003 - 01:19 #17
Den tager en filnavn, der indeholder relativ sti, og laver den om til absolut sti.

Det er smart når man f.eks. har en fil liggende i samme mappe eller f.eks. i ../include/ osv.
Avatar billede arne_v Ekspert
15. marts 2003 - 01:19 #18
getServletContext().getRealPath(filename) må gøre det samme.
Avatar billede stringbuffer Nybegynder
15. marts 2003 - 01:21 #19
arne, det er sjovt, for JSP minder en smule om ASP, især ASP.NET når man bruger C#.

Blandt andet er <% %> og <%= %> det samme.
Avatar billede stringbuffer Nybegynder
15. marts 2003 - 01:22 #20
Ok, håber det er OK at jeg tager en del af credit for svaret? :)
Avatar billede arne_v Ekspert
15. marts 2003 - 01:23 #21
Det er en evindelig forbedring af ideer.

1)  CGI
2)  NetScape: NSAPI
3)  Microsoft+Process: ISAPI
4)  Java: servlet
5)  MicroSoft: ASP
6)  Java: JSP
7)  MicroSoft: ASP.NET
8)  Java: JSF
Avatar billede arne_v Ekspert
15. marts 2003 - 01:24 #22
Helt OK.
Avatar billede stringbuffer Nybegynder
15. marts 2003 - 01:38 #23
Har forresten fundet ud af at når jeg kører en JSP side, kan jeg finde en .java fil med autogenereret servlet kode (i hvert fald med resin), så det er fedt hvis man skal lure hvordan noget, der gøres i JSP, kan laves i en servlet.


Din liste virker da ikke nødvendigvis som en række forbedrede idéer - snarere idéer, hvor der er lagt vægt på forskellige ting. F.eks. ville jeg stadig bruge et CGI-program frem for noget andet, hvis der skulle udføres en masse tunge beregninger, og antallet af requests i minuttet var moderat.
Avatar billede arne_v Ekspert
15. marts 2003 - 14:57 #24
De fleste JSP engines kommer med en compiler du selv kan kalde
og compiler .jsp -> .java selv uden at deploye.

Kig efter jspc !
Avatar billede arne_v Ekspert
15. marts 2003 - 15:00 #25
Der er da nogle undtagelser. Jeg bruger da også stadig servlets
en gang imellem.

Men til generelle dynamisk web-sider, så mener jeg at man klart kan se
en udvikling hvor niveau N bygger videre på erfaringer fra niveau 1..N-1.
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