JavaEnterprise原始企业开发servlet+jsp实现系统用户注册
文章目录
项目搭建
file->project
新建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目录了。
添加依赖
完成以上步骤以后可以按照下面的步骤把依赖添加至项目中了
-
右击lib目录
-
选择弹出框里的 Add as Library
-
选择依赖级别
-
如下图所示 可以选择把依赖添加到整个项目里或者指定模块,添加到整个项目相当于全局依赖,添加到指定模块相当局部依赖。根据项目选择合适的依赖范围。
-
- global libray 全局
- project libray 项目
- module libray 模块
-
点击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>
效果
注册用户
用户注册成功,数据库会多出一条你刚才添加的账号
使用刚才注册的用户登录检验是否,添加成功!
问题
mysql驱动无效
因为导错了依赖,所以导致无法找到mysql 驱动
解决方案
下载截图里的对应版本的jar包
** 感谢阅读 如果感兴趣~可以给小编个一键三连 多谢
**