mam taki problem stworzyłem sobie prosty serwlet który będzie miał za zadanie łączyć się z bazą danych i odczytywać z tabeli o nazwie uzytkownik rekordy i wypisywać imię i nazwisko na ekran.
Bazę mam opartą o MySQL na serwerze Xampp.
Serwlet na tomcat w wersji 7.
kod klasy serwletu:
package pl.mojpakiet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mysql.jdbc.Driver;
public class KlasaPiatejAplikacji extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException{
res.setContentType("text/plain;charset=UTF-8");
try{
/*
* najpierw uzyskujemy dostęp do sterownika naszej bazy tworzymy
* nowy obiekt klasy Driver wchodzącej w skład pakiety
* com.mysql.jdbc.Driver
*/
Driver sterownik = new com.mysql.jdbc.Driver();
/*
* następnie taki sterownik trzeba zarejestrować
*/
DriverManager.registerDriver(sterownik);
/*
* nastepnie musimy nawiązać połączenie
*/
Connection conn = sterownik.connect("jdbc:mysql://localhost/szkolenie_javaee?user=jakasnazwausera&password=jakieshaslo", null); // pierwszy parametr to adres url naszego połączenia natomiast drugi parametr to opcjonaln włąściwości
/*
* Dysponując połaczeniem możemy utworzyć zapytanie
*/
Statement stmt = conn.createStatement();
/*
* Teraz możemy zapytanie wykonać
*/
// jeżeli wywołanie metody execute na obiekcie zapytania powiedzie się wówczas zwróci true i możemy teraz zająć się przetwarzaniem wyników
if(stmt.execute("select * from uzytkownik"))
{
ResultSet zbior = stmt.getResultSet(); // ResultSet - zbiór wyników
// następnie przeglądamy zbiór wyników
while(zbior.next()) // metoda next zwraca true aż do momentu wyczerpania się zbioru danych
{
// wyświetlamy dane użytkownikowi
res.getWriter().println(zbior.getString("imie") + " " + zbior.getString("nazwisko") + " \n " );
}
}
conn.close(); // po zakończeniu przetwarzania zamykamy połączenie
}catch(SQLException e)
{
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res){
}
}
błędy, problemy (po odpaleniu w przeglądarce):
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error that prevented it from fulfilling this request.
exception
java.lang.NullPointerException
pl.mojpakiet.KlasaPiatejAplikacji.doGet(KlasaPiatejAplikacji.java:44)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.50 logs.
Apache Tomcat/7.0.50
informacje o błędach :
INFO: Server startup in 3693 ms
lut 11, 2014 4:28:03 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Piąta aplikacja] in context with path [/PiataAplikacja] threw exception
java.lang.NullPointerException
at pl.mojpakiet.KlasaPiatejAplikacji.doGet(KlasaPiatejAplikacji.java:44)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Nie wiem gdzie ten NullPointerException może być.
Połączenia nie stworzyło. Portu pewnie brakuje?
Edit:
Attempts to make a database connection to the given URL. The driver should
return "null" if it realizes it is the wrong kind of driver to connect to the
given URL. This will be common, as when the JDBC driver manager is asked to
connect to a given URL it passes the URL to each loaded driver in turn.
The driver should throw an `SQLException` if it is the right driver to connect to the given URL but has trouble connecting to the database.