Java EE开发第十一章:4.servlet的综合小项目之实现账户密码的登陆

前言:学习了jdbc和servlet的使用,我们可以做一个简单的账户密码的登陆项目,实现的效果是在网页端输入账号密码然后提交给servlet,然后由servlet通过jdbc把接受来的数据传递给数据库进行验证,传递回结果进行判断!

-------实现步骤--------

1、创建数据库和表

create database day09;
		use day09;
		create table user(
			id int primary key auto_increment,
			username varchar(20),
			password varchar(20),
			email varchar(20),
			name varchar(20),
			sex varchar(10),
			birthday date,
			hobby varchar(50)
		);
		insert into user values (null,'tom','123','[email protected]','tom','1','1988-01-01',null);
2、创建项目

3、创建网页页面。注意:给用户名和密码添加name属性,修改表单的action属性,添加method属性

<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8" />
		<title>WEB01</title>
	</head>

	<body>
			<form action="http://localhost:8080/Day0903/login" method="post">
		<input type="text"  id="username" placeholder="请输入用户名" name="username"> <br> 
		<input type="password"  id="inputPassword3" placeholder="请输入密码" name="password"> <br> 
		<input type="submit" width="100" value="登录" name="submit"> <br>
	</form>
	<hr>
	</body>

</html>
4、导入jar包


5、导入工具类和配置文件


6、创建servlet(LoginServlet: 路径 /login),接受用户名和密码,调用service层(UserService)完成登录操作,提示信息

7、UserService-->login(username,password)-->调用dao

8、dao:通过用户名和密码查询数据库

------代码实现-----

配置文件:

<servlet>
    <description></description>
    <display-name>LoginServlet</display-name>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.fly.web.servlet.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>ShowServlet</display-name>
    <servlet-name>ShowServlet</servlet-name>
    <servlet-class>com.fly.web.servlet.ShowServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ShowServlet</servlet-name>
    <url-pattern>/show</url-pattern>
  </servlet-mapping>

java代码层:


UserDao:

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import com.fly.domain.User;
import com.fly.utils.DataSourceUtils;

public class UserDao {

	public User getUserByUsernameAndPwd(String username, String password) throws SQLException {
		QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
		String sql = "select * from user where username = ? and password = ?";
		User user = qr.query(sql, new BeanHandler<>(User.class), username, password);
		return user;
	}
}
User:
public class User {
	/*id int primary key auto_increment,
	username varchar(20),
	password varchar(20),
	email varchar(20),
	name varchar(20),
	sex varchar(10),
	birthday date,
	hobby varchar(50)*/
	
	private int id;
	private String username;
	private String password;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	
}
UserService:
import java.sql.SQLException;

import com.fly.dao.UserDao;
import com.fly.domain.User;

public class UserService {
	public User login(String username, String password) throws SQLException {
		// 调用dao
		UserDao dao = new UserDao();

		return dao.getUserByUsernameAndPwd(username, password);
	}
}
DataSourceUtils:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DataSourceUtils {
	private static ComboPooledDataSource ds=new ComboPooledDataSource();
	
	/**
	 * 获取数据源
	 * @return 连接池
	 */
	public static DataSource getDataSource(){
		return ds;
	}
	
	/**
	 * 获取连接
	 * @return 连接
	 * @throws SQLException
	 */
	public static Connection getConnection() throws SQLException{
		return ds.getConnection();
	}
	
	
	
	/**
	 * 释放资源
	 * 
	 * @param conn
	 *            连接
	 * @param st
	 *            语句执行者
	 * @param rs
	 *            结果集
	 */
	public static void closeResource(Connection conn, Statement st, ResultSet rs) {
		closeResultSet(rs);
		closeStatement(st);
		closeConn(conn);
	}

	/**
	 * 释放连接
	 * 
	 * @param conn
	 *            连接
	 */
	public static void closeConn(Connection conn) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			conn = null;
		}

	}

	/**
	 * 释放语句执行者
	 * 
	 * @param st
	 *            语句执行者
	 */
	public static void closeStatement(Statement st) {
		if (st != null) {
			try {
				st.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			st = null;
		}

	}

	/**
	 * 释放结果集
	 * 
	 * @param rs
	 *            结果集
	 */
	public static void closeResultSet(ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			rs = null;
		}

	}
}
LoginServlet:
import java.io.IOException;
import java.sql.SQLException;

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

import com.fly.domain.User;
import com.fly.service.UserService;

public class LoginServlet extends HttpServlet {

	@Override
	public void init() throws ServletException {
		// 获取全局管理者
		ServletContext context = getServletContext();
		// 初始化次数
		context.setAttribute("count", 0);
		System.out.println("初始化次数成功");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 0.设置编码
		response.setContentType("text/html;charset=utf-8");

		// 1.接受用户名和密码
		String username = request.getParameter("username");
		String password = request.getParameter("password");

		// 2.调用userservice 里的login(username,password) 返回值:User user
		User user = null;
		try {
			user = new UserService().login(username, password);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("网络异常,请稍后再试!");
		}

		// 3.判断user是否为空
		if (user == null) {
			// 3.1若为空 写"用户名和密码不匹配"
			response.getWriter().print("用户名和密码不匹配,3秒之后跳转");
			// 案例2-定时跳转
			response.setHeader("refresh", "3;url=/Day0903/index.html");

		} else {
			// 3.2若不为空 写"xxx:欢迎回来"
			response.getWriter().print(user.getUsername() + ":欢迎回来");

			// 4获取全局管理者
			ServletContext context = this.getServletContext();

			// 5获取总次数
			Integer cishu = (Integer) context.getAttribute("count");
			// 6.将次数+1
			cishu++;

			// 7.将次数再次放入域对象中
			context.setAttribute("count", cishu);
		}
	}

}

ShowServlet:

import java.io.IOException;

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

public class ShowServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 0.设置编码
		response.setContentType("text/html;charset=utf-8");

		// 1.获取全局管理者
		ServletContext context = this.getServletContext();

		// 2.获取登录的次数
		Integer cishu = (Integer) context.getAttribute("count");

		// 3.在页面上打印总次数
		response.getWriter().print("登录成功的总次数为:" + cishu);
	}

}

运行截图:

正确的登陆:


错误的登陆:


------完-----





发布了105 篇原创文章 · 获赞 74 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_32306361/article/details/78082662