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);}}
运行截图:
正确的登陆:
错误的登陆:
阅读全文
0 0
- Java EE开发第十一章:4.servlet的综合小项目之实现账户密码的登陆
- Java EE开发第十一章:1.servlet的准备知识
- Java EE开发第十一章:3.servlet的体系结构以及常用方法
- java EE开发之Servlet第十一课:反射基础三
- Java EE开发第十一章:2.初始servlet
- java EE开发之Servlet第六课:神奇的Ajax
- Servlet小的登陆功能的实现
- java EE开发之Servlet第二课:Servlet的三个hashMap
- java EE开发之Servlet第一课
- java ee 之 servlet
- Java EE开发中Eclipse ee Servlet不能自动在web.xml里写入的问题
- 删除SVN中缓存的登陆账户密码
- facebook的账户登陆
- java ee项目的小结
- Java EE中Servlet的内置对象
- JAVA EE中 Servlet的入门
- 实现用户登陆的Servlet
- Servlet登陆功能的实现
- Win10自动修复无法开机【完美解决】
- mac jenkins执行任务时,提示Permission denied解决办法
- Linux内核部件分析
- jQuery问题小结
- ubuntu ftp配置
- Java EE开发第十一章:4.servlet的综合小项目之实现账户密码的登陆
- C/C++可变参数,“## __VA_ARGS__”宏的介绍和使用
- SQL查询总结
- adb 找不到不到夜神模拟器
- angularJs 网络请求实现天气预报
- 图的基本概念
- 【机器学习入门】概念原理及常用算法
- tf.diag_part学习
- JavaScript获取DOM元素