Ik schrijf een Java-servlet, en ik worstelen om een eenvoudige HelloWorld
te krijgen om goed te werken.
De HelloWorld.java
Klasse 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 invoker
servlet-mapping
SECTIE 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 yourapp
is 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/hello
gaan 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.