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