JavaWeb开发 之 (登录案例)request对象练习

本文档介绍了使用JavaWeb进行用户登录案例的开发过程,包括创建login.html页面,利用Druid数据库连接池操作MySQL的user表,运用JdbcTemplate技术,以及登录成功或失败后的页面跳转。详细步骤涵盖项目配置、数据库环境建立、包结构设计、DAO层实现及Servlet处理逻辑。

案例:用户登录


   案例需求:
        1.编写login.html登录页面
            username & password 两个输入框
        2.使用Druid数据库连接池技术,操作mysql,day14数据库中user表
        3.使用JdbcTemplate技术封装JDBC
        4.登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您
        5.登录失败跳转到FailServlet展示:登录失败,用户名或密码错误

分析:

开发步骤
        1. 创建项目,导入html页面,配置文件,jar包

              

     2. 创建数据库环境

         创建一个loginTest数据库,创建一个user表,字段id、username、password;

			CREATE DATABASE loginTest;
			USE loginTest;
			CREATE TABLE USER(
			
				id INT PRIMARY KEY AUTO_INCREMENT,
				username VARCHAR(32) UNIQUE NOT NULL,
				PASSWORD VARCHAR(32) NOT NULL
			);

     创建数据连接的配置文件:在src目录下创建一个druid.properties文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/logintest
username=root
password=zq123456
initialSize=5
maxActive=10
maxWait=3000

其中url=jdbc:mysql://localhost:3306/logintest   是连接数据库的ip  端口 和数据库名;

 

    3. 创建包cn.zq.domain,创建类User

package com.zq.domain;

public class User {
    private String userName;
    private String passWord;

    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{" +
                "userName='" + userName + '\'' +
                ", passWord='" + passWord + '\'' +
                '}';
    }
}

4. 创建包cn.zq.util,编写工具类JDBCUtils

在静态代码块创建连接池对象;

package com.zq.util;

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;

public class JDBCUtils {
    private static DataSource dataSource;
    static {
        //1.加载配置文件
        Properties pro=new Properties();
        //使用ClassLoader加载配置文件,获取字节输入流
        InputStream resourceAsStream = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
        try {
            pro.load(resourceAsStream);
            //2.初始化连接池对象
            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();
    }

}

5. 创建包cn.zq.dao,创建类UserDao,提供login方法

package com.zq.dao;

import com.zq.domain.User;
import com.zq.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

public class UserDao {
    //声明JDBCTemplate对象共用
    private JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());

    /**
     * 登录方法
     * @param user 只有用户名和密码
     * @return user包含用户全部数据,没有查询到,返回null
     */
    public User login(User user){
        String sql = "select * from user where username = ? and password = ?";
        //这里查不到会报错,所以要加异常处理;
        try{
            User u = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), user.getUserName(), user.getPassWord());
            return u;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
}

    6. 编写cn.zq.servlet.LoginServlet类

注意注解中虚拟路径的书写;

package com.zq.servlet;

import com.zq.dao.UserDao;
import com.zq.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("/loginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置编码格式
        request.setCharacterEncoding("utf-8");
        //2.获取请求参数
        String username = request.getParameter("userName");
        String password = request.getParameter("passWord");

        User user=new User();
        user.setUserName(username);
        user.setPassWord(password);
        System.out.println(user);

        UserDao dao=new UserDao();
        User loginUser = dao.login(user);
        if(loginUser==null){
            //没查到,登录失败。跳转到失败的servlet中去;
            request.getRequestDispatcher("/failServlet").forward(request,response);
        }else{
            //登录成功;
            //存储数据
            request.setAttribute("user",loginUser);
            //跳转到成功的Servlet中去
            request.getRequestDispatcher("/successServlet").forward(request,response);
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}
@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);
    }
}
@WebServlet("/successServlet")
public class SuccessServlet 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.getUserName()+",欢迎您");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

7.写一个简单的html  form表单提交

action中的路径的书写:项目虚拟路径+servlet的虚拟路径

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
    <form action="/loginTest/loginServlet" method="post">
        用户名:<input type="text" name="userName"> <br>
        密  码:<input type="password" name="passWord"> <br>
        <input type="submit" value="登录">
    </form>
</body>
</html>

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值