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

来源:互联网 发布:淘宝 韩都衣舍 编辑:程序博客网 时间:2024/06/05 22:43

前言:学习了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','tom@126.com','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 {// 调用daoUserDao 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 {@Overridepublic 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 userUser 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.将次数+1cishu++;// 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);}}

运行截图:

正确的登陆:


错误的登陆:


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





原创粉丝点击