JavaEnterprise原始企业开发servlet+jsp实现系统用户注册

项目搭建

file->project

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yK0mxUqR-1651993292370)(../typora-user-images/image-20220508102704741.png)]

在这里插入图片描述

新建web目录

在这里插入图片描述

指定保存位置

在这里插入图片描述

项目初步搭建完成

在这里插入图片描述

导入lib依赖

创建完JavaEE 基础项目框架之后,还的把需要 依赖的jar包都添加到 web/WeB-InF /lib 目录里。

lib :(作用)

​ 存放需要的jar包 依赖的文件目录,就是这个目录里导入的是项目需要的jar包。
在这里插入图片描述

可以看到图中我的lib 目录下已经导入了jar 依赖

下载对应jar

Maven Central Repository Search 可以使用这个网站搜索 上面图片中的jar 名字进行下载

以 commons-beanutils 工具类演示如何搜索和下载jar包

打开上述的网站-在search 里 输入 commons-beanutils 得到如下图内容,然后回车 出现第二张图里的内容。

我下载的是第二个jar ,选择download 开始下载了
在这里插入图片描述

在这里插入图片描述

下载成功

在这里插入图片描述

剩下的jar 包重复这个过程即可下载完成。

下载 项目完整 lib

如果不想一个一个下载的,可以直接点击下面这个链接直接把此项目的lib 目录和里面的jar包全部下载下来。

https://download.csdn.net/download/kangshihang1998/85318173

导入jar包

经过上面的步骤,已经把对应的jar包下载下来了。下面让我们一起把jar包导入到项目中

新建lib目录(如果是直接下载的lib目录可以跳过这步,直接把lib目录复制到WEB-NF目录下即可)

在web/WeB-InF 目录下新建lib 子目录用于存放jar包

点击WEB-INF目录右击,选择Directory 如下图
在这里插入图片描述
在这里插入图片描述

因为我这已经创建过了,所以提示lib 目录已存在。如果没有存在lib目录可以直接点击ok就新建完了

在这里插入图片描述

新建完毕lib目录后可以把刚才下载的jar包都复制到这个目录下了,如上图我的是已经把jar 复制到了lib目录了。

添加依赖

完成以上步骤以后可以按照下面的步骤把依赖添加至项目中了

  1. 右击lib目录

  2. 选择弹出框里的 Add as Library

    1. 在这里插入图片描述
  3. 选择依赖级别

  4. 如下图所示 可以选择把依赖添加到整个项目里或者指定模块,添加到整个项目相当于全局依赖,添加到指定模块相当局部依赖。根据项目选择合适的依赖范围。

  5. 在这里插入图片描述

    1. global libray 全局
    2. project libray 项目
    3. module libray 模块
  6. 在这里插入图片描述

点击ok 完成依赖导入!

项目分层

在这里插入图片描述

code-实践

配置文件

druid.properties 数据库配置文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true 
username=root
password=123456

代码

pojo

package com.kang.pojo;

/**
 * @Description 用户信息
 * @ClassName UserInfoPojo
 * @Author 康世行
 * @Date 15:34 2022/4/20
 * @Version 1.0
 **/
public class UserInfoPojo {
    private String userName;
    private String userPwd;
    private int age;
    private String sex;
    private String image;



    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPwd() {
        return userPwd;
    }

    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "UserInfoPojo{" +
                "userName='" + userName + '\'' +
                ", userPwd='" + userPwd + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", image='" + image + '\'' +
                '}';
    }
}

dao

package com.kang.dao;

import com.kang.pojo.UserInfoPojo;
import com.kang.utils.Druidutils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import java.sql.SQLException;

/**
 * @Description TODO
 * @ClassName UserInfoDao
 * @Author 康世行
 * @Date 14:58 2022/5/6
 * @Version 1.0
 **/

public class UserInfoDao {


    /**
    * @author 康世行
    * @description: 用户登录校验
    * @date  2022/5/6 14:58
    * @param username
    * @return com.kang.pojo.UserInfoPojo
    * @Version1.0
    **/
    public UserInfoPojo getUserInfo(String username,String userPwd){
        //显示指定用户名信息
        QueryRunner runner=new QueryRunner(Druidutils.getDataSource());
        UserInfoPojo query=null;
        try {
             query = runner.query("select * from user_info where userName=? and userPwd=?", new BeanHandler<>(UserInfoPojo.class), username,userPwd);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return query;
    }

    /**
     * @author 康世行
     * @description: 根据姓名获取用户信息
     * @date  2022/5/6 14:58
     * @param username
     * @return com.kang.pojo.UserInfoPojo
     * @Version1.0
     **/
    public UserInfoPojo getUserInfo(String username){
        //显示指定用户名信息
        QueryRunner runner=new QueryRunner(Druidutils.getDataSource());
        UserInfoPojo query=null;
        try {
            query = runner.query("select * from user_info where userName=?", new BeanHandler<>(UserInfoPojo.class), username);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return query;
    }
    /**
    * @author 康世行
    * @description: 添加用户信息
    * @date  2022/5/6 16:18
    * @param userInfoPojo
    * @return int
    * @Version1.0
    **/
    public int InsertUserInfo(UserInfoPojo userInfoPojo){
        QueryRunner runner=new QueryRunner(Druidutils.getDataSource());
        int update=0;
        try {
             update = runner.update("insert into user_info values(?,?,?,?,?)", userInfoPojo.getUserName(),
                    userInfoPojo.getUserPwd(),
                    userInfoPojo.getAge(),
                    userInfoPojo.getSex(),
                    userInfoPojo.getImage());
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return update;
    }
}

service

接口

package com.kang.service;

import com.kang.pojo.UserInfoPojo;

/**
 * @Description 用户信息
 * @ClassName UserInfoService
 * @Author 康世行
 * @Date 14:50 2022/5/6
 * @Version 1.0
 **/
public interface UserInfoService {

    /**
    * @author 康世行
    * @description: 根据用户姓名获取用户信息
    * @date  2022/5/6 14:53
    * @param username
    * @return com.kang.pojo.UserInfoPojo
    * @Version1.0
    **/
    UserInfoPojo getUserInfo(String username);

    /**
     * @author 康世行
     * @description: 用户登录校验
     * @date  2022/5/6 14:53
     * @param username
     * @return com.kang.pojo.UserInfoPojo
     * @Version1.0
     **/
    UserInfoPojo getUserInfo(String username,String userPwd);
    /**
    * @author 康世行
    * @description: 添加用户信息
    * @date  2022/5/6 16:19
    * @param userInfoPojo
    * @return int
    * @Version1.0
    **/
    int insertUserInfo(UserInfoPojo userInfoPojo);
}

实现类

package com.kang.service.impl;

import com.alibaba.druid.util.StringUtils;
import com.kang.dao.UserInfoDao;
import com.kang.pojo.UserInfoPojo;
import com.kang.service.UserInfoService;

import javax.annotation.Resource;

/**
 * @Description TODO
 * @ClassName UserInfoImpl
 * @Author 康世行
 * @Date 14:55 2022/5/6
 * @Version 1.0
 **/
public class UserInfoImpl implements UserInfoService {


    private UserInfoDao userInfoDao;

    public UserInfoImpl(UserInfoDao userInfoDao) {
        this.userInfoDao = userInfoDao;
    }

    @Override
    public UserInfoPojo getUserInfo(String username) {
        if(StringUtils.isEmpty(username)){
            return null;
        }
        UserInfoPojo userInfo = userInfoDao.getUserInfo(username);
        return userInfo;
    }

    @Override
    public UserInfoPojo getUserInfo(String username,String userPwd) {
        if(StringUtils.isEmpty(username) &&StringUtils.isEmpty(userPwd) ){
            return null;
        }
        UserInfoPojo userInfo = userInfoDao.getUserInfo(username,userPwd);
        return userInfo;
    }

    @Override
    public int insertUserInfo(UserInfoPojo userInfoPojo) {
        return userInfoDao.InsertUserInfo(userInfoPojo);
    }
}

Servlet

注意:注册用户用到了文件上传的功能,所以使用了一个工具类,在新建这层的注册用户类的时候可以先添加底下的工具类。

注册用户

package com.kang.Servlet;

import com.kang.dao.UserInfoDao;
import com.kang.pojo.UserInfoPojo;
import com.kang.service.UserInfoService;
import com.kang.service.impl.UserInfoImpl;
import com.kang.utils.FileUploadUtils;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

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.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Description 添加用户信息
 * @ClassName ${NAME}
 * @Author 康世行
 * @Date 16:20 2022/5/6
 * @Version 1.0
 **/
@WebServlet("/AddUserInfoServlet")
public class AddUserInfoServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String uploadPath = getServletContext().getRealPath("upload");
        Map<String,Object> userMap = new HashMap<>();
        String contextPath = getServletContext().getContextPath();
        userMap= FileUploadUtils.fileUpload(request,response,uploadPath);
        int flag=0;
        try {
            //使用beanUtils 把map 转成 userInfoPojo 类型
            UserInfoPojo userInfoPojo=new UserInfoPojo();
            BeanUtils.populate(userInfoPojo,userMap);
            //持久化到数据库
            UserInfoDao userInfoDao=new UserInfoDao();
            UserInfoService userInfoService=new UserInfoImpl(userInfoDao);
            //查询是否已经被注册
            UserInfoPojo userInfo = userInfoService.getUserInfo(userInfoPojo.getUserName());
            if (userInfo!=null){
                 //跳转到添加用户页面
                response.sendRedirect(contextPath+"/addUserInfo.jsp");
            }else {
                flag = userInfoService.insertUserInfo(userInfoPojo);
                if (flag>0){
                    //跳转添加成功页面
                    response.sendRedirect(contextPath+"/login.jsp");
                }else {
                    //跳转到添加用户信息
                    response.sendRedirect(contextPath+"/addUserInfo.jsp");
                }
            }



        } catch (IllegalAccessException e) {
            e.printStackTrace();
            //跳转到添加用户信息
            response.sendRedirect(contextPath+"/addUserInfo.jsp");
        } catch (InvocationTargetException e) {
            e.printStackTrace();
            //跳转到添加用户信息
            response.sendRedirect(contextPath+"/addUserInfo.jsp");
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

登录

package com.kang.Servlet;

import com.kang.dao.UserInfoDao;
import com.kang.pojo.UserInfoPojo;
import com.kang.service.UserInfoService;
import com.kang.service.impl.UserInfoImpl;
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;

/**
 * @Description 用户登录
 * @ClassName ${NAME}
 * @Author 康世行
 * @Date 9:25 2022/5/8
 * @Version 1.0
 **/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           //获取用户登录账号密码
        Map<String, String[]> parameterMap = request.getParameterMap();
        UserInfoPojo userInfoPojo=new UserInfoPojo();
        try {
            BeanUtils.populate(userInfoPojo,parameterMap);

            //查询用户是否存在
            UserInfoDao userInfoDao=new UserInfoDao();
            UserInfoService userInfoService=new UserInfoImpl(userInfoDao);
            UserInfoPojo userInfo = userInfoService.getUserInfo(userInfoPojo.getUserName(), userInfoPojo.getUserPwd());
            String contextPath = getServletContext().getContextPath();
            if (userInfo==null){
                //重定向到登录页面
                response.sendRedirect(contextPath+"/login.jsp");
            }else {
                //重定向到主页
                response.sendRedirect(contextPath+"/home.jsp");
            }


        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

utils

Druidutils数据库链接

package com.kang.utils;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.util.Properties;

/**
 * @Description TODO
 * @ClassName 德鲁伊数据库链接功能类
 * @Author 康世行
 * @Date 14:33 2022/5/6
 * @Version 1.0
 **/
public class Druidutils{
    // 加载配置文件,初始链接池,使用静态代码块(整个程序只运行一次)
    private static DruidDataSource dataSource;
    static {
        // 加载配置文件 properties 类型配置文件
        Properties properties=new Properties();
        //加载 properties 文件的输入流
        InputStream resourceAsStream = Druidutils.class.getResourceAsStream("/druid.properties");
        try {
            //使用 properties 加载 德鲁伊配置文件
            properties.load(resourceAsStream);
            resourceAsStream.close();
            //1.2 初始化连接池
            dataSource=(DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
    * @author 康世行
    * @description: 返回连接池
    * @date  2022/5/6 14:50
    * @param
    * @return javax.sql.DataSource
    * @Version1.0
    **/
    public static DataSource getDataSource(){
        return dataSource;
    }
}

FileUploadUtils 文件上传工具类

package com.kang.utils;

import com.kang.dao.UserInfoDao;
import com.kang.pojo.UserInfoPojo;
import com.kang.service.UserInfoService;
import com.kang.service.impl.UserInfoImpl;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Description 文件上传功能类
 * @ClassName FileUploadUtils
 * @Author 康世行
 * @Date 9:21 2022/5/7
 * @Version 1.0
 **/
public class FileUploadUtils {

    /**
    * @author 康世行
    * @description: 文件上传
    * @date  2022/5/7 9:31
    * @param request 请求流
     * @param response 响应流
     * @param path 文件保存路径
    * @return java.util.Map<java.lang.String,java.lang.Object>
    * @Version1.0
    **/
    public static Map<String,Object> fileUpload(HttpServletRequest request, HttpServletResponse response,String path){
        //创建一个“硬盘文件条目工厂”对象
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //设置阈值,设置JVM一次能够处理的文件大小(默认吞吐量是10KB)
        factory.setSizeThreshold(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD);
        //设置临时文件的存储位置(文件大小大于吞吐量的话就必须设置这个值,比如文件大小:1GB ,一次吞吐量:1MB)
        File file = new File(path);
        if(!file.getParentFile().exists()){
            file.getParentFile().mkdirs();
        }
        factory.setRepository(file);
        //创建核心对象
        ServletFileUpload fileUpload = new ServletFileUpload(factory);
        //设置最大可支持的文件大小(10MB)
        fileUpload.setFileSizeMax(1024*1024*10);
        //设置转换时使用的字符集
        fileUpload.setHeaderEncoding("UTF-8");
        //存储用户表单提交的内容
        Map<String,Object> userMap = new HashMap<>();
        if(ServletFileUpload.isMultipartContent(request)){
            try {
                List<FileItem> fileItems = fileUpload.parseRequest(request);
                for ( FileItem fileItem : fileItems) {
                    if(fileItem.isFormField()){//判断该FileItem为一个普通的form元素
                        //获取字段名
                        String fieldName = fileItem.getFieldName();
                        //获取字段值,并解决乱码
                        String fieldValue = fileItem.getString("UTF-8");
                        userMap.put(fieldName,fieldValue);

                    }else{
                        //判断该FileItem为一个文件
                        //获取字段名
                        String fieldName = fileItem.getFieldName();
                        //获取文件名
                        String fileName = fileItem.getName();
                        //用户上传的文件名
                        String fileUserName=System.currentTimeMillis()+fileName;
                        File file1 = new File(path+fileUserName);
                        fileItem.write(file1);
                        userMap.put(fieldName,fileUserName);
                    }
                }
            } catch (FileUploadException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return userMap;
    }
}

jsp

登录

<%--
  Created by IntelliJ IDEA.
  User: 康世行
  Date: 2022/5/7
  Time: 9:37
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
  <form action="${pageContext.request.contextPath}/LoginServlet" method="post">
      账号: <input type="text" name="userName"> <br/>
      密码:<input type="password" name="userPwd"><br/>
      <input type="submit" value="登录">
      <label><a href="${pageContext.request.contextPath}/addUserInfo.jsp">注册用户</a> </label>
  </form>
</body>
</html>

注册用户

<%--
  Created by IntelliJ IDEA.
  User: 康世行
  Date: 2022/5/6
  Time: 16:21
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>添加用户信息</title>
</head>
<body>
    <h1>请添加用户信息</h1>
    <form action="${pageContext.request.contextPath}/AddUserInfoServlet" method="post" enctype="multipart/form-data">
        用户名:<input type="text" name="userName" ><br/>
        用户名:<input type="password" name="userPwd" ><br/>
        年龄:<input type="number" name="age"><br/>
        男:<input type="radio" value="男" name="sex">
        女:<input type="radio" value="女" name="sex" checked="checked"><br/>
        头像:<input type="file" name="image"><br/>
        <input type="submit">
    </form>
</body>
</html>

home

<%--
  Created by IntelliJ IDEA.
  User: 康世行
  Date: 2022/5/8
  Time: 9:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>主页面</title>
</head>
<body>
  <h1>登录成功!</h1>
</body>
</html>

效果

注册用户

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eIJSDZfr-1651993292384)(…/typora-user-images/image-20220508113020847.png)]

用户注册成功,数据库会多出一条你刚才添加的账号

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JQBuH71I-1651993292385)(…/typora-user-images/image-20220508113111166.png)]

使用刚才注册的用户登录检验是否,添加成功!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-af0W1Ig6-1651993292386)(…/typora-user-images/image-20220508145915344.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oHdYEadK-1651993292387)(…/typora-user-images/image-20220508113055735.png)]

问题

mysql驱动无效

因为导错了依赖,所以导致无法找到mysql 驱动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3DuouxzZ-1651993292388)(…/typora-user-images/image-20220508111622766.png)]

解决方案

下载截图里的对应版本的jar包

type=“file” name=“image”>


```

home

<%--
  Created by IntelliJ IDEA.
  User: 康世行
  Date: 2022/5/8
  Time: 9:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>主页面</title>
</head>
<body>
  <h1>登录成功!</h1>
</body>
</html>

效果

注册用户
在这里插入图片描述

用户注册成功,数据库会多出一条你刚才添加的账号

[外链图片转存中...(img-JQBuH71I-1651993292385)]

使用刚才注册的用户登录检验是否,添加成功!
在这里插入图片描述
**[外链图片转存中...(img-af0W1Ig6-1651993292386)]**

问题

mysql驱动无效

因为导错了依赖,所以导致无法找到mysql 驱动

在这里插入图片描述

解决方案

下载截图里的对应版本的jar包
在这里插入图片描述

** 感谢阅读 如果感兴趣~可以给小编个一键三连 多谢 在这里插入图片描述
**

posted @ 2022-07-31 17:25  康世行  阅读(41)  评论(0编辑  收藏  举报