用戶登錄案例需求:
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