2014-02-10 4 views
0

서블릿에서 정보를 얻으려고합니다. 여기 내 JSP 페이지의 코드입니다.서블릿을 통해 데이터베이스에서 정보 얻기

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1" 
    import="java.util.*, DB.DBServlet"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0"> 
<link href="css/bootstrap.min.css" rel="stylesheet"> 
<title>Lab4</title> 
</head> 
<body> 
<div id='chekboxOfCompanies'> 
<%Iterator itr;%> 
<% List data= (List)request.getAttribute("country"); 
       for (itr=data.iterator(); itr.hasNext();) { 
        out.println("<input type='checkbox'>"); 
      }%> 
</div> 
<div id=''></div> 
</body> 
</html> 

다음은 정보를 가져 오는 서블릿 코드입니다.

public class DBServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    public String page = "main.jsp"; 
    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public DBServlet() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     PrintWriter out = response.getWriter(); 
     String protocol = "jdbc:derby:"; 
     Connection conn = null; 
     ArrayList<Statement> statements = new ArrayList<Statement>(); 
     Statement s = null; 
     ResultSet rs = null; 
     String dbName = "Lab4DB"; 
     ArrayList<String> dataList = new ArrayList<String>(); 
     try { 
      conn = DriverManager.getConnection(protocol + dbName); 
      System.out.println("Connected to database " + dbName); 
      conn.setAutoCommit(false); 
      s = conn.createStatement(); 
      statements.add(s); 
      s.executeQuery("SELECT company from companies"); 
      rs = s.getResultSet(); 
      while(rs.next()){ 
       dataList.add(rs.getString("country")); 
      } 
      rs.close(); 
      s.close(); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     request.setAttribute("country", dataList); 
     RequestDispatcher dispatcher = request.getRequestDispatcher(page); 

     if (dispatcher != null) { 

      dispatcher.forward(request, response); 

     } 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
    } 

} 

이 코드를 실행하려고하면 Null 포인터 예외가 발생합니다. 콘솔의 출력.

SEVERE: Servlet.service() for servlet [jsp] in context with path [/Lab4DWP] threw exception [java.lang.NullPointerException] with root cause 
java.lang.NullPointerException 
    at org.apache.jsp.main_jsp._jspService(main_jsp.java:80) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    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.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:99) 
    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:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 
    at java.lang.Thread.run(Thread.java:695) 
10.02.2014 15:11:12 org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [jsp] in context with path [/Lab4DWP] threw exception [java.lang.NullPointerException] with root cause 
java.lang.NullPointerException 
    at org.apache.jsp.main_jsp._jspService(main_jsp.java:80) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    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.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:99) 
    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:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 
    at java.lang.Thread.run(Thread.java:695) 

어떤 변수가 null 값을 가져 옵니까? 어떻게 피할 수 있습니까?

답변

1

콘솔의 국가 목록을 먼저 인쇄하여 확인하십시오. 그리고 btw, iterator에 대한 itr.next() 호출이 누락되었습니다.이 호출은 요소와 체크 박스의 닫는 태그를 제공합니다. 그게 당신에게 null 포인터를주는 것이라고 생각합니다.

P : S : 데이터베이스에 연결하는 방식이 작동하지 않아야한다고 생각합니다. 의 getConnection (프로토콜 + "//"+ 호스트 주소 + "/"+ DBNAME가) 의견을 바탕으로 올바른 방법

해야한다 :

첫째, 데이터베이스에 연결하는 데 적절한 코드를보십시오 및 정보를 검색하십시오.
튜토리얼을 보려면 Vogella tutorial
두 번째로 열려있는 모든 태그를 닫고 시도해보십시오. 완전한 닫는 태그 "</input>"이 아니라면 "/>"를 사용하여 입력 태그조차도 닫힙니다.
셋째, tomcat에서 작업 디렉토리 아래 생성 된 jsp 코드를 찾을 수 있습니다 (구성에 따라 숨겨져있을 수 있음). 생성 된 jsp (main_jsp.java)에서 80 행으로 건너 뛰면 정확히 어떤 오류가 발생했는지 찾을 수 있습니다.

+0

콘솔에서 정보를 인쇄하려고 할 때 : java.sql.SQLException : jdbc : derby : Lab4DB에 적합한 드라이버가 없습니다. –

+0

또한 입력을 위해 닫는 태그가 필요하지 않습니다. –

+0

드라이버는 어디에 지정해야합니까? –

관련 문제