La mia risposta fa riferimento al caso di un'applicazione web la cui cartella principale si chiama miaApp, all'interno della quale si trova la cartella WEB-INF, e che dovrebbe corrispondere al tuo web module.
Tutte le risorse che si trovano dentro WEB-INF non sono accessibili ai client, ma sono accessibili al server. Quindi se poni un file html dentro WEB-INF nessun client potrà invocarlo; però ad esempio una servlet può eseguire il forward di una richiesta ad una risorsa, ad esempio una jsp, che si trova dentro WEB-INF, o includere una pagina che si trova lì dentro.
Se il nome della cartella della tua applicazione è miaApp, il percorso base della tua applicazione sarà:
http://host/miaApp
tale mapping probabilmente può essere modificato agendo su qualche configurazione.
Ora se te metti il tuo file.html direttamente nella cartella principale, quindi allo stesso livello di WEB-INF, tale file sarà invocabile come:
http://host/miaApp/file.html
Il file contiene un form e deve spedire i dati ad una servlet com.test.servlets.MyServlet; a tale servlet bisogna prima assegnare un url pattern nel file web.xml; ad esempio:
Il web.xml ha mappato la servelt com.test.servlets.MyServlet con l'url pattern /mia e quindi è invocabile come:codice:<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" 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"> <web-app> <servlet> <servlet-name>MiaServlet</servlet-name> <servlet-class>com.test.servlets.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MiaServlet</servlet-name> <url-pattern>/mia</url-pattern> </servlet-mapping> </web-app>
http://host/miaApp/mia
pertanto l'azione del tuo form deve essere:
<form action="./mia">
oppure
<form action="/miaApp/mia">
la prima forma funziona perchè l'url del file html col form è
http://host/miaApp/file.html
e quindi è come se la tua servlet si trova nella stessa cartella del form; la seconda forma funziona perchè tutte le url (url è femminile?) che iniziano con / sono risolte dai client come relative alla server root, quindi il client automaticamente ci aggiunge http://host all'inizio (bada che invece il server risolve gli inidirizzi che iniziano con / rispetto alla cartella principale della tua web application, non rispetto alla root del server).

Rispondi quotando