Originariamente inviato da anx721
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:
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>
Il web.xml ha mappato la servelt com.test.servlets.MyServlet con l'url pattern /mia e quindi è invocabile come:
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).