2013-02-23 55 views
-2

我創建了一個msacess db mydb.accdb並指出odbc源代碼,並且在lserv.java文件中有以下代碼所有tomcat的必要配置都已完成,小服務程序沒有響應,所以我在init方法,其出現了以下錯誤基本的Java登錄Servlet不工作

javax.servlet.ServletException: Servlet.init() for servlet login threw exception 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879) 
    org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:600) 
    org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1703) 
    java.lang.Thread.run(Thread.java:722) 
root cause 

java.lang.NullPointerException 
    lserv.init(lserv.java:23) 
    javax.servlet.GenericServlet.init(GenericServlet.java:212) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879) 
    org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:600) 
    org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1703) 
    java.lang.Thread.run(Thread.java:722) 

Java代碼

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

public class lserv extends HttpServlet 
{ 
Connection con; 
ResultSet rs; 
Statement st; 
PrintWriter out; 
public void init() 
{ 
try 
{ 
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
con=DriverManager.getConnection("jdbc:odbc:mydb"); 
st=con.createStatement(); 

} 
catch(Exception e) 
{ 
out.println(e.getMessage()); 
} 
} 

public void doGet(HttpServletRequest req,HttpServletResponse res) 
{ 

try 
{ 
out=res.getWriter(); 
res.setContentType("text/html"); 
if(req.getParameter("sub").equals("value")) 
{ 
String s1=req.getParameter("t1"); 
String s2=req.getParameter("t2"); 
rs=st.executeQuery("SELECT * FROM login WHERE uname='"+s1.trim()+"AND pass='"+s2.trim()+"';"); 
if(rs.next()) 
{ 
out.println("welcome"); 
} 
else 
{ 
out.println("sorry"); 
} 

} 
} 
catch(Exception e){ 
out.println(e.getMessage()); 
} 
} 
} 

HTML頁面代碼

加入打印錯誤
<html> 
<title>Login System</title> 
<style type="text/css"> 
div.ex { 
width:220px; 
padding:10px; 
border:5px solid gray; 
margin:10px; 
} 
</style> 

<body> 
<div class="ex"> 
<strong>User Login</strong> 
<form name=f1 method=get action="http://localhost:8080/login"> 
User &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<input type=text name=t1><br> 
Password <input type=password name=t2><br> 
<input type=submit name=sub value="Login"> 
</div> 

</body> 
</html> 

我有一個名爲登錄與字段uname和傳遞值的表。

有什麼問題請幫忙

+0

我推薦做的一件事就是創建一個單獨的類,並將所有數據庫處理都放在該類中。您可以將您的servlet中的所有值傳遞給該數據庫類。另外,您需要查看JSTL(google it)usebean將值傳遞給POJO類。 – 2013-02-23 19:10:13

回答

0

我想這應該很清楚了嗎?;

java.lang.NullPointerException 
    lserv.init(lserv.java:23) 
    [...] 

只需修復代碼行23中的NPE即可。 :)

對於我來說,它看起來像這條線會導致錯誤:

out.println(e.getMessage()); 

變量out未初始化的,因此null

+0

如果我刪除out.println(e.getMessage());根本沒有輸出 – techno 2013-02-24 04:30:15

+0

您不應該刪除它。你應該修復NullPointerException。改爲使用System.out.println(e.getMessage)。 – chkal 2013-02-24 08:19:25

+0

NPE在catch塊中被拋出的事實告訴你,創建數據庫連接時存在異常。你應該調試它。 – chkal 2013-02-24 08:20:23