- 项目搭建
- 导入lib依赖
- 下载对应jar
- 下载 项目完整 lib
- 导入jar包
- 项目分层
- code-实践
- 配置文件
- 代码
- pojo
- dao
- service
- Servlet
- utils
- jsp
- 登录
- 注册用户
- home
- 效果
- 问题
- mysql驱动无效
- home
- 效果
- 问题
- mysql驱动无效
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;
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;
public class UserInfoDao {
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;
}
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;
}
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;
public interface UserInfoService {
UserInfoPojo getUserInfo(String username);
UserInfoPojo getUserInfo(String username,String userPwd);
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;
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;
@WebServlet("/AddUserInfoServlet")
public class AddUserInfoServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String uploadPath = getServletContext().getRealPath("upload");
Map 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;
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取用户登录账号密码
Map 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;
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();
}
}
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;
public class FileUploadUtils {
public static Map 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 userMap = new HashMap<>();
if(ServletFileUpload.isMultipartContent(request)){
try {
List 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" %>
登录
注册用户
<%--
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" %>
添加用户信息
请添加用户信息
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" %>
主页面
登录成功!
效果
注册用户
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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”>
<%--
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" %>
主页面
登录成功!
效果
注册用户
用户注册成功,数据库会多出一条你刚才添加的账号
使用刚才注册的用户登录检验是否,添加成功!
因为导错了依赖,所以导致无法找到mysql 驱动
解决方案
下载截图里的对应版本的jar包
** 感谢阅读 如果感兴趣~可以给小编个一键三连 多谢
**



