2013-10-06 5 views
27

Sono completamente nuovo nello scrivere un servlet Java e sto facendo fatica a ottenere un semplice esempio HelloWorld per funzionare correttamente.Servlet Tomcat: Errore 404 - La risorsa richiesta non è disponibile

La classe HelloWorld.java è:

package crunch; 

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

public class HelloWorld extends HttpServlet { 
    public void doGet(HttpServletRequest request, 
        HttpServletResponse response) 
     throws ServletException, IOException { 
    PrintWriter out = response.getWriter(); 
    out.println("Hello World"); 
    } 
} 

Sono in esecuzione Tomcat v7.0, e già letto domande simili, con le risposte che si riferiscono a cambiare la sezione invokerservlet-mapping in web.xml, questa sezione in realtà doesn' esiste nel mio, e quando l'ho aggiunto lo stesso problema si verificava ancora.

+1

Questo deve essere un problema di configurazione. Fornisci il tuo web.xml e l'URL a cui stai tentando di accedere. – Bart

+0

puoi per favore mostrare il tuo 'web.xml' e dove stai chiamando? –

+0

quale versione di Java EE si sta utilizzando ?! –

risposta

21

provare questo (se il Java EE V6)

package crunch; 
import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
@WebServlet(name="hello",urlPatterns={"/hello"}) 
public class HelloWorld extends HttpServlet { 
    public void doGet(HttpServletRequest request, 
        HttpServletResponse response) 
     throws ServletException, IOException { 
    PrintWriter out = response.getWriter(); 
    out.println("Hello World"); 
    } 
} 

ora raggiungere la servlet da http://127.0.0.1:8080/yourapp/hello

dove 8080 è la porta Tomcat di default, e yourapp è il nome del contesto del applciation

+0

Non riesco ad accedere al mio file html, per favore aiuto !! http: //stackoverflow.com/questions/24967510/the-requested-resource-xxx- html-is-not-available-when-redirect/24967768 # 24967768 – Jaskey

11

Hai sicuramente bisogno di mappare il tuo servlet su qualche URL. Se si utilizza Java EE 6 (che significa almeno Servlet API 3.0) allora si può annotare il servlet come

@WebServlet(name="helloServlet", urlPatterns={"/hello"}) 
public class HelloWorld extends HttpServlet { 
    //rest of the class 

Poi si può solo andare al localhost:8080/yourApp/hello e deve essere visualizzato il valore. Nel caso in cui non è possibile utilizzare Servlet 3.0 API di quanto è necessario registrare questo servlet in web.xml file, come

<servlet> 
    <servlet-name>helloServlet</servlet-name> 
    <servlet-class>crunch.HelloWorld</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>helloServlet</servlet-name> 
    <url-pattern>/hello</url-pattern> 
</servlet-mapping> 
5

servlet Java scrittura è facile se si utilizza Java EE 7

@WebServlet("/hello-world") 
public class HelloWorld extends HttpServlet { 
    @Override 
    public void doGet(HttpServletRequest request, 
        HttpServletResponse response) { 
    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 
    out.println("Hello World"); 
    out.flush(); 
    } 
} 

Dal servlet 3.0

La buona notizia è che il descrittore di implementazione non è più necessario!

Leggere il tutorial per Java Servlets.

+0

Ciao. Sto usando JRE7 e Eclipse non sta riconoscendo @WebServlet. Come posso risolvere questo? Sono con questo stesso problema! – Totalys

+0

@Totalys sei sicuro che il compilatore sia impostato su JDK7 e anche su JRE? (Voglio dire, nelle impostazioni di Eclipse) –

+0

Il collegamento all'esercitazione Servlet cambia in [http://docs.oracle.com/javaee/7/tutorial/servlets.htm#BNAFD](http://docs.oracle .com/javaee/7/tutorial/servlets.htm # BNAFD) – Campfire

0

Per quelli bloccati con "La risorsa richiesta non è disponibile" in Java EE 7 e modulo web dinamico 3.x, forse questo potrebbe aiutare: la procedura guidata "Crea servlet" in Eclipse (testata in Marte) non crea l'annotazione @Path per la classe servlet, ma ho dovuto includerla per accedere con successo ai metodi pubblici esposti.

0

Devi utente ../../projectName/Filename.jsp nella tua azione attr. o href

../ = contiene cartella corrente semplice (demo.project.filename.jsp)

Servlet può essere chiamato solo con 1 barra al nome del progetto ..

1

questo è può essere a causa della cosa che hai creato il tuo .jsp o il file .html nel WEB-INF invece della cartella WebContent.

Soluzione: Basta sostituire i file che si trovano nella cartella WEB-INF nella cartella Webcontent e provare a eseguire lo stesso - Si otterrà l'uscita appropriata

-1

Il mio problema era in web.xml file. In uno <servlet-mapping> si è verificato un errore all'interno di <url-pattern>: Ho dimenticato di aggiungere / prima dell'URL.