[JSP/JSTL] Xephyrus tag library path probleem

Pagina: 1
Acties:

  • marcrenzo
  • Registratie: September 2001
  • Laatst online: 23-09-2025
Ik zit met het volgende probleem...

Ik heb thuis een webserver opgezet waarop ik jsp in combinatie met jstl kan gebruiken, hiervoor heb ik apache en tomcat geinstalleerd op een windows machine. Alles werkt prima.

Nu gebruik ik JSTL tag libraries van Xephyrus. Deze maakt het o.a. mogelijk dat ik bestanden kan uploaden en images kan tweaken. Als ik nu een upload paginaatje maak en die in de root van de webserver zet, werkt ie zo als hij hoort te werken.

Nu is het probleem dat wanneer ik hetzelfde script in een submap zet van de root, hij het bestand nog steeds naar de root toe plaatst. Je zou met die taglibrary een relatief pad aan kunnen geven, met een tilde, dus zoals bijvoorbeeld ~/plaatje.jpg , maar dit werkt dus niet.

Nou is mijn vraag, zal dit gewoon aan die tag library liggen (op hun website gebruiken ze wel gewoon submap voorbeelden, dus hij ondersteunt het wel) of heb ik misschien iets verkeerd geconfigureerd bij apache of tomcat.

Hieronder staat de code van mijn upload script, dit zal vast niet alle informatie zijn die jullie van mij willen zien, maar dan hoor ik wel wat er nog meer nodig is.
Java Server Page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="fup" uri="/../WEB-INF/tld/xephyrus-fileupload.tld" %>

<fup:parse nonUpload="ignore" />

<c:if test="${!empty pageScope.param.upload}">
  <fup:file var="one">
    Content-Type:
    <fup:contentType item="one" /><br />

    Size:
    <fup:size /><br /><br />
    <fup:remotePath var="pad" keepPath="false" />
    <fup:write to="~/${pad}" /><br />

    [img]"<c:out[/img]" alt="Uploaded Image" />
              
    <fup:delete item="one"/>
  </fup:file>
</c:if>


Hij vangt hier gewoon parameters op die de file bevatten uit een verstuurd formulier. Het bestand komt dus nu in de root van de webserver te staan ipv waar dit bestandje staat (waar hij dus zou moeten komen volgens de documentatie va Xephyrus).

Het probleem doet zich trouwens met alle tag libraries van xephyrus voor waar ik iets met een pad moet doen.

[ Voor 26% gewijzigd door marcrenzo op 26-04-2004 13:21 ]


  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Ik gebruik die library ook, en ik heb het zelfde probleem.
Ik moet het hele path vanaf de root meegeven, anders werkt het niet.
Op de site staat idd dat hij met ~ de relative path doet, maar dat doet ie dus niet. Hij begint altijd vanaf de root. Ik hoop dat iemand kan helpen

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • marcrenzo
  • Registratie: September 2001
  • Laatst online: 23-09-2025
Updeetje:

Ik denk niet echt dat het probleem bij die xephyrus tag library ligt, dus de topic titel schrikt mensen misschien af om te kijken naar het probleem.

Ik ben achter het volgende gekomen.

Ik had in mijn server.xml file van tomcat de volgende regel staan die de requests van apache opvangt in combinatie met de mod_jk2 connector.
code:
1
2
<Context path="" docBase="C:/WEBSERVER/Apache2/htdocs" debug="0" 
reloadable="true" crossContext="true"/>

In de root staat ook de WEB-INF directorie met daarin de JSTL en Xephyras tag library files. In sub directories lade hij de jsp's gewoon goed tot dat ik met file requests wilde doen zoals ik in mijn eerste post heb beschreven.

Als ik nu bij server.xml de volgende regel voor een subdir toevoeg...
code:
1
2
<Context path="/desubdir" docBase="C:/WEBSERVER/Apache2/htdocs/desubdir" 
debug="0" reloadable="true" crossContext="true"/>

...en ik zet ook in die subdir dezelfde WEB-INF als in de root. Dan doet hij het wel gewoon en load hij het bestandje in dezelfde dir als waar de jsp staat die ik heb aangeroepen, in dit geval desubdir. Maar is er niet een manier voor dat ik niet in elke submap waar ik jsp wil gebruiken een WEB-INF hoef aan te maken en zo'n zelfde regel hoef toe te voegen aan webserver.xml?

Ik hoop dat iemand me kan helpen, dit is een erg frustrerend probleem.

[edit]
Aanvulling: Hij wil het bestand wat ik upload dus plaatsen in de map waar hij WEB-INF vind. Staat er in de root een WEB-INF en in de subdir een WEB-INF en de jsp staat in de subsubdir, dan zet hij het bestand in de subdir, dus de eerste WEB-INF die hij tegen komt in de map hyrarchie.

[ Voor 21% gewijzigd door marcrenzo op 28-04-2004 00:32 ]


  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

even een stukje uit een boek dat ik aan het lezen ben (is een plaatje want pdf)

Afbeeldingslocatie: http://members.home.nl/j.j.groot/plaatje/textuitboek.gif

HTH

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


  • marcrenzo
  • Registratie: September 2001
  • Laatst online: 23-09-2025
Bedankt hiervoor, ben ff op zoek gegaan toen ik dit las, maar het getRealPath commando geeft het volledige pad tot de root weer en niet de subdir waar de jsp eigenlijk in staat. Ik heb de source van Xephyrus opgezocht en daar gebruiken ze inderdaad ook getRealPath om de url te parsen. Nu heb ik de volgende jsp gemaakt die werkt.

Filename: getrelative.jsp
Java Server Page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@page import="java.util.*"%>
<%

StringTokenizer strtok = new StringTokenizer(request.getServletPath(),"/");
int x = strtok.countTokens();
String relativePathWF = "";
for(int i=0; i<x-1; i++){
  if(i == 0) { relativePathWF = "/" + strtok.nextToken(); }
  else { relativePathWF += "/" + strtok.nextToken(); }
}
relativePathWF += "/";

pageContext.setAttribute("relativepathwf", relativePathWF, PageContext.PAGE_SCOPE);

%>


Deze code neemt hier het relatieve pad vanaf de root tot en met de jsp file met de commando getServletPath. Hij haalt de bestandsnaam eraf zodat ik alleen het relatieve pad over hou. Vervolgens zet hij deze variabele in de pageScope die vervolgens weer met JSTL uitgelezen kan worden zoals in de volgende jsp...

Filename: test.jsp
Java Server Page:
1
2
3
4
5
6
7
8
9
10
11
12
13
<%@taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@include file="\getrelative.jsp"%>

<html>
  <head>
    <title>JSTL testspace</title>
  </head>

    Relatieve pad zonder bestandsnaam = <c:out
 value="${pageScope.relativepathwf}" default="Not found"/><br />

  </body>
</html>


Je moet je voorstellen dat deze jsp in de map http://webserver/subdir/subsubdir/ staat. De string die pageScope.relativepathwf nu teruggeeft is /subdir/subsubdir/ dus precies wat ik wil. Als ik nu in de Xephyrus tag library bestanden wil aanroepen/uploaden zet ik dus pageScope.relativepathwf voor elk pad.

Ik hoef dus nu alleen maar een WEB-INF in de root te hebben en geen extra Context paden aan te geven in server.xml van tomcat. Dit vind ik dus ook wel een ideale situatie.

Maar nu is het dus zo dat je wel elke keer die getrelative.jsp file moet aanroepen wanneer je hier gebruik van wil maken. Op zich niet erg, maar het lijkt mij netter als hij automatisch die variabelen al kan aanroepen. Is dit ook mogelijk op een of andere manier? Bijvoorbeeld om het in de web.xml file in WEB-INF te zetten? (hier heb ik verder geen verstand van).

[ Voor 7% gewijzigd door marcrenzo op 28-04-2004 22:20 ]