目录
1.2.3 创建包cn.itcast.domain,创建类User
1.2.4创建包cn.itcast.util,编写工具类JDBCUtils
1.2.5 创建包cn.itcast.dao,创建类UserDao,提供login方法(操作数据库)
1.2.6编写cn.itcast.web.servlet.LoginServlet类
1.2.7编写FailServlet和SuccessServlet类
1.2.8login.html中form表单的action路径的写法
1.编写login.html登录页面username & password 两个输入框
2.使用Druid数据库连接池技术,操作mysql,day14数据库中user表
3.使用JdbcTemplate技术封装JDBC
4.登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您
5.登录失败跳转到FailServlet展示:登录失败,用户名或密码错误

a.新建Java项目

b.添加框架支持(Web应用程序)

c.部署项目



d.导入servlet-api.jar

- CREATE DATABASE day14;
- USE day14;
- CREATE TABLE USER(
-
- id INT PRIMARY KEY AUTO_INCREMENT,
- username VARCHAR(32) UNIQUE NOT NULL,
- PASSWORD VARCHAR(32) NOT NULL
- );
-
- INSERT INTO USER (username,PASSWORD) VALUES("superbaby",123);
-
- select * from user;
- package cn.itcast.domain;
-
- /**
- * 用户的实体类
- */
- public class User {
-
- private int id;
- private String username;
- private String password;
-
- private String gender;
-
- public void setHehe(String gender){
- this.gender = gender;
- }
-
- public String getHehe(){
- return gender;
- }
-
- 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;
- }
-
- @Override
- public String toString() {
- return "User{" +
- "id=" + id +
- ", username='" + username + '\'' +
- ", password='" + password + '\'' +
- ", gender='" + gender + '\'' +
- '}';
- }
- }
- package cn.itcast.util;
-
- import com.alibaba.druid.pool.DruidDataSourceFactory;
-
- import javax.sql.DataSource;
- import javax.xml.crypto.Data;
- import java.io.IOException;
- import java.io.InputStream;
- import java.sql.Connection;
- import java.sql.SQLException;
- import java.util.Properties;
-
- /**
- * JDBC工具类 使用Durid连接池
- */
- public class JDBCUtils {
-
- private static DataSource ds ;
-
- static {
-
- try {
- //1.加载配置文件
- Properties pro = new Properties();
- //使用ClassLoader加载配置文件,获取字节输入流
- InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
- pro.load(is);
-
- //2.初始化连接池对象
- ds = DruidDataSourceFactory.createDataSource(pro);
-
- } catch (IOException e) {
- e.printStackTrace();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- /**
- * 获取连接池对象
- */
- public static DataSource getDataSource(){
- return ds;
- }
-
-
- /**
- * 获取连接Connection对象
- */
- public static Connection getConnection() throws SQLException {
- return ds.getConnection();
- }
- }
配置文件
- driverClassName=com.mysql.jdbc.Driver
- url=jdbc:mysql:///day14
- username=root
- password=root
- initialSize=5
- maxActive=10
- maxWait=3000
- package cn.itcast.dao;
-
- import cn.itcast.domain.User;
- import cn.itcast.util.JDBCUtils;
- import org.springframework.dao.DataAccessException;
- import org.springframework.jdbc.core.BeanPropertyRowMapper;
- import org.springframework.jdbc.core.JdbcTemplate;
-
- /**
- * 操作数据库中User表的类
- */
- public class UserDao {
-
- //声明JDBCTemplate对象共用
- private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
-
- /**
- * 登录方法
- * @param loginUser 只有用户名和密码
- * @return user包含用户全部数据,没有查询到,返回null
- */
- public User login(User loginUser){
- try {
- //1.编写sql
- String sql = "select * from user where username = ? and password = ?";
- //2.调用query方法
- User user = template.queryForObject(sql,
- new BeanPropertyRowMapper
(User.class), - loginUser.getUsername(), loginUser.getPassword());
-
-
- return user;
- } catch (DataAccessException e) {
- e.printStackTrace();//记录日志
- return null;//当sql语句执行失败,不会报错,而是返回null
- }
- }
- }
由于导入servlet.api.jar的包,可以使用快捷创建servlet类

- package cn.itcast.web.servlet;
-
- import cn.itcast.dao.UserDao;
- import cn.itcast.domain.User;
- import org.apache.commons.beanutils.BeanUtils;
-
- 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;
- import java.lang.reflect.InvocationTargetException;
- import java.util.Map;
-
-
- @WebServlet("/loginServlet")
- public class LoginServlet extends HttpServlet {
-
-
- @Override
- protected void doGet(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对象
- User loginUser = new User();
- loginUser.setUsername(username);
- loginUser.setPassword(password);*/
- //2.获取所有请求参数
- Map
map = req.getParameterMap(); - //3.创建User对象
- User loginUser = new User();
- //3.1使用BeanUtils封装
- try {
- BeanUtils.populate(loginUser,map);
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
-
-
- //4.调用UserDao的login方法
- UserDao dao = new UserDao();
- User user = dao.login(loginUser);
-
- //5.判断user
- if(user == null){
- //登录失败
- req.getRequestDispatcher("/failServlet").forward(req,resp);
- }else{
- //登录成功
- //存储数据
- req.setAttribute("user",user);
- //转发
- req.getRequestDispatcher("/successServlet").forward(req,resp);
- }
-
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- this.doGet(req,resp);
- }
- }
1.设置编码可以防止中文乱码
2.获取所有请求参数,封装到map集合
3.创建User对象
3.1使用BeanUtils.populate()将用户输入的信息(map集合)封装到loginUser对象中
4.通过反射获得login方法,将loginUser传到方法中,通过JdbcTemplate中的方法queryForObject,返回一个user对象,该对象是数据库中的信息,或者由于数据库不匹配返回null。
5.判断user,利用getRequestDispatcher进行转发到其他页面。
- package cn.itcast.web.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;
-
- @WebServlet("/failServlet")
- 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);
- }
- }
- package cn.itcast.web.servlet;
-
- import cn.itcast.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("/successServlet")
- public class SuccessServlet extends HttpServlet {
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //获取request域中共享的user对象
- User user = (User) request.getAttribute("user");
- //if语句防止空指针异常
- if(user != null){
- //给页面写一句话
-
- //设置编码
- response.setContentType("text/html;charset=utf-8");
- //输出
- response.getWriter().write("登录成功!"+user.getUsername()+",欢迎您");
- }
-
-
- }
-
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- this.doPost(request,response);
- }
- }
action="/day14_test/loginServlet"
虚拟目录+Servlet的资源路径
BeanUtils工具类用于封装JavaBean的
1. JavaBean:标准的Java类
要求:
1. 类必须被public修饰
2. 必须提供空参的构造器
3. 成员变量必须使用private修饰
4. 提供公共setter和getter方法
功能:封装数据
2. 概念
成员变量:
属性:setter和getter方法截取后的产物
例如:getUsername() --> Username--> username
3. 方法:
setProperty()
getProperty()
populate(Object obj , Map map):将map集合的键值对信息,封装到对应的JavaBean对象中.