netbeans를 사용하여 Java 웹에 로그인 페이지를 만들고 있습니다. 하지만 프로그램을 실행할 때 약간의 문제가 발생했습니다. Welcome와 ErrorPage, 1 Index.html이라는 2 개의 JSP 파일이 있습니다. 소스 패키지에는 ControllerLogin.java 및 Login.java 클래스가 있습니다.Java 웹 로그인 페이지 오류
프로그램을 실행하면 로그인 페이지가 표시됩니다. 로그인 버튼을 클릭하면 주소 표시 줄 URL이 http://localhost:8080/WebLogin/에서 http://localhost:8080/WebLogin/ControllerLogin으로 빈 화면으로 바뀝니다.
설치 MySQL 데이터베이스가 있고 MYSQL JDBC 드라이버 라이브러리가 추가되었습니다.
이 내 컨트롤러 클래스 :
import ejd.JdbcHelper;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author moiez
*/
@WebServlet(urlPatterns = {"/ControllerLogin"})
public class ControllerLogin extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//get request parms
String user = request.getParameter("user");
String pass = request.getParameter("pass");
try
{
if(user != null)
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/TableName",
"root",
"abc");
String sql = "SELECT username, password FROM login WHERE username=? and Password=?";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, user); // or "id"
ps.setString(2, pass); // or 2
ResultSet resultSet = ps.executeQuery(sql);
if(resultSet.next())
{
RequestDispatcher rd = request.getRequestDispatcher("Welcome.jsp");
rd.forward(request, response);
}
else
{
RequestDispatcher rd = request.getRequestDispatcher("ErrorPage.jsp");
rd.forward(request, response);
}
}
}
catch(SQLException e)
{
System.err.println("FROM getUser(): " + e.getSQLState() + ": " + e.getMessage());
}
catch(Exception e)
{
System.err.println(e.getMessage());
}
}
}
이 index.html 파일입니다 : 이것은 아파치 톰캣 또는 TomEE에 받고있어 출력
<html>
<head>
<title>Login Page</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h1>Login</h1>
<form name="f1" action="ControllerLogin" method="post">
User ID: <input type="text" name="user">
<br><br>
Password: <input type="password" name="pass">
<br><br>
<input type="submit" value="Login">
</form>
</body>
</html>
, 나는 내 SQL 구문을 두 번 확인했지만 왜 구문 오류가 발생하는지 알지 못합니다.
12-Dec-2017 10:46:14.205 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
12-Dec-2017 10:46:14.211 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 4602 ms
FROM getUser(): S1009: Parameter index out of range (1 > number of parameters, which is 0).
12-Dec-2017 11:24:20.725 INFO [http-nio-8080-exec-5] org.apache.catalina.core.StandardContext.reload Reloading Context with name [/WebLogin] has started
12-Dec-2017 11:24:20.742 WARNING [http-nio-8080-exec-5] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [WebLogin] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
12-Dec-2017 11:24:21.664 INFO [http-nio-8080-exec-5] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
12-Dec-2017 11:24:21.678 INFO [http-nio-8080-exec-5] org.apache.catalina.core.StandardContext.reload Reloading Context with name [/WebLogin] is completed
FROM getUser(): 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? and Password=?' at line 1