这个例子中没有用session,仅是简单的JDBC测试程序
使用session的版本更好:详见http://blog.csdn.net/ruantao1989/article/details/8045879
login_index.jsp 负责输入表格,然后提交到连接数据库检查的页面
login_check.jsp 负责连接JDBC, 检查login_index.jsp提交来的值,是否在数据库中
login_success.jsp 和 login_fail.html 负责输出成功登录或登录失败的信息
一:SQL脚本:
DROP TABLE userlogin; CREATE TABLE userlogin ( userid VARCHAR2(30), name VARCHAR2(30) NOT NULL, password VARCHAR2(32) NOT NULL, CONSTRAINT userlogin_userid_pk PRIMARY KEY(userid) ); INSERT INTO userlogin(userid,name,password) VALUES('admin','adminstrator','admin'); commit;
最后一句commit极其重要,我花了半个小时才查到没提交实务操作这个问题
其他代码全都正确,只有这儿没提交的话很查到
二: login_index.jsp:接收用户输入信息
<%@ page contentType="text/html" pageEncoding="GBK"%> <html> <head> <title> 登录欢迎页 </title> </head> <body> <form action="login_check.jsp" method="post"> <table border="1" width="50%"> <tr> <td colspan="2"> 用户登录 <td> <tr> <tr> <td>用户名</td> <td><input type="text" name="userid"></td> </tr> <tr> <td>密码</td> <td><input type="password" name="userpassword"></td> </tr> <tr> <td colspan="2"> <input type="submit" value="提交"> <input type="reset" value="重置"> <td> <tr> </table> </form> </body> </html>
三: login_check.jsp:连接数据库后,检查输入的登录信息是否正确
<%@ page contentType="text/html" pageEncoding="GBK"%> <%@ page import="java.sql.*"%> <html> <head> <title> JSP_JDBC_Demo </title> </head> <body> <%! private static final String DBDriver = "oracle.jdbc.driver.OracleDriver";//驱动 private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:ORCL";//URL命名规则:jdbc:oracle:thin:@IP地址:端口号:数据库实例名 private static final String DBUser = "scott"; private static final String DBPassWord = "890307"; %> <% Connection con = null; //数据库连接状态 Statement st = null; //数据库容器 ResultSet res = null; //查询结果 boolean flag = false ; //通过数据库匹配标识 String name_checked = null; //检查通过的用户名 %> <% try { //连接 Class.forName(DBDriver);//加载数据库驱动 con = DriverManager.getConnection(DBURL, DBUser, DBPassWord);//连接 %> <h2>Debug_已连接 <%=con%></h2> <% st = con.createStatement(); //实例化 String u = request.getParameter("userid"); //从上级页面获得的用户名 String p = request.getParameter("userpassword"); //从上级页面获得的密码 String sql = "SELECT name FROM userlogin WHERE userid IN ('"+ u + "')" + " AND password IN ('"+p+"')";//组装SQL语句 System.out.println(sql);//执行上述设置的sql查询语句 res = st.executeQuery(sql); if(true == res.next())//只有查询得到结果才能进入循环 { flag = true; name_checked = res.getString(1); //获得查询出的name %> <h3>Debug_数据库查询结果 <%=name_checked%> </h3> <% } } catch (Exception e) { System.out.println(e); }finally{ //关闭连接 try{ res.close();//依次关闭 st.close(); con.close(); }catch(Exception e) { } } %> <!-- 根据连接状态跳转 --> <% if(true == flag)//登录成功 { %> <jsp:forward page="login_success.jsp" > <jsp:param name="user_name" value="<%=name_checked%>" /> </jsp:forward> <% } else//登录失败 { %> <h2>Debug_<%=request.getParameter("userid")%></h2> <h2>Debug_<%=request.getParameter("userpassword")%></h2> <jsp:forward page="login_fail.html" /> //静态显示就足够了 <% } %> </body> </html>
四:login_success.jsp 和 login_fail.html 显示登陆成功或失败
<%@ page contentType="text/html" pageEncoding="GBK"%> <html> <head> <title> 登录成功 </title> </head> <body> <h2> 登录成功 </h2> <h2> 欢迎 <%=request.getParameter("user_name")%> 登录 </h2> </body> </html>
<html> <head> <title> 登录失败 </title> </head> <body> <h2> 登录失败 </h2> <h2> 点此处<a href="login_index.jsp">重新登录</a> </h2> </body> </html>