基于Javaweb的简单登陆验证
连接MySQL数据库实现简单用户登陆验证
使用到的工具
eclipse+MySQL+apache服务器+第三方jar
上述软件的安装和配置自行去百度上搜索教程
准备工作
1.创建一个student的动态web工程
2.将第三方jar文件拷入到WebContent/WEB-INF/lib文件夹下
(这里出这个错误是日志文件的错误,不用管它)
3.创建数据库表
(1.)创建登陆用户数据表users并插入几条数据信息
CREATE TABLE users(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(30),
passwords VARCHAR(15)
);
//插入数据
INSERT INTO users VALUE(null,admin,10086);
INSERT INTO users VALUE(2,'李四','15320');
(2.)创建登陆成功后在界面上显示的学生信息student1
CREATE TABLE student1(
id INT PRIMARY KEY AUTO_INCREMENT,
dname VARCHAR(20),
age INT,
gender VARCHAR(2),
address VARCHAR()
);
插入数据
INSERT INTO student1 VALUE (1,'lisi',18,'男','china');
INSERT INTO student1 VALUE (2,'zhangsan',18,'男','beijin');
INSERT INTO student1 VALUE (3,'bob',19,'男','shanghai');
INSERT INTO student1 VALUE (4,'lili',19,'女','shanghai');
INSERT INTO student1 VALUE (6,'老王',19,'男','昆明');
在WebContent文件夹下创建login.jsp和stu_list.jsp
1.lojin.jsp源代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2><font color="blue">欢迎使用学生管理系统</font></h2>
<form action="loginServlet" method="post">
账号: <input type="text" name="username" /><br>
密码: <input type="password" name="passwords" /><br>
<input type="submit" value="登录">
</form>
</body>
</html>
2.stu_list.jsp(注意:这个jsp页面需要使用到jstl,需要导入配置)
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>学生信息管理系统</title>
</head>
<body>
<br>学生列表<br>
<table border="1" width="700">
<tr align="center">
<td>编号</td>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
<td>住址</td>
<td>操作</td>
</tr>
<c:forEach items="${list }" var="stu">
<c:if test=""></c:if>
<tr align="center">
<td>${stu.id }</td>
<td>${stu.dname }</td>
<td>${stu.age }</td>
<td>${stu.gender }</td>
<td>${stu.address }</td>
<td><a href="#">更新</a> <a href="#">删除</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
在Java Resources/src创建如下几个包和类
1.在Util包下创建数据库连接工具类JDBCUtil.java
package Util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBCUtil {
static String driverClass = null;
static String url = null;
static String name = null;
static String password= null;
static{
try {
/*
* //1. 创建一个属性配置对象
Properties properties = new Properties();
// InputStream is = new FileInputStream("jdbc.properties");
//使用类加载器,去读取src底下的资源文件。 后面在servlet
InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("\\jdbc.properties");
//导入输入流。
properties.load(is);
*/
//读取属性
driverClass = "com.mysql.jdbc.Driver";
url = "jdbc:mysql://localhost/test";
name = "root";
password ="532233";
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接对象
* @return
*/
public static Connection getConn(){
Connection conn = null;
try {
Class.forName(driverClass);
//静态代码块 ---> 类加载了,就执行。 java.sql.DriverManager.registerDriver(new Driver());
//DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//DriverManager.getConnection("jdbc:mysql://localhost/test?user=monty&password=greatsqldb");
//2. 建立连接 参数一: 协议 + 访问的数据库 , 参数二: 用户名 , 参数三: 密码。
conn = DriverManager.getConnection(url, name, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
/**
* 释放资源
* @param conn
* @param st
* @param rs
*/
public static void release(Connection conn , PreparedStatement st , ResultSet rs){
closeRs(rs);
closeSt(st);
closeConn(conn);
}
public static void release(Connection conn , PreparedStatement st){
closeSt(st);
closeConn(conn);
}
private static void closeRs(ResultSet rs){
try {
if(rs != null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
rs = null;
}
}
private static void closeSt(PreparedStatement st){
try {
if(st != null){
st.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
st = null;
}
}
private static void closeConn(Connection conn){
try {
if(conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
conn = null;
}
}
}
2.在Dao包下创建stuDao.java和userDAO.java接口
(1.)创建StuDao接口
package Dao;
import java.util.List;
import domain.Student;
public interface StuDao {
/**
* 查询出来所有的学生信息
* @return List集合
*/
List<Student> findAll();
}
(2.)创建userDAO接口
package Dao;
public interface userDAO {
/*
* 实现登陆
* @return:true:登陆成功 flase:登陆失败
*/
boolean login(String username,String passwords);
}
3.在impl包下创建StuDao.java和userDAO接口的实现类stu_impl.java和user_impl.java实现类
(1.)创建stu_impl.java类
package Impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import Dao.StuDao;
import Util.JDBCUtil;
import domain.Student;
public class stu_impl implements StuDao{
public List<Student> findAll() {
List<Student> list = new ArrayList<Student>();
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
//1. 得到连接对象
conn = JDBCUtil.getConn();
String sql = "select * from student1";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
//数据多了,用对象装, 对象也多了呢? 用集合装。
while(rs.next()){ //10 次 ,10个学生
Student stu = new Student();
stu.setId(rs.getInt("id"));
stu.setAge(rs.getInt("age"));
stu.setDname(rs.getString("dname"));
stu.setGender(rs.getString("gender"));
stu.setAddress(rs.getString("address"));
list.add(stu);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtil.release(conn, ps, rs);
}
return list;
}
}
(2.)创建user_impl.java类
package Impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import Dao.userDAO;
import Util.JDBCUtil;
public class user_impl implements userDAO {
public boolean login(String username,String passwords) {
// TODO Auto-generated method stub
Connection conn=null;
PreparedStatement pt=null;
ResultSet rs=null;
try {
conn=JDBCUtil.getConn();
String sql="select * from users where username=? and passwords=?";
pt=conn.prepareStatement(sql);
pt.setString(1, username);
pt.setString(2, passwords);
//3.开始执行
rs=pt.executeQuery();
//如果能查询到移到下一条记录
return rs.next();
}catch(SQLException e) {
e.printStackTrace();
}finally {
JDBCUtil.release(conn,pt,rs);
}
return false;
}
}
4.在domain包下创建Student.java类
package domain;
public class Student {
//到底有哪些成员。 想要在页面上显示多少。
private int id ;
private String dname;
private int age ;
private String gender;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDname() {
return dname;
}
public void setDname( String dname) {
this.dname = dname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
5.在student包下创建servlet loginServlet
创建servlet loginServlet.java(注意创建的时候就直接创建servlet,不要创建为class,不然你还需进行web.xml配置)
package student;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import Dao.StuDao;
import Dao.userDAO;
import Impl.stu_impl;
import Impl.user_impl;
import domain.Student;
/**
* Servlet implementation class loginServlet
*/
public class loginServlet extends HttpServlet {
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//提交的数据有可能有中文, 怎么处理。
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
//1. 获取客户端提交的信息
String userName = request.getParameter("username");
String passwords = request.getParameter("passwords");
//2. 去访问dao , 看看是否满足登录。
userDAO dao = new user_impl();
boolean isSuccess = dao.login(userName, passwords);
//3. 针对dao的返回结果,做出响应
if(isSuccess){
//response.getWriter().write("登录成功.");
//1. 查询出来所有的学生信息。
StuDao stuDao = new stu_impl();
List<Student> list = stuDao.findAll();
//2. 先把这个集合存到作用域中。
request.getSession().setAttribute("list", list);
//2. 重定向
response.sendRedirect("stu_list.jsp");
}else{
response.getWriter().write("用户名或者密码错误!");
response.getWriter().write("<a href=\"login.jsp\"><input type=\"submit\" value=\"返回\"/></a>");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
web.xml配置(如果你创建的是Servlet就不需要进行配置了)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>student</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>loginServlet</display-name>
<servlet-name>loginServlet</servlet-name>
<servlet-class>student.loginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/loginServlet</url-pattern>
</servlet-mapping>
</web-app>
效果验证
1.将动态web工程发布到apache服务器上
2.在浏览器上输入登陆界面网址:http://localhost:8080/student/login.jsp,将会跳出登陆界面
3.在表单中输入账户和密码,点击提交按钮时loginServlet将会获取到你输入的用户名和密码并匹配到数据,且用户名和密码都正确时将显示学生信息,错误时loginServlet将返回提示信息“用户名或密码错误。”
(1.)输入正确用户名和错误密码时:
(2.)输入正确的用户名和密码时则会跳转到stu_list.jsp页面:
大家配置的时候一定要细心,仔细检查和阅读代码!!!!!!