FOUT 404: de gevraagde bron is niet beschikbaar met behulp van HLLLDALLD-servlet

Ik schrijf een Java-servlet, en ik worstelen om een ​​eenvoudige HelloWorldte krijgen om goed te werken.

De HelloWorld.javaKlasse is:

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");
  }
}

Ik heb Tomcat V7.0 uitgevoerd en heb al vergelijkbare vragen gelezen, met antwoorden die verwijzen naar het wijzigen van de invokerservlet-mappingSECTIE IN web.xml. Dit gedeelte bestaat eigenlijk niet in de mijne, en toen ik het eraan toevoegde, is hetzelfde probleem nog steeds opgetreden.


Antwoord 1, Autoriteit 100%

Probeer dit (als de Java EE V6)

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

Bereik nu de servlet met http://127.0.0.1:8080/yourapp/hello

Waar 8080 standaard Tomcat-poort is, en yourappis de contextnaam van uw apparaat


Antwoord 2, Autoriteit 48%

Je moet je servlet zeker aan een URL koppelen. Als u Java EE 6 gebruikt (dat betekent ten minste Servlet API 3.0) dan kunt u uw servlet annoteren zoals

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

Dan kun je gewoon naar de localhost:8080/yourApp/hellogaan en de waarde zou moeten worden weergegeven. Als u de Servlet 3.0 API niet kunt gebruiken, moet u deze servlet registreren in een web.xml-bestand zoals

<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>

Antwoord 3, autoriteit 30%

Java-servlets schrijven is gemakkelijk als je Java EE 7 gebruikt

@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();
  }
}

Sinds servlet 3.0

Het goede nieuws is dat de implementatiedescriptor niet langer nodig is!

Lees de handleiding voor Java-servlets.


Antwoord 4, autoriteit 9%

dit kan te wijten zijn aan het feit dat u uw .jsp- of het .html-bestand in de WEB-INFhebt gemaakt in plaats van de map WebContent.

Oplossing: vervang gewoon de bestanden die zich in de WEB-INF-map bevinden in de map Webcontent en probeer hetzelfde uit te voeren – u krijgt de juiste uitvoer


Antwoord 5

Voor degenen die vastzitten met “De gevraagde bron is niet beschikbaar” in Java EE 7 en dynamische webmodule 3.x, misschien kan dit helpen: de wizard “Servlet maken” in Eclipse (getest op Mars) maakt de @Path-annotatie voor de servlet-klasse, maar ik moest deze toevoegen om met succes toegang te krijgen tot de openbare methoden die worden weergegeven.


Antwoord 6

Je moet ../../projectName/Filename.jsp gebruiken in je action attr. of href

../ = bevat huidige map simple(demo.project.filename.jsp)

Servlet kan alleen worden aangeroepen met 1 schuine streep vooruit naar uw projectnaam..


Antwoord 7

Mijn probleem zat in het bestand web.xml. In één <servlet-mapping>zat een fout in <url-pattern>: ik ben vergeten /toe te voegen voor de url.

Other episodes