javaWeb简单登录实现验证数据库
用户登录案例需求:
1.编写login.html登录页面
username & password 两个输入框
2.使用Druid数据库连接池技术,操作mysql,day14数据库中user表
3.使用JdbcTemplate技术封装JDBC
4.登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您
5.登录失败跳转到FailServlet展示:登录失败,用户名或密码错误
不加try(){}catch 出现了两个错误!!!!!!
java.lang.NoClassDefFoundError: org/springframework/jdbc/core/RowMappers的错误通过调试得到的
for servlet [servlet.LoginServlet] in context with path [/tom] threw excepti..............
登录实现原理就是,通过输入查询数据库,如果能的到就表示密码用户正确,否则错误,实现时可以使用try(){}catch{}
正确就返回一个对象,错误就返回null:这样就不会报错!
UserDaos
package UserDao; import JdbcUtils.JdbcUtility; import domain.User; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; /** * 操作数据库 * @date 2019/9/22 16:42 */ public class UserDaos { private JdbcTemplate templates=new JdbcTemplate(JdbcUtility.getDataSource()); public User login(User logs){//从数据库查询用户名和密码 通过得到封装里面的数据loginuser.getUser()查找数据库对应数据 try {//注意!!!!如果查询到了则返回user否则返回null(不会报错!!!) //所以依此可以判断数据库中是否存在输入的数据 String sql="select * from log where user= ? and pass= ?"; User user = templates.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), logs.getUser(), logs.getPass()); return user; }catch (DataAccessException e){ e.printStackTrace(); return null; } } }
LoginServlet
package servlet; import UserDao.UserDaos; import domain.User; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/one") public class LoginServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.设置编码 req.setCharacterEncoding("utf-8"); //2.获取请求参数 String username = req.getParameter("username"); String password = req.getParameter("password"); //3.封装对象 User loginuser=new User(); loginuser.setUser(username); loginuser.setPass(password); //4.调用userDaos UserDaos userDaos=new UserDaos(); User user = userDaos.login(loginuser); System.out.println(user); //5.判断user if (user!=null){ req.setAttribute("user",user);//共享数据 req.getRequestDispatcher("/su").forward(req,resp);//重定向 }else { req.getRequestDispatcher("/fa").forward(req,resp); } } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } }
package JdbcUtils;
import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; /** * 数据库工具类 * @date 2019/9/22 16:00 */ public class JdbcUtility { static DataSource dataSource=null; static {//加载配置文件 Properties pro=new Properties(); InputStream rs = JdbcUtility.class.getClassLoader().getResourceAsStream("druid.properties"); try { pro.load(rs); dataSource = DruidDataSourceFactory.createDataSource(pro); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } //返回一个数据池对象 public static DataSource getDataSource(){ return dataSource; } //获取链接Connection对象 public static Connection getConnection() throws SQLException { return dataSource.getConnection(); } }
user
package domain; /** * s实体封装数据库表 * @date 2019/9/22 16:40 */ public class User { private int id; private String user; private String pass; @Override public String toString() { return "User{" + "id=" + id + ", user='" + user + '\'' + ", pass='" + pass + '\'' + '}'; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; }
fail
package servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * 登录失败转发到此页面 * @date 2019/9/22 20:47 */ @WebServlet("/fa") public class FailServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // response.setContentType("text/html;charset=utf-8"); //输出 response.getWriter().write("登录失败,用户名或者密码错误"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response); } }
sucess
package servlet; import domain.User; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * 登录失败转发到此页面 * @date 2019/9/22 20:47 */ @WebServlet("/su") public class SuecessServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // response.setContentType("text/html;charset=utf-8");//输出为中文格式 //输出 User user =(User) request.getAttribute("user"); if (user!=null){ response.getWriter().write("登录成功,欢迎你"+user.getUser()); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response); } }
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/one" method="post"> 用户名:<input type="text" name="username"> <br> 密码:<input type="password" name="password"><br> <input type="submit" value="登录"> </form> </body> </html>
数据库
DROP TABLE IF EXISTS `log`; CREATE TABLE `log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `pass` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of log -- ---------------------------- INSERT INTO `log` VALUES (1, 'zou', '123'); SET FOREIGN_KEY_CHECKS = 1;
配置文件
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql:///login username=root password=123 initialSize=5 maxActive=10 maxWait=3000