Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java登录JSP页面(使用Access数据库)_Java_Jsp - Fatal编程技术网

Java登录JSP页面(使用Access数据库)

Java登录JSP页面(使用Access数据库),java,jsp,Java,Jsp,我有一个Java登录应用程序,它可以工作,并使用microsoft access数据库验证登录详细信息。我目前正在构建一个JavaWeb应用程序,我正试图实现我的工作示例中的代码 我的问题是,我在这里有两个用户名和密码的输入字段(称为“name”和“password”),但我的SQL代码在前面的示例中无法检测到此页面上名为name和password的字段,用户将分别在其中输入其详细信息 任何帮助都将不胜感激 <%@page import="javax.swing.JOptionPane"%

我有一个Java登录应用程序,它可以工作,并使用microsoft access数据库验证登录详细信息。我目前正在构建一个JavaWeb应用程序,我正试图实现我的工作示例中的代码

我的问题是,我在这里有两个用户名和密码的输入字段(称为“name”和“password”),但我的SQL代码在前面的示例中无法检测到此页面上名为name和password的字段,用户将分别在其中输入其详细信息

任何帮助都将不胜感激

<%@page import="javax.swing.JOptionPane"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.DriverManager"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Angels & Demons</title>
        <a href="index.jsp">Home Page</a>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
        <h1><center>Login</center></h1>

<center><form action="login.jsp"> 
<h2>Please make sure to fill all fields! </h2> 
<table> 
<tr><td>User:<input name="name" type="text" size="10"></td></tr> 
<tr><td>Password:<input name="password" size="10"></td></tr> 

<td><input type="submit" value="Submit"></input></td>
</table>   
        </center>




     <%
             if ((request.getParameter("name") != null )
                  && (request.getParameter("password") != null ) 
                )

             {

                Connection conn = null;
                Statement st = null;
                ResultSet rs;


            try{



        String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
        Class.forName(driver);

        String db = "jdbc:odbc:AngelsAndDemons";
        conn = DriverManager.getConnection(db);
        st = conn.createStatement();
        String sql = "select user,pass from AngelsAndDemons where user = '"+name+"'and pass = '"+password+"'";
        rs = st.executeQuery(sql);

               int count = 0;
               while(rs.next())
               {
                   count = count + 1;
               }

           if(count == 1)
           {
               JOptionPane.showMessageDialog(null,"User found, Access Granted!");

           }
           else if(count > 1){
                JOptionPane.showMessageDialog(null,"Duplicte User, Access Denied");
           }
           else{
                JOptionPane.showMessageDialog(null,"User not found");
           }

        }
        catch(Exception ex)
        {
    }  
                    }

            %>


               There was Problem in Login. 
               <%

                 %> 

              }
           </form>     
    </body>
</html>

天使与魔鬼
登录
请确保填写所有字段!
用户:
密码:
1){
showMessageDialog(null,“重复用户,访问被拒绝”);
}
否则{
showMessageDialog(null,“未找到用户”);
}
}
捕获(例外情况除外)
{
}  
}
%>
登录时出现问题。
}

您的代码中有两个问题

1) 您希望java代码在button click上执行。因此,您应该检查button click,然后在其中编写代码,如下所示:

<input type="submit" value="Submit" name="bt"></input></td> //Define a name for button

<%
      if(request.getParameter("bt")!=null)
      {
           if ((request.getParameter("name") != null )
              && (request.getParameter("password") != null ))
           {
                //your code
            }
      }
 %>

不要连接
String
s。使用
PreparedStatement
s来避免SQL注入


同时避免在
字符串
变量上存储密码。尽可能使用
char[]
,并在使用后将其擦除,以避免在内存中留下明文密码。

祝贺您尝试web服务器开发

首先是更正的版本

<%@page contentType="text/html" pageEncoding="UTF-8"
    import="java.sql.*"
    import="javax.sql.*"%>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Angels & Demons</title>
        <a href="index.jsp">Home Page</a>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
        <h1><center>Login</center></h1>

     <%
         String name = request.getParameter("name");
         String password = request.getParameter("password");
         if (name == null || password == null) {
    %>

        <center>
        <form action="login.jsp" method="POST"> 
        <h2>Please make sure to fill all fields! </h2> 
        <table> 
        <tr><td>User:<input name="name" type="text" size="10"></td></tr> 
        <tr><td>Password:<input name="password" size="10"></td></tr> 
        <td><input type="submit" value="Submit"></input></td>
        </table>   
        </center>
        </form>     

     <%
         } else {

            String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
            Class.forName(driver);

            String db = "jdbc:odbc:AngelsAndDemons";
            try (Connection conn = DriverManager.getConnection(db)) {
                String sql = "select count(*) from AngelsAndDemons where user = ? and pass = ?";
                try (PreparedStatement st = conn.prepareStatement(sql)) {
                    st.setString(1, user);
                    st.setString(2, password);
                    try (ResultSet rs = st.executeQuery()) {
                        int count = 0;
                        if (rs.next()) {
                            count = rs.getInt(1);
                        }

                        if(count == 1) {
                            %><h2>User found, Access Granted!</2><&
                        } else if(count > 1) {
                            %><h2>Duplicate User, Access Denied</2><&
                        } else {
                            %><h2>Duplicate User, Access Denied</2><&
                        }
                    }
                }
            } catch (Exception ex) {
                            %><h2>There was Problem in Login.</2>
                              <p><%= ex.getMessage() %></p>
                            <&
            }
        }
    %>
    </body>
</html>

天使与魔鬼
登录
请确保填写所有字段!
用户:
密码:
已找到用户,已授予访问权限!1) {
%>重复用户,拒绝访问重复用户,拒绝访问登录时出现问题。

对于导入,我有点懒,使用了
*
——这是一种糟糕的风格

页面通过浏览器请求(HTTP GET)返回给浏览器,即客户端。 请求中没有参数,因此表单被输出

浏览器提交表单后,此处为HTTP POST请求, 有一些参数

现在可以进行数据库查询了

请尝试使用资源,确保所有内容都已关闭(连接、准备好的语句和结果集)。即使在返回/中断/异常时也是如此

PreparedStatement负责转义(比如一个名字中有撇号)。最重要的是防止黑客攻击(=创建邪恶的SQL)。比如名字
admin
和密码
xxx'或1=1

Access在我的时代不是多用户数据库。您可以使用DerbyH2数据库

JOptionPane
在交付的HTML页面中不起作用,甚至在服务器上创建页面时也不起作用。替代方法是在结果页面上写入

你选了一个很难的主题,有很多特点。祝你好运


由于JSP很快变得难看、不可读,请尝试使用servlet,可能是组合使用的纯servlet,用于在JSP页面中编码和交付结果。

当您提交表单时,如您所述,您的操作为
login.JSP
,因此它将在login中转到该JSP。在JSP中,您应该将
。还提供方法属性。代码above是login.jsp您需要完成这个导入
javax.swing.JOptionPane
没有假装生活在猴子世界中的senseStop。使用servlet(或处理程序,如果您使用spring)显然是更好的做法用于java代码,并严格使用JSP进行显示和输入。将其拆分为一个servlet进行登录,一个JSP发送输入,另一个JSP(可能是同一个JSP)显示结果。我从来没有检查过按钮是否被实际单击过,包括多个按钮……重要的是:方法(POST、GET、PUT)参数是否正确?我想知道JOptionPane的显示会显示在哪里…我想不是在浏览器上!@SergeBallesta在表单操作位于同一页面的情况下,总是最好检查按钮单击。。另外,
JOptionPane
从何而来。。我更喜欢测试该方法。如果我想t将该应用程序称为RESTful web服务。SpringMVC
@RequestMapping
带注释的控制器会自动为我测试该方法……但这是意见,我们应该避免发表意见,所以:-)SergeBallesta您所说的事情与这个问题无关。。
<%@page contentType="text/html" pageEncoding="UTF-8"
    import="java.sql.*"
    import="javax.sql.*"%>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Angels & Demons</title>
        <a href="index.jsp">Home Page</a>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
        <h1><center>Login</center></h1>

     <%
         String name = request.getParameter("name");
         String password = request.getParameter("password");
         if (name == null || password == null) {
    %>

        <center>
        <form action="login.jsp" method="POST"> 
        <h2>Please make sure to fill all fields! </h2> 
        <table> 
        <tr><td>User:<input name="name" type="text" size="10"></td></tr> 
        <tr><td>Password:<input name="password" size="10"></td></tr> 
        <td><input type="submit" value="Submit"></input></td>
        </table>   
        </center>
        </form>     

     <%
         } else {

            String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
            Class.forName(driver);

            String db = "jdbc:odbc:AngelsAndDemons";
            try (Connection conn = DriverManager.getConnection(db)) {
                String sql = "select count(*) from AngelsAndDemons where user = ? and pass = ?";
                try (PreparedStatement st = conn.prepareStatement(sql)) {
                    st.setString(1, user);
                    st.setString(2, password);
                    try (ResultSet rs = st.executeQuery()) {
                        int count = 0;
                        if (rs.next()) {
                            count = rs.getInt(1);
                        }

                        if(count == 1) {
                            %><h2>User found, Access Granted!</2><&
                        } else if(count > 1) {
                            %><h2>Duplicate User, Access Denied</2><&
                        } else {
                            %><h2>Duplicate User, Access Denied</2><&
                        }
                    }
                }
            } catch (Exception ex) {
                            %><h2>There was Problem in Login.</2>
                              <p><%= ex.getMessage() %></p>
                            <&
            }
        }
    %>
    </body>
</html>