【JavaWeb】从零实现用户登录

1.数据库预备

1.1 SQL

    创建数据库

create database db;

    创建表

create table userInfo(
	id int primary key ,
	name varchar(20),
	password varchar(20),
	age int,
	email varchar(20)
);

    导入测试数据

insert into userInfo values(1,'super','123',25,'[email protected]');
insert into userInfo values(2,'nova','111',26,'[email protected]');

在SQLog或Navicat执行以上SQL语句之后,即完成了数据库的基础数据的预备

2. JavaWeb编程

2.1 配置文件    

    考虑在后续开发中,数据库的路径、用户名、密码等内容是可能会改变的,后续的开发中,应该尽量的避免修改代码,所以创建DBConfig.properties配置文件,将后续可能发生改变的内容放在配置文件中,后续只要修改配置文件即可。DBConfig.properties文件是以键值对的形式存储的。

DBConfig.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db
user=root
password=(这里写你的数据库密码)

2.2 封装数据库工具类

      在编程中,应该习惯于使用面向对象的思想,增强代码的复用性、健壮性、可读性。所以,这里我将程序中对数据库的操作封装成一个工具类,并且内部的方法使用static修饰。

    用static修饰的好处在于, static修饰的方法被放在JVM的静态方法区,随着类的加载而加载,能够使用类名调用方法,并且static执行的效率高,速度快,所以,我们封装的工具类应尽量使用静态的,要注意的是,静态的方法中,只能调用静态的成员变量。

DBUtil.java

package com.nova.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ResourceBundle;
/**
 * 数据库工具类
 * @author supernova
 * 
 */
public class DBUtil {
	private static String url;
	private static String user;
	private static String pwd;
	//因为获取文件配置信息和加载驱动只需要执行一次,所以将这两个功能放入静态代码块中,随着类的加载而加载,能提高代码的效率
	static {
		//获取配置文件信息
		ResourceBundle bundle = ResourceBundle.getBundle("DBConfig");
		url = bundle.getString("url");
		user = bundle.getString("user");
		pwd = bundle.getString("password");
		//利用反射,加载驱动
		try {
			Class.forName(bundle.getString("driver"));
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	//获取连接通道
	public static Connection getConnection() throws SQLException{
		return DriverManager.getConnection(url,user,pwd);
	}
	//关闭所有资源
	public static void closeAll(Connection connection,PreparedStatement pStmt, ResultSet resultSet) throws SQLException{
		if(connection != null){
			connection.close();
		}
		if(pStmt != null){
			pStmt.close();
		}
		if(resultSet != null){
			resultSet.close();
		}
	}
}

    2.3 JavaBean编程思想

        在用户登录中,往往会需要在客户端显示当前登录用户的信息,比如当前用户名等,所以为了加强程序的可扩展性,在服务端的JDBC编程中执行数据库查询操作时,应将查询到的内容存到对象中,在后续需要使用用户信息时,只需将该对象返回给客户端即可,所以这就需要创建一个bean类,称为模型。bean类中成员变量的个数,类型应尽量与数据库表中的一致,以方便使用。

扫描二维码关注公众号,回复: 1638987 查看本文章

UserInfo.java

package com.nova.bean;

public class UserInfo {
	private int id;
	private String name;
	private String password;
	private int age;
	private String email;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public UserInfo(int id, String name, String password, int age, String email) {
		super();
		this.id = id;
		this.name = name;
		this.password = password;
		this.age = age;
		this.email = email;
	}
	public UserInfo() {
		super();
	}
	@Override
	public String toString() {
		return "UserBean [id=" + id + ", name=" + name + ", password=" + password + ", age=" + age + ", email=" + email
				+ "]";
	}
}

    2.3 服务端主程序

ServerMain.java

package com.nova.test;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.nova.bean.UserInfo;
import com.nova.util.DBUtil;
/**
 * 服务端主程序
 * @author supernova
 *
 */
public class ServerMain extends HttpServlet {	
	private static final long serialVersionUID = 1L;
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//获取客户端发来的用户名和密码
		String user = req.getParameter("user");
		String pwd = req.getParameter("pwd");
		//打印流
		PrintWriter pw = resp.getWriter();;
		
		Connection con = null;
		PreparedStatement pStmt = null;
		ResultSet resultSet = null;
		UserInfo userInfo = null;
		
		try{
			con = DBUtil.getConnection();//获取数据库连接,
			String sql = "select * from userInfo where name = ? and password = ?";
			pStmt = con.prepareStatement(sql);
			pStmt.setString(1, user);
			pStmt.setString(2, pwd);
			resultSet = pStmt.executeQuery();
			
			if(resultSet.next()){
				userInfo = new UserInfo();
				userInfo.setId(resultSet.getInt("id"));
				userInfo.setName(resultSet.getString("name"));
				userInfo.setPassword(resultSet.getString("password"));
				userInfo.setEmail(resultSet.getString("email"));
			}
			if(userInfo != null){
				//登录成功
				pw.print("Login Success");
			}else {
				//登录失败
				pw.print("Login Failed");
			}
		}catch(SQLException e){
			e.printStackTrace();
		}finally{
			//最后需要把所有资源关闭
			pw.close();
			try {
				DBUtil.closeAll(con, pStmt, resultSet);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}	

2.4 导入mysql的jar包

        下载mysql驱动jar包 下载链接:https://download.csdn.net/download/xin93/10334399

        下载解压后,将jar包复制到MyEclipse工程目录的WebRoot/WEB-INF/lib中,并右键build path --> Add to build path


2.4 模拟客户端(网页)

        在网页客户端的body标签中添加表单:

    <form action="login">
    	username:<input type="text" name="user"/><br/>
    	password:<input type="password" name="pwd"/><br/>
    	<input type="submit" value="login"/>
    </form>

2.5 web.xml

    在WebRoot/WEB-INF的目录下,打开web.xml文件,在web-app标签下添加:

  <servlet>
  	<servlet-name>ServerMain</servlet-name>
  	<servlet-class>com.nova.test.ServerMain</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ServerMain</servlet-name>
  	<url-pattern>/login</url-pattern>
  </servlet-mapping>

3. 运行测试

输入正确的用户名和密码:

点击Login按钮,登录成功。


输入错误的用户名密码,


登录失败


猜你喜欢

转载自blog.csdn.net/xin93/article/details/79855448