[b]500 Servlet Exception[/b]
Note: sun.tools.javac.Main has been deprecated.
/jsp/test/test2.jsp:20: Incompatible type for method. Can't convert void
to java.lang.Object.
out.print((out.println("Hello World")));
^
println() returnerar inget objekt. Om du skriver ett '=' så försöker den att anropa objektets .toString()-metod. Eftersom println() är void, så finns inget att anropa. Därför går det inte.
:x
Det är fel. Sorry, får skylla på att det var mitt första inlägg :)
= används när du ska skriva ut en variabel (typ <%=x%>), man kan tänka sig att "=" betyder "out.println" om man vill :)
man kan tänka sig att "=" betyder "out.println" om man vill
Man behöver inte ens tänka sig det, för det är just så det är ;).
När en JSP-sida körs av Jsp-runnern första gången eller efter att sidan modifierats, så "vänds den ut och in" och görs om till en servlet som sedan kompileras och körs.
JSP-uttryck på formen <%= foo %> kommer då att expanderas till just out.print(foo).
Det är därför du får följande felmeddelande Web-Tor:
out.print((out.println("Hello World")));
Felmeddelandet härrör till servleten som bakats ihop utifrån din JSP-sida, som du ser så har taggarna <%= %> ersatts med en out.print-sats som försöker skriva ut en out.print-sats :).
Ibland (oftast) är JSP-felsökning en pain in the ass just pga att man jobbar i JSP-sidan men måste felsöka i den genererade servletkoden.
Jag kör bara Tomcat men där får man också reda på vilken rad i JSP sidan som felet finns
An error occurred at line: 5 in the jsp file: /test.jsp
Generated servlet error:
D:\Java\jakarta-tomcat-4.0.4\work\Standalone\localhost\vgbb\test$jsp.java:58: ')' expected.
out.print(out.println("Hello World"););
Om det inte är så i de andra servlet containers så är det dåligt. Har faktiskt aldrig behövt felsöka i servleten. :)
Nej, det spelar ingen roll.
När du "kör" din JSP sida så konverteras den först till en servlet och efter det så kompileras den och körs. Du borde kunna hitta denna servlet i någon katalog på din server ("work" eller "temp" eller något liknande), där kan du se hur dina olika kommandon ser ut i "verkligheten".
Ditt exempel genererar samma kod i servleten.
Lägger till en j*vla massa kod här också,
denna JSP sida
Ja, du kan skriva en servlet direkt och köra den i webbläsaren. Problemet med det (det var bla därför JSP kom) är att all HTML måste skrivas ut med "out.println("");" osv och det blir almänt väldigt rörig kod. Servlets ska, tycker jag, bara användas för att behandla indata från användaren.
För att köra en servlet i webbläsaren skapar du en i din "WEB-INF/classes" katalog (tex MyServletTest.java).
Skriver in rätt config i din web.xml som ligger i "WEB-INF" katalogen
typ
Nej :)
Du måste skapa en ny servlet från grunden. De servlets som din webserver skapar kan bara den läsa (och du lokalt på disken).
Du har ju en "WEB-INF" katalog i rooten på den struktur där du har dina JSP filer. I den katalogen har du också en web.xml, där kan du konfigurera hela denna context.
1. "Vi" ska skapa en servlet i ROOT contexten (dvs den katalog där filerna som laddas om du skriver "http://localhost/" ligger)
2. Skapa filen "MyServletTest.java" i katalogen "ROOT_CONTEXT\WEB-INF\classes\" (byt du "ROOT_CONTEXT" mot det som katalogen heter på din dator)
3. Skriv följande kod i "MyServletTest.java"
import java.io.IOException;
import javax.servlet.*
import javax.servlet.http.*
public class MyServletTest extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
ServletOutputStream out = response.getOutputStream();
out.println("Hello World!");
}
}
4. Kompilera filen.
5. Öppna web.xml som ligger i "ROOT_CONTEXT\WEB-INF" katalogen.
6. Lägg till raden