サーブレットからのログインクレデンシャルを解決するために、次のコードを処理しています。
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.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.JOptionPane;
@WebServlet("/login")
public class oneServlet extends HttpServlet {
public static Connection getConnection() throws Exception {
String driver = "org.postgresql.Driver";
String url = "jdbc:postgresql://10.1.11.112:5432/pack";
String username = "pack";
String password = "pack";
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String user=request.getParameter("t1");
String pass=request.getParameter("t2");
System.out.println("done 1");
Connection conn = null;
PreparedStatement pstmt = null;
System.out.println("done 2");
try {
conn = getConnection();
String queryTest = "select username,password from login ";
pstmt = conn.prepareStatement(queryTest);
System.out.println("done 3");
ResultSet rs = pstmt.executeQuery();
System.out.println("done4");
while (rs.next()) {
System.out.println("done5");
String username=rs.getString(1);
String password=rs.getString(2);
if(user.equals(username) && pass.equals(password))
{
response.sendRedirect("LoginSuccess.jsp");
return;
}
else
{
JOptionPane.showMessageDialog(null, "retry");
}
}
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
私が直面している問題は、「while(rs.next())」が反復され、テーブルで使用可能なすべてのユーザー名の出力を表示していることですが、リダイレクトまたは再試行のいずれかで、一度だけ表示する必要があります。任意の提案をいただければ幸いです。