PDA

View Full Version : ci riprovo


biamont
07-05-2006, 11:40
non avendo trovato risposta alla mia domanda precedente, provo a orla in modo + semplice: sapreste dirmi cm sistemare nelle cartelle di tomcat il file .jsp e i .class ke esso utilizza?
sapreste dirmi anke xkè all'atto dell'avvio del .jsp tomcat mi dice di nn riuscire a riconoscere la classe riferita in esso come un tipo?deve essere fatto qlk import nella pagina jsp?in ke punto?
saluti

PGI-Bis
07-05-2006, 20:59
In tomcat devi piazzare un solo file, il war che contiene la tua applicazione web. Un war è uno zip con estensione "jar". Nel war puoi mettere i file jsp un po' dove ti pare perchè quelli li maneggi con il descrittore di dispiegamento dell'applicazione web (web.xml).

Il war, internamente, deve essere così composto:

/ <-- elementi pubblici dell'applicazione (html, jsp o altro)
/WEB-INF/web.xml <-- descrittore di dispiegamento
/WEB-INF/classes/ <-- ci puoi mettere le classi ma è non si fa
/WEB-INF/lib/ <-- qui ci metti i jar dei comp. servlet e dei bean
/WEB-INF/ <-- web-inf è anche la radice delle cose non pubbliche
/WEB-INF/jsppages/ <-- ad esempio puoi creare una cartella "privata"
in cui mettere le pagine jsp "private"

Faccio un esempio tristissimo.

Creo il bean:

package it.tukano.saylo;

public class HelloBean {
private String message;

public void setMessage(String value) {
message = value;
}

public String getMessage() {
return message;
}
}

Lo compilo (javac - d . *.java) e lo impacchetto (jar cf SayloBeans.jar it/). E il "war" al momento diventa:

/
/WEB-INF/lib/SayloBeans.jar

Creo la pagina jsp che usa quel bean:

<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head><title>Welcome</title>
<jsp:useBean id="helloBean" scope="page" class="it.tukano.saylo.HelloBean"/>
<jsp:setProperty name="helloBean" property="message" value="Ciao Mondo!"/>
<body>
<h1><jsp:getProperty name="helloBean" property="message"/></h1>
</body>
</html>

e la infilo in una "cartella privata" del war. Il war ora è:

/
/WEB-INF/lib/SayloBeans.jar
/WEB-INF/jsppages/Welcome.jsp

Creo una pagina di benvenuto che lèvati:

<html>
<head><title>Index</title></head>
<body>
<a href="./saylo">press me</a> <!-- chi è ./saylo ? -->
</body>
</html>

e questa la lascio "pubblica". Per meglio organizzare, dedico una cartella ai "pubblici". Il war diventa:

/
/WEB-INF/lib/SayloBeans.jar
/WEB-INF/jsppages/Welcome.jsp
/public/Index.html


A questo punto, col descrittore, faccio il magheggio, cioè metto insieme il tutto:

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>welcomer</servlet-name>
<jsp-file>/WEB-INF/jsppages/Welcome.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>welcomer</servlet-name>
<url-pattern>/saylo</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>public/Index.html</welcome-file>
</welcome-file-list>
</web-app>

Il "saylo" di Index.html è collegato (servlet-mapping) a "welcomer" e "welcomer" è (servlet-name) la pagina jsp che si trova nella cartella che si è scelto (non è obbligatorio) di infilare in una cartella ad hoc di WEB-INF.

Il "war" diventa:

/
/WEB-INF/web.xml
/WEB-INF/lib/SayloBeans.jar
/WEB-INF/jsppages/Welcome.jsp
/public/Index.html

"A mano" il war lo fai creando prima una cartella in cui metti tutto quello su indicato, poi ti posizioni in quella cartella con la console e dai un "jar cf Welcome.war WEB-INF/ public/". Dopodichè copi il file "Welcome.war" nella cartella "webapps" di Tomcat e dopo qualche secondo lui la mastica e dispiega l'applicazione. Se rimuovi il file Welcome.war dalla stessa cartella Tomcat richiama l'applicazione. Sostituendo il war, Tomcat sostituirà l'applicazione al volo.

E' possibile infilare in webapps i file "sciolti" ma è solo una pena in più.