страница входа в jsp с использованием mysql и xml

почему он показывает эту ошибку.

введите отчет об исключении

message An exception occurred processing JSP page /GGCheckLogin.jsp at line 19

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /GGCheckLogin.jsp at line 19

16: 
17: try {
18:     String query = "select * from credentials where login=? and password=?";
19:     PreparedStatement ps = (PreparedStatement) con.prepareStatement(query);
20:     ps.setString(1, login);
21:     ps.setString(2, pw);
22:    ResultSet rs = ps.executeQuery();


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
root cause

javax.servlet.ServletException: java.lang.NullPointerException
    org.apache.jsp.GGCheckLogin_jsp._jspService(GGCheckLogin_jsp.java:95)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
root cause

java.lang.NullPointerException
    org.apache.jsp.GGCheckLogin_jsp._jspService(GGCheckLogin_jsp.java:80)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)

это моя xml-страница

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app
package assignment_2;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyServletContextListner implements ServletContextListener{
    public void contextInitialized(ServletContextEvent event){
        String driverName="com.mysql.jdbc.Driver";
        String conURL ="jdbc:mysql://localhost:3306/";
        ServletContext context = event.getServletContext();
        String dbname = context.getInitParameter("dbname");
        String user = context.getInitParameter("user");
        String pass = context.getInitParameter("pw");
        Connection conn= null;
        try{
        Class.forName(driverName);
        conn = DriverManager.getConnection(conURL+dbname, user,pass);
        System.out.println("Connection successfull");
        }
        catch(ClassNotFoundException ex){
            System.out.println("this error class not found "+ex);

        }
        catch(SQLException sqle){
            System.out.println("this error sql "+sqle);
        }
        context.setAttribute("conn", conn);
        }
        public void contextDestroyed(ServletContextEvent event){

        }

}
0.xsd" id="WebApp_id" version="3.0"> <context-param> <param-name>dbname</param-name> <param-value>ggame</param-value> </context-param> <context-param> <param-name>user</param-name> <param-value>root</param-value> </context-param> <context-param> <param-name>pw</param-name> <param-value>******</param-value> </context-param> </web-app>

это метод в ресурсах Java для инициализации контекста

package assignment_2;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyServletContextListner implements ServletContextListener{
    public void contextInitialized(ServletContextEvent event){
        String driverName="com.mysql.jdbc.Driver";
        String conURL ="jdbc:mysql://localhost:3306/";
        ServletContext context = event.getServletContext();
        String dbname = context.getInitParameter("dbname");
        String user = context.getInitParameter("user");
        String pass = context.getInitParameter("pw");
        Connection conn= null;
        try{
        Class.forName(driverName);
        conn = DriverManager.getConnection(conURL+dbname, user,pass);
        System.out.println("Connection successfull");
        }
        catch(ClassNotFoundException ex){
            System.out.println("this error class not found "+ex);

        }
        catch(SQLException sqle){
            System.out.println("this error sql "+sqle);
        }
        context.setAttribute("conn", conn);
        }
        public void contextDestroyed(ServletContextEvent event){

        }

}

это моя страница jsp, где я проверяю имя пользователя и пароль

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" import="java.sql.*" %>
<!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">
<title>check-login</title>
</head>
<body>
<%

String login = request.getParameter("Username");
String pw = request.getParameter("password");

Connection con = (Connection)pageContext.getServletContext().getAttribute("conn");

try {
    String query = "select * from credentials where login=? and password=?";
    PreparedStatement ps = (PreparedStatement) con.prepareStatement(query);
    ps.setString(1, login);
    ps.setString(2, pw);
   ResultSet rs = ps.executeQuery();

    if(rs.next()){

        response.sendRedirect("success.jsp");
    }
    else{
        response.sendRedirect("http://www.google.ca");
    }
    }
catch (Exception e) {
    e.printStackTrace();
    throw new ServletException(e);
}
   finally{

    }
      %>

</body>
</html>

я не уверен, что когда мы запускаем проект, выполняется ли метод myServletContextListner. он показывает исключение нулевого указателя; возможно, он не получает атрибут соединения из servletcontext. Спасибо за помощь


person jaskaranjit singh    schedule 10.12.2014    source источник


Ответы (1)


PreparedStatement ps = con.prepareStatement("select * from credentials where login=? and password=?");
ps.setString(1, login);
ps.setString(2, pw);
ResultSet rs = ps.executeQuery();

Вам не нужен бросок для PreparedStatement, просто импортируйте java.sql.PreparedStatement

И попробуй это

public void contextInitialized(ServletContextEvent event){
....
event.getServletContext().setAttribute("conn",conn);
....
}

и в jsp:

<% ServletContext sc = request.getServletContext();
 sc.getAttribute("conn"); %>

Подробнее читайте здесь

person Renny    schedule 10.12.2014
comment
но мы не можем преобразовать строку в prepareStatement 'PreparedStatement ps = выберите * из учетных данных, где логин =? и пароль=?;' - person jaskaranjit singh; 11.12.2014
comment
Я забыл одну вещь, извините. PreparedStatement ps = con.prepareStatement("select * from credentials where login=? and password=?"); - person Renny; 11.12.2014
comment
я пробовал это, но не работает с той же ошибкой ....... в этой строке выдается исключение nullpointerException ...... - person jaskaranjit singh; 11.12.2014
comment
Отредактировано. Попробуйте использовать этот код, он должен работать! Кстати, вы должны выполнить запрос в Class.method, а не в jsp - person Renny; 11.12.2014
comment
нет, это не работает .... я думаю, что есть проблема в методе contextInitialized, он может не устанавливать атрибут соединения, когда мы получаем атрибут, он возвращает null - person jaskaranjit singh; 11.12.2014