草庐IT

【JAVA项目实战】【图书管理系统】用户查询功能【Servlet】+【Jsp】+【Mysql】

Ali.s 2023-09-01 原文

🚀个人主页:欢迎访问Ali.s的首页

⏰ 最近更新:2022年7月25日

⛽ Java框架学习系列:【Spring】【SpringMVC】【Mybatis】

🔥 Java项目实战系列:【飞机大战】【图书管理系统】

⛳ Java基础学习系列:【继承】【封装】【多态】

🏆 通信仿真学习系列:【硬件】【通信】【MATLAB】

🍄 个人简介:通信工程本硕🌈、Java程序员🚴。目前只会CURD😂

💌 点赞 👍 收藏 💗留言 💬 都是我最大的动力💯


文章目录


前言

这里是【JAVASE】项目实战的第一节课,学习完MysqlJspServlet之后本该就完成该项目,由于后面进入了框架的学习,内容比较多,所以没有做SE阶段的项目,从今天开始,就来完成一下利用Servlet实现web的项目。想了一下还是做个非常常见的图书管理系统,复习下前面的知识。项目定位为非商用项目,仅适合学习和毕业设计使用。


一、技术选型

工具版本
JDK8
Tomcat8.5
MySQL8.0
IDEA2021.3
Navicat8.0
Maven2.0

二、创建Web项目

1.创建工程

打开IDEA软件,创建一个新的工程,然后在工程下面创建web项目。刚开始创建的可能不是web项目,需要在项目结构中转为web项目。转web项目具体操作如下:

选择Facets后添加web门面

web项目进行打包,方便加载到服务器,选择Artifacts后进行添加

点击ApplyOK后,此时的项目就是web项目了。主要目录结构如下:

2.配置Tomcat

首先找到IDEA中类似绿色锤子的地方,然后点击进行配置。

点击+,找到Tomcat server,选择Local

下面进行一些基本信息的配置,这里的JRE一般选默认1.8

如果是第一次配置Tomcat,需要注意上面的第5步,目录的选择不要包含中文路径

3.将web项目打包到Tomcat

继续在上面的第7步页面,将web项目打包到Tomcat
点击ApplyOK后,此时的项目就是web项目就部署到Tomcat服务器。

三、创建数据库

在数据库管理工具Navicat中创建一个book数据库,然后在book数据库中创建一系列的表,操作如下:

t_user表中设计字段如步骤5,然后向表中添加几条数据。

四、静态资源引入

在网上找一套静态页面的模板,将其导入到webapp包下面,便于后期美工页面的效果

五、实现用户信息查询

1.创建项目架构

该项目使用MVC架构来实现,虽然没有使用到后面需要学的SpringMVC框架的知识,但是其根本思想与其相同,均选用controllerdaoentityservice四层模型。

2.查询用户信息逻辑

查询用户信息的业务逻辑最主要用到ServletJspDBUtilsMySQL技术和工具方法

3.查询用户信息实现

创建每个包对应的类以及实现的接口和方法。主要是实体类和控制器的Java类和实现dao层和service层的接口以及连接数据库的工具DBUtils类。

控制层:

package com.song.bookmanagersystem.controller;
import com.song.bookmanagersystem.entity.User;
import com.song.bookmanagersystem.service.UserService;
import com.song.bookmanagersystem.service.impl.UserServiceImpl;
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.util.List;

/**
 * 用户的servlet
 * 作用:接收请求,servlet进行处理,处理完毕后返回请求
 *
 */
@WebServlet(name = "UserServlet",urlPatterns = "/userServlet")
public class UserServlet extends HttpServlet {
    //声明userService
    private UserService userService=new UserServiceImpl();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    /**
     * 具体统一处理请求
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //通过service进行信息查询
        List<User> list=userService.getUser(null);
        //进行绑定
        req.setAttribute("list",list);
        //跳转请求
        req.getRequestDispatcher("/user/user.jsp").forward(req,resp);
    }
}

持久层:

package com.song.bookmanagersystem.dao.impl;
import com.song.bookmanagersystem.dao.UserDao;
import com.song.bookmanagersystem.entity.User;
import com.song.bookmanagersystem.utils.DBUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class UserDaoImpl implements UserDao {
    @Override
    public List<User> list(User user) {
        //利用DBUtil实现数据库操作
        QueryRunner queryRunner = DBUtils.getQueryRunner();
        //创建sql
        String sql="select * from t_user";
        List<User> list=null;
        try {
            //BeanListHandler无法完成
            list = queryRunner.query(sql, new ResultSetHandler<List<User>>() {
                @Override
                public List<User> handle(ResultSet resultSet) throws SQLException {
                    List<User> list=new ArrayList<>();
                    while (resultSet.next()){
                        User user=new User();
                        user.setId(resultSet.getInt("id"));
                        user.setUserName(resultSet.getString("user_name"));
                        user.setPassword(resultSet.getString("password"));
                        user.setEmail(resultSet.getString("email"));
                        user.setPhoneNum(resultSet.getString("phone_num"));
                        user.setSalt(resultSet.getString("salt"));
                        user.setIsDeleted(resultSet.getInt("is_deleted"));
                        list.add(user);
                    }
                    return list;
                }
            });
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }

    public static void main(String[] args) {
        UserDaoImpl userDao = new UserDaoImpl();
        for (User user : userDao.list(null)) {
            System.out.println(user);
        }
    }
}

实体层:

package com.song.bookmanagersystem.entity;
public class User {
    private Integer id;
    private String userName;
    private String password;
    private String phoneNum;
    private String email;
    private String salt;
    private Integer isDeleted;

    public User() {
    }

    public User(Integer id, String userName, String password, String phoneNum, String email, String salt, Integer isDeleted) {
        this.id = id;
        this.userName = userName;
        this.password = password;
        this.phoneNum = phoneNum;
        this.email = email;
        this.salt = salt;
        this.isDeleted = isDeleted;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer 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;
    }

    public String getPhoneNum() {
        return phoneNum;
    }

    public void setPhoneNum(String phoneNum) {
        this.phoneNum = phoneNum;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getSalt() {
        return salt;
    }

    public void setSalt(String salt) {
        this.salt = salt;
    }

    public Integer getIsDeleted() {
        return isDeleted;
    }

    public void setIsDeleted(Integer isDeleted) {
        this.isDeleted = isDeleted;
    }
}

业务层:

package com.song.bookmanagersystem.service.impl;

import com.song.bookmanagersystem.dao.UserDao;
import com.song.bookmanagersystem.dao.impl.UserDaoImpl;
import com.song.bookmanagersystem.entity.User;
import com.song.bookmanagersystem.service.UserService;

import java.util.List;

public class UserServiceImpl implements UserService {
    private UserDao userDao=new UserDaoImpl();

    @Override
    public List<User> getUser(User user) {
        //处理业务
        return userDao.list(user);
    }
}

数据库工具类:

package com.song.bookmanagersystem.utils;

import com.mysql.cj.jdbc.MysqlDataSource;
import org.apache.commons.dbutils.QueryRunner;

import javax.management.Query;

public class DBUtils {
    private static MysqlDataSource source;
    static {
        source=new MysqlDataSource();
        source.setUser("root");
        source.setPassword("123456");
        source.setUrl("jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false");
    }
    public static QueryRunner getQueryRunner(){
        return new QueryRunner(source);
    }

}

六、启动服务器测试

启动服务器,让项目在服务器中运行,然后在网页进行查看查询到的数据信息,因为使用了静态模板,所以数据查询比较清楚,展现形式比较好。发现能成功查询到数据库中的用户信息,并且能够将查询到的数据返回到前端页面进行渲染。


总结

以上就是今天要讲的内容,本文创建了web项目,使用【Servlet】+【Jsp】+【Mysql】对用户信息进行了数据查询,并且将查询的信息返回到前端页面进行显示,能够很好的完成功能需求。

有关【JAVA项目实战】【图书管理系统】用户查询功能【Servlet】+【Jsp】+【Mysql】的更多相关文章

  1. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  2. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  3. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  4. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  5. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  6. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

  7. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  8. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  9. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  10. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

随机推荐