首页 文章

为什么不运行才能运行processRequest?

提问于
浏览
0

该程序应该工作的方式是servlet可以从后台获取一个javaDB . servlet从index.jsp获取一个关键字,并使用它来搜索数据库以获取与该关键字相关的信息 . 但是doGet方法甚至没有尝试在try / catch块中运行任何东西 . 我知道doGet方法正在运行,因为我已经尝试在那里加载测试代码并且它确实显示它,只是不会通过try / catch运行 .

DBConnector.java

package edu.uwf.cs.dsa;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 *
 * @author Bernd
 */

public class DBConnector extends HttpServlet {

    private Context env;

    @Override
    public void init(ServletConfig config)
            throws ServletException {
        super.init(config);
        try {
            env = (Context) new InitialContext().lookup("java:comp/env");
        } catch (NamingException e) {
            throw new ServletException(e.getMessage());
        }
    }

    private String getUrl() throws NamingException 
    {
            return (String)env.lookup("jdbc:derby://localhost:1527/JA112");
    }

    private Connection getConnection() 
            throws NamingException, ServletException, ClassNotFoundException, SQLException
    {
            Class.forName((String)env.lookup("org.apache.derby.jdbc.EmbeddedDriver"));
            return DriverManager.getConnection(getUrl());
    }

    private void getMovies(Connection conn, PrintWriter out) throws SQLException
    {
            Statement stmt = conn.createStatement();

            ResultSet rs = stmt.executeQuery("SELECT * from Student");
            while (rs.next()) {
                out.print(rs.getString(1)); out.println("
"); out.print(" " + rs.getString(2)); out.println("
"); out.print(" " + rs.getString(3)); out.println("
"); out.print(" " + rs.getString(4)); out.println("
"); out.println(" " + rs.getString(5)); out.println("
"); } } /** * Processes requests for both HTTP * <code>GET</code> and * <code>POST</code> methods. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, NamingException, ClassNotFoundException, SQLException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); Connection conn = getConnection(); // out.print("<html>\n <head>\n <body>\n<h1>test</h1>\n</body>\n</head>\n</html>"); try { /* TODO output your page here. You may use following sample code. */ out.println("<html>"); out.println("<head>"); out.println("<title>Servlet DBConnector</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Servlet DBConnector at " + request.getContextPath() + "</h1>"); out.println((String)env.lookup("driver")); out.println("
"); out.println(getUrl()); out.println("
"); out.println(conn); getMovies(conn,out); out.println("
"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } } // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> /** * Handles the HTTP * <code>GET</code> method. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { processRequest(request, response); } catch (Exception e) { Logger.getLogger(DBConnector.class.getName()).log(Level.SEVERE, null, e); } } /** * Handles the HTTP * <code>POST</code> method. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { processRequest(request, response); } catch (NamingException ex) { Logger.getLogger(DBConnector.class.getName()).log(Level.SEVERE, null, ex); } catch (ClassNotFoundException ex) { Logger.getLogger(DBConnector.class.getName()).log(Level.SEVERE, null, ex); } catch (SQLException ex) { Logger.getLogger(DBConnector.class.getName()).log(Level.SEVERE, null, ex); } } /** * Returns a short description of the servlet. * * @return a String containing servlet description */ @Override public String getServletInfo() { return "Short description"; }// </editor-fold> }

的index.jsp

<%-- 
    Document   : index
    Created on : Nov 21, 2012, 9:20:16 PM
    Author     : Bernd
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <form method="GET" action="/DBServlet/DBConnector">
            <h1>Movie Search</h1>
            Enter Keyword <input type="text" name="keyword" id="keyword">
            <input type="submit" value="submit" id="button">
        </form>
    </body>
</html>

1 回答

  • 0

    我最好的猜测是 env 变量在正常测试中被初始化为null,你需要在 processRequest() 方法上添加catch块,这样就会明白这是错误,因为现在你只有finally块,所以异常它是隐藏的,不清楚的 .

    添加块并查看异常后,您需要检查您定义 java:comp/env 的配置文件,可能是拼写错误或类似的东西可能导致真正的问题 .

相关问题