【JSP页面】利用数据库中的表格中的数据实现验证用户名和密码
2017-05-02 15:54
731 查看
一.写一个登陆页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'login.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="denglu/yanzheng.jsp" method="post">//action里是你获取数据也就是判断页面的地址
<table>
<tr>
<td>用户名:</td>
<td> <input type="text" name="loginname"> </td>
//这个可以在写完判断页面后再添加,下同
<td><%=request.getAttribute("nameerror")==null?"":
request.getAttribute("nameerror") %></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="loginpass"></td>
<td><%=request.getAttribute("pwderror")==null?"":
request.getAttribute("pwderror") %></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>
非常简单的页面,大概2分钟就可以写完
二.
编写java文件,具体如下:
第一个loginface:这是一个接口
package com.ccec.denglu;
import com.ccec.jdbc.user;
public interface loginface {
int login(user user);
//接口
}
第二个,这是一个实现接口界面:
package com.ccec.denglu;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.ccec.jdbc.connectionUtil;
import com.ccec.jdbc.user;
public class loginsqlvx implements loginface{//实现接口
Connection conn=null;
PreparedStatement prsm=null;
public int login(user user) {
conn=connectionUtil.conn();
ResultSet rs=null;
int flag=0;//这是重点,使用这个变量来做判断
String sql="select username,usernum from user_01 where username=?";//sql语句用来查询出用户名对应的密码
try {
prsm=conn.prepareStatement(sql);
prsm.setString(1, user.getUsername());//得到用户输入的用户名
rs=prsm.executeQuery();//用用户名查询
while(rs.next()){//得到查询结果
String unum=rs.getString("usernum");
if(unum.equals(user.getUsernum())){//判断密码是否相同
//都相同
flag=2;
}else{
//密码不同
flag=1;
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
connectionUtil.close(rs, prsm, conn);
}
return flag;//如果返回值为0则在数据库表中查询不到用户名,也就是用户名错误
}
}
另外,其中的connectionutil是我以前创建的通用的数据库调用的,这样就可以省很多时间不用每次都重新写,具体如下:
package com.ccec.jdbc;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class connectionUtil {
public static Connection conn(){
Connection conn=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
try {
conn= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:inspur","scott","tiger");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void close(ResultSet rs,Statement st,Connection conn){
try {
if(rs!=null){
rs.close();}
if(st!=null){st.close();}
if(conn!=null){conn.close();}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
public static void close(Statement st,Connection conn){
try {
if(st!=null){st.close();}
if(conn!=null){conn.close();}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
}
再向下就是写JSP判断页面了:
我只摘取了其中的java代码部分
<%
String loginname=request.getParameter("loginname");//获取用户名
String loginpass=request.getParameter("loginpass");
user user=new user();//调用user类
user.setUsername(loginname);//使用user类中的set方法将用户输入的用户名和密码传入
user.setUsernum(loginpass);
loginface loginface=new loginsqlvx();
int flag=loginface.login(user);//user中有数据,将数据传入loginface类并获取其返回值
if(flag==2){//判断
session.setAttribute("loginname", loginname);//将loginname封装入session中,等待后面页面调用
response.sendRedirect(request.getContextPath()+"/index.jsp");//跳转页面,没啥好说
}else{ if(flag==1){
request.setAttribute("pwderror", "密码错误");
}else if(flag==0){
request.setAttribute("nameerror", "用户名错误");
}
request.getRequestDispatcher("login.jsp").forward(request, response);
}
%>
就这么多了,其实总体来说就是利用request和user将数据导入好能查询完成,如果查询完成就进行判断另一项是否相同,如果不能查询则直接就是用户名不匹配,直接可以判断用户名不正确,数据库中的user_01是我随便建的,大体就是creat table user_01(username varchar2(5),usernum number),主键外键哪个是哪个我也忘记了,但是应该不影响使用。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'login.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="denglu/yanzheng.jsp" method="post">//action里是你获取数据也就是判断页面的地址
<table>
<tr>
<td>用户名:</td>
<td> <input type="text" name="loginname"> </td>
//这个可以在写完判断页面后再添加,下同
<td><%=request.getAttribute("nameerror")==null?"":
request.getAttribute("nameerror") %></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="loginpass"></td>
<td><%=request.getAttribute("pwderror")==null?"":
request.getAttribute("pwderror") %></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>
非常简单的页面,大概2分钟就可以写完
二.
编写java文件,具体如下:
第一个loginface:这是一个接口
package com.ccec.denglu;
import com.ccec.jdbc.user;
public interface loginface {
int login(user user);
//接口
}
第二个,这是一个实现接口界面:
package com.ccec.denglu;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.ccec.jdbc.connectionUtil;
import com.ccec.jdbc.user;
public class loginsqlvx implements loginface{//实现接口
Connection conn=null;
PreparedStatement prsm=null;
public int login(user user) {
conn=connectionUtil.conn();
ResultSet rs=null;
int flag=0;//这是重点,使用这个变量来做判断
String sql="select username,usernum from user_01 where username=?";//sql语句用来查询出用户名对应的密码
try {
prsm=conn.prepareStatement(sql);
prsm.setString(1, user.getUsername());//得到用户输入的用户名
rs=prsm.executeQuery();//用用户名查询
while(rs.next()){//得到查询结果
String unum=rs.getString("usernum");
if(unum.equals(user.getUsernum())){//判断密码是否相同
//都相同
flag=2;
}else{
//密码不同
flag=1;
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
connectionUtil.close(rs, prsm, conn);
}
return flag;//如果返回值为0则在数据库表中查询不到用户名,也就是用户名错误
}
}
另外,其中的connectionutil是我以前创建的通用的数据库调用的,这样就可以省很多时间不用每次都重新写,具体如下:
package com.ccec.jdbc;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class connectionUtil {
public static Connection conn(){
Connection conn=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
try {
conn= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:inspur","scott","tiger");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void close(ResultSet rs,Statement st,Connection conn){
try {
if(rs!=null){
rs.close();}
if(st!=null){st.close();}
if(conn!=null){conn.close();}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
public static void close(Statement st,Connection conn){
try {
if(st!=null){st.close();}
if(conn!=null){conn.close();}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
}
再向下就是写JSP判断页面了:
我只摘取了其中的java代码部分
<%
String loginname=request.getParameter("loginname");//获取用户名
String loginpass=request.getParameter("loginpass");
user user=new user();//调用user类
user.setUsername(loginname);//使用user类中的set方法将用户输入的用户名和密码传入
user.setUsernum(loginpass);
loginface loginface=new loginsqlvx();
int flag=loginface.login(user);//user中有数据,将数据传入loginface类并获取其返回值
if(flag==2){//判断
session.setAttribute("loginname", loginname);//将loginname封装入session中,等待后面页面调用
response.sendRedirect(request.getContextPath()+"/index.jsp");//跳转页面,没啥好说
}else{ if(flag==1){
request.setAttribute("pwderror", "密码错误");
}else if(flag==0){
request.setAttribute("nameerror", "用户名错误");
}
request.getRequestDispatcher("login.jsp").forward(request, response);
}
%>
就这么多了,其实总体来说就是利用request和user将数据导入好能查询完成,如果查询完成就进行判断另一项是否相同,如果不能查询则直接就是用户名不匹配,直接可以判断用户名不正确,数据库中的user_01是我随便建的,大体就是creat table user_01(username varchar2(5),usernum number),主键外键哪个是哪个我也忘记了,但是应该不影响使用。
相关文章推荐
- jsp注册页面,Ajax实现验证用户名是否存在,密码是否一致,当不存在时,注册按钮变成灰色。
- 使用JSP Servlet和Ajax实现简单的注册页面的用户名密码验证
- 请问如何在Web页面中点击一个button之后,用jsp从数据库中读取数据显示到表格里
- 利用JSP+JS+CSS+Servlet实现用户登录,保存用户名密码功能
- 在jsp界面实现对表单用户名、密码不能为空的验证代码
- 将数据库中的用户名和密码显示到JSP页面
- [JSP] 利用JavaScript来用户名和密码进行客户端的验证
- 实现jsp页面二级下拉框联动,实时读取数据库数据
- 制作login.jsp页面,要求实现提供用户登陆的界面, 用户通过该界面输入用户名(控件名userName)和密码(控件名password), 然后点击“登录”按钮实现登陆操作.
- 利用hashtable模拟实现权限验证(同map思想-->只能有一个用户名,可重复密码)以及增删查改操作
- 在一个jsp页面实现二级下拉框联动,实时读取数据库数据
- 实现jsp页面二级下拉框联动,实时读取数据库数据
- QuickCSharp框架开发(18)------加密用户名和密码数据与数据库读出的密码进行哈希比较(验证用户是否成功登录)
- 使用servlet,jdbc将mysql中数据显示在jsp页面中,且实现直接删除数据库数据
- 利用ajax和JSP技术实现网页中表单的局部刷新(只刷新表单数据,而不刷新整个页面)
- 在jsp页面实现保存登录用户名和密码
- (超级详细版)利用ThinkPHP3.2.3+PHPExcel实现将表格数据导入到数据库
- 从数据库取出数据在jsp页面上以表格形式呈现,并对表格数据进行分页打印操作。
- 从数据库读取数据。在页面用表格显示,并实现隔行换色
- 【JSP中servlet】单纯利用servlet写一个用户名密码判断页面