2013-02-23 5 views
-2

나는 msacess db mydb.accdb을 생성했고 거기에 ODBC 소스를 알려 주었고 lserv.java 파일에 다음 코드가 있습니다. 모든 필수 구성이 완료되었습니다. 나는 다음과 같은 오류기본 자바 로그인 서블릿이 작동하지 않음

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) 

자바 코드

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 페이지 코드

,617을 보여 주었다 init 메소드에 인쇄 오류를 추가하므로 서블릿은 응답이 없었다
<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> 

나는 login이라는 이름의 테이블에 uname을 입력하고 값을 전달합니다.

무엇이 문제인가요? 도와주세요

+0

내가 할 것을 권하고 싶은 한 가지는 별도의 클래스를 만들고 그 클래스에서 처리하는 모든 DB를 넣는 것입니다. 서블릿의 모든 값을 해당 DB 클래스에 전달할 수 있습니다. 또한 POJO 클래스에 값을 전달하려면 JSTL (google it) 유스bean을 살펴야한다. –

답변

0

매우 명확해야한다고 생각합니다.

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

코드 23 번에서 NPE를 수정하면됩니다. :)이 행이 오류의 원인이되는 것처럼 나를 위해

그것은 같습니다

out.println(e.getMessage()); 

변수 out

가 초기화되지 않고, 따라서 null을.

+0

내가 out.println을 제거하면 (e.getMessage()); 출력이 전혀 없습니다 – techno

+0

제거하지 마십시오. NullPointerException을 수정해야합니다. 대신 System.out.println (e.getMessage)을 사용하십시오. – chkal

+0

catch 블록에서 NPE가 발생한다는 사실은 DB 연결을 만들 때 예외가 있음을 알려줍니다. 그걸 디버깅해야합니다. – chkal

관련 문제