webForumDet fria alternativet

Fel meddelande vid kompliering av Servlet!

2 svar · 401 visningar · startad av Fredde Mannen

Fredde MannenMedlem sedan nov. 20014 054 inlägg
#1

Ehmm... okei jag är inte värsta hajen men i alla fall, detta felmeddelande får jag .. vad kan vara felet?

500 Servlet Exception
C:\inetpub\wwwroot\WEB-INF\classes\AddinfoServlet.java:38: cannot resolve
symbol
symbol  : variable out 
location: class AddinfoServlet
			out.println("SQLException: " + sql.getMessage());
                        ^
C:\inetpub\wwwroot\WEB-INF\classes\AddinfoServlet.java:39: cannot resolve
symbol
symbol  : variable out 
location: class AddinfoServlet
			out.close();
                        ^
2 errors

Hela koden, säkert en massa fel:

import java.net.*;
import java.util.*;
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class AddinfoServlet extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response) 
 		throws IOException, ServletException
		{
		try{
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			Connection C = DriverManager.getConnection("jdbc:mysql://localhost:3306/laborationer?user=xxx&password=xxx");
			Statement S = C.createStatement();
			S.executeUpdate("INSERT INTO labb1(sNamn, iTfn) VALUES('"+request.getParameter("sNamn")+"','"+request.getParameter("iTfn")+"')");
			response.sendRedirect("/labb_jsp/index.jsp");
			C.close();
		}
		catch (ClassNotFoundException cnfe)
		{
			response.setContentType("text/html");
			PrintWriter out = response.getWriter();
			out.println("<html>");
			out.println("<body>");
			out.println("<head>");
			out.println("<title>Unable to load driver.</title>");
			out.println("</head>");
			out.println("<body>");
			out.println("Unable to load driver.");
			out.println("</body>");
			out.println("</html>");
		}
		catch(SQLException sql)
		{
			out.println("SQLException: " + sql.getMessage());
			out.close();
		}
	}
}
LimeMedlem sedan sep. 2001961 inlägg
#2

Fredde Mannen skrev:

	[blue]catch (ClassNotFoundException cnfe)[/blue]
{ // Här börjar scope 1
			response.setContentType("text/html");
			[B]PrintWriter out [/B] = response.getWriter();
			out.println("<html>");
			out.println("<body>");
			out.println("<head>");
			out.println("<title>Unable to load driver.</title>");
			out.println("</head>");
			out.println("<body>");
			out.println("Unable to load driver.");
			out.println("</body>");
			out.println("</html>");
		} // Och här slutar scope 1
		[red]catch(SQLException sql)[/red]		{ // Här börjar scope 2
			[I]out.[/I]println("SQLException: " + sql.getMessage());
			out.close();
		} // och här slutar scope 2
	}
}

Felet ligger i den catch-sats som jag markerat med rött. I den som jag markerat mer blått så instansierar du out. Denna blir då lokal variabel i det scope som täcks av catchsatsern, alltså mellan de två måsvingarna.

Den catch-sats som jag markerat med rött är ett NYTT scope och du måste därför instansiera om out alternativt instansiera upp variabeln i ett scope som båda catch-satserna kan nå, t.ex. innan try (men då kommer du att få en annan effekt).

Sedan är det också så att om du får ett ClassNotFoundException så kommer du aldrig att stänga out... vilket är vääääldigt fel...

Fredde MannenMedlem sedan nov. 20014 054 inlägg
#3

Då får man helt enkelt lägga till out.close(); där då. :)

Nåja nu är allt löst och det verkar funka .. wiiihoooo :birp

Tack tack!

127 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)