JavaWeb关于实现简单的登陆验证(servlet+mysql+js)

基于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页面:
在这里插入图片描述
大家配置的时候一定要细心,仔细检查和阅读代码!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值