IDEA+Java+JSP+Mysql+Tomcat实现Web图书管理系统(下)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: IDEA+Java+JSP+Mysql+Tomcat实现Web图书管理系统

2.后端


Book

package com.sjsq.po;
import java.io.Serializable;
/**
 * @author shuijianshiqing
 * @date 2020/5/19 22:40
 */
public class Book implements Serializable {
    private static final long serialVersionUID = 1L;
    private Integer bookid;
    private String bookname;
    private Double price;
    private String author;
    private String picture;
    private String publish;
    public static long getSerialVersionUID() {
        return serialVersionUID;
    }
    public Integer getBookid() {
        return bookid;
    }
    public void setBookid(Integer bookid) {
        this.bookid = bookid;
    }
    public String getBookname() {
        return bookname;
    }
    public void setBookname(String bookname) {
        this.bookname = bookname;
    }
    public Double getPrice() {
        return price;
    }
    public void setPrice(Double price) {
        this.price = price;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public String getPicture() {
        return picture;
    }
    public void setPicture(String picture) {
        this.picture = picture;
    }
    public String getPublish() {
        return publish;
    }
    public void setPublish(String publish) {
        this.publish = publish;
    }
    @Override
    public String toString() {
        return "Book{" +
                "bookid=" + bookid +
                ", bookname='" + bookname + '\'' +
                ", price=" + price +
                ", author='" + author + '\'' +
                ", picture='" + picture + '\'' +
                ", publish='" + publish + '\'' +
                '}';
    }
}

Card

package com.sjsq.po;
/**
 * @author shuijianshiqing
 * @date 2020/5/29 19:34
 */
public class Card {
    // 主键
    private Integer id;
    // 用户Id
    private Integer userid;
    // 用户名
    private String username;
    // 书名
    private Integer bookid;
    // 书本的数量
    private int booknum;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getUserid() {
        return userid;
    }
    public void setUserid(Integer userid) {
        this.userid = userid;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public Integer getBookid() {
        return bookid;
    }
    public void setBookid(Integer bookid) {
        this.bookid = bookid;
    }
    public int getBooknum() {
        return booknum;
    }
    public void setBooknum(int booknum) {
        this.booknum = booknum;
    }
    @Override
    public String toString() {
        return "Card{" +
                "id=" + id +
                ", userid=" + userid +
                ", username='" + username + '\'' +
                ", bookid=" + bookid +
                ", booknum=" + booknum +
                '}';
    }
}

User

package com.sjsq.po;
import java.io.Serializable;
/**
 * @author shuijianshiqing
 * @date 2020/5/19 22:19
 * 用户的实体类
 */
public class User implements Serializable {
    // 增加序列号,作用是反序列化的时候不会报错,切能进行IO的持久化
    public static final long serialVersionUID = 1L;
    private Integer id;
    private String name;
    private String password;
    private String email;
    private String phone;
    public static long getSerialVersionUID() {
        return serialVersionUID;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                ", phone='" + phone + '\'' +
                '}';
    }
}

BookDao

package com.sjsq.dao;
import com.sjsq.po.Book;
import java.util.List;
/**
 * @author shuijianshiqing
 * @date 2020/5/20 23:13
 * 图书信息接口
 */
public interface BookDao {
    /**
     * 查询图书信息
     * @param sql
     * @param arr
     * @return
     */
    public List<Book> select(String sql,Object[] arr);
    /**
     * 根据图书编号进行查询
     * @param id
     * @return
     */
    public Book getBook(Integer id);
}

CardDao

package com.sjsq.dao;
import com.sjsq.po.Book;
import com.sjsq.po.Card;
import com.sjsq.po.User;
import java.util.List;
/**
 * @author shuijianshiqing
 * @date 2020/5/29 19:42
 */
public interface CardDao {
    /**
     * 通过用户Id获取用户的购物车
     * @param id
     * @return
     */
    public List<Card> getCard(Integer id);
    /**
     * 添加用户信息和图书信息到用户的购物车
     * @param user
     * @param book
     * @param booknum
     * @return
     */
    public boolean addCard(User user, Book book,Integer booknum);
    /**
     * 使用Book来获取booknum
     * @param book
     * @return
     */
    public Integer getBookNum(Book book);
}

UserDao

package com.sjsq.dao;
import com.sjsq.po.User;
import java.util.List;
/**
 * @author shuijianshiqing
 * @date 2020/5/20 22:10
 * 创建一个接口用于声明用户登录注册的方法
 */
public interface UserDao {
    /**
     * 用户登录
     * @param user
     * @return
     */
    public User login(User user);
    /**
     * 用户注册
     * @param user
     * @return
     */
    public boolean register(User user);
    /**
     * 查询用户信息
     * @param sql
     * @param arr
     * @return
     */
    public List<User> selectUser(String sql,Object arr[]);
}

BookService

package com.sjsq.service;
import com.sjsq.po.Book;
import java.util.List;
/**
 * @author shuijianshiqing
 * @date 2020/5/20 23:37
 * Book的Service层
 */
public interface BookService {
    /**
     * 查询图书信息
     * @param book
     * @return
     */
    public List<Book> select(Book book);
    /**
     * 根据编号来查询
     * @param book
     * @return
     */
    public Book getBook(Book book);
}

CardService

package com.sjsq.service;
import com.sjsq.po.Book;
import com.sjsq.po.Card;
import com.sjsq.po.User;
import java.util.List;
/**
 * @author shuijianshiqing
 * @date 2020/5/29 23:00
 */
public interface CardService {
    /**
     * 获取用户的购物车
     * @param id
     * @return
     */
    public List<Card> getCard(Integer id);
    /**
     * 添加用户信息和图书信息到用户的购物车
     * @param user
     * @param book
     * @param booknum
     * @return
     */
    public boolean addCard(User user, Book book, Integer booknum);
    /**
     * 根据Book获取booknum
     * @param book
     * @return
     */
    public Integer getBookNum(Book book);
}

UserService

package com.sjsq.service;
import com.sjsq.po.User;
import java.util.List;
/**
 * @author shuijianshiqing
 * @date 2020/5/20 22:54
 * Service层
 */
public interface UserService {
    /**
     * 用户查询的信息
     * @param user
     * @return
     */
    public List<User> selectUser(User user);
}

BookServiceImpl

package com.sjsq.service.impl;
import com.sjsq.dao.BookDao;
import com.sjsq.dao.impl.BookDaoImpl;
import com.sjsq.po.Book;
import com.sjsq.service.BookService;
import java.util.ArrayList;
import java.util.List;
/**
 * @author shuijianshiqing
 * @date 2020/5/20 23:42
 * Book的Service实现层
 */
public class BookServiceImpl implements BookService {
    private BookDao dao = new BookDaoImpl();
    /**
     * 查询所有图书信息
     * @param book
     * @return
     */
    @Override
    public List<Book> select(Book book) {
        StringBuffer sql = new StringBuffer("select * from book where 1 = 1 ");
        List<Object> list = new ArrayList<Object>();
        if(book != null){
            // 根据bookid来查找对应的书籍
            if(book.getBookid() != null && book.getBookid() != 0){
                sql.append(" and bookid = ?");
                list.add(book.getBookid());
            }
        }
        return dao.select(sql.toString(),list.toArray());
    }
    /**
     * 根据图书编号查询信息
     * @param book
     * @return
     */
    @Override
    public Book getBook(Book book) {
        if(book.getBookid() != null && book.getBookid() != 0){
            return dao.getBook(book.getBookid());
        }
        return null;
    }
}

CardServiceImpl

package com.sjsq.service.impl;
import com.sjsq.dao.CardDao;
import com.sjsq.dao.impl.CardDaoImpl;
import com.sjsq.po.Book;
import com.sjsq.po.Card;
import com.sjsq.po.User;
import com.sjsq.service.CardService;
import java.util.List;
/**
 * @author shuijianshiqing
 * @date 2020/5/29 23:01
 */
public class CardServiceImpl implements CardService {
    private CardDao dao = new CardDaoImpl();
    @Override
    public List<Card> getCard(Integer id) {
        if(id != null){
            return dao.getCard(id);
        }
        return null;
    }
    /**
     * 添加信息到购物车
     * @param user
     * @param book
     * @param booknum
     * @return
     */
    @Override
    public boolean addCard(User user, Book book, Integer booknum) {
        return dao.addCard(user,book,booknum);
    }
    /**
     * 根据Book查询booknum
     * @param book
     * @return
     */
    @Override
    public Integer getBookNum(Book book) {
        if(dao.getBookNum(book) == null){
            return 0;
        }
        return dao.getBookNum(book);
    }
}

UserServiceImpl

package com.sjsq.service.impl;
import com.sjsq.dao.UserDao;
import com.sjsq.dao.impl.UserDaoImpl;
import com.sjsq.po.User;
import com.sjsq.service.UserService;
import java.util.ArrayList;
import java.util.List;
/**
 * @author shuijianshiqing
 * @date 2020/5/20 22:56
 */
public class UserServiceImpl implements UserService {
    // 定义dao对象
    private UserDao dao = new UserDaoImpl();
    /**
     * 查询用户信息
     * @param user
     * @return
     */
    @Override
    public List<User> selectUser(User user) {
        StringBuffer sql = new StringBuffer("select * from user where 1 = 1 ");
        List<Object> list = new ArrayList<Object>();
        if(user != null){
            // 按照姓名查询
            if(user.getName() != null && !user.getName().equals("")){
                sql.append(" and name = ?");
                list.add(user.getName());
            }
            // 按照email查询
            if(user.getEmail() != null && !user.getEmail().equals("")){
                sql.append(" and email = ?");
                list.add(user.getEmail());
            }
        }
        // 交给dao层处理逻辑
        return dao.selectUser(sql.toString(),list.toArray());
    }
}

BaseDao

package com.sjsq.utils;
import java.sql.*;
/**
 * @author shuijianshiqing
 * @date 2020/5/19 23:08
 * 数据交互层dao层
 */
public class BaseDao {
    private static String driver = "com.mysql.cj.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost/book_management?serverTimezone=UTC";
    private static String user = "root";
    private static String password = "admin";
    /**
     * 连接数据库的方法
     * @return
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public static Connection getConnection() throws ClassNotFoundException, SQLException {
        // 加载数据库驱动
        Class.forName(driver);
        Connection con = DriverManager.getConnection(url,user,password);
        return con;
    }
    /**
     * 关闭数据库的方法
     * @param con
     * @param ps
     * @param rs
     */
    public static void close(Connection con, PreparedStatement ps, ResultSet rs){
        // 关闭资源,避免出现异常
        if(rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(ps != null){
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(con != null){
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 设置增删改的方法
     * @param sql
     * @param arr
     * @return
     */
    public static boolean addUpdateDelete(String sql,Object[] arr){
        Connection con = null;
        PreparedStatement ps = null;
        try {
            // 第一步:连接数据库
            con = BaseDao.getConnection();
            // 第二步:预编译
            ps = con.prepareStatement(sql);
            // 第三步:设置值
            if(arr != null && arr.length !=0){
                for (int i = 0; i < arr.length; i++) {
                    ps.setObject(i+1,arr[i]);
                }
            }
            int count = ps.executeUpdate();
            if(count > 0){
                return true;
            }else{
                return false;
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }
    public static void main(String[] args){
        try {
            BaseDao.getConnection();
            System.out.println("---测试数据库链接成功---");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}


3.所用到的包


jquery-3.4.1.min.js


mysql-connector-java-8.0.15.jar


四、数据库


SQL

/*
 Navicat Premium Data Transfer
 Source Server         : MySQL
 Source Server Type    : MySQL
 Source Server Version : 80013
 Source Host           : localhost:3306
 Source Schema         : book_management
 Target Server Type    : MySQL
 Target Server Version : 80013
 File Encoding         : 65001
 Date: 01/06/2020 21:45:17
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for book
-- ----------------------------
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book`  (
  `bookid` int(11) NOT NULL AUTO_INCREMENT,
  `bookname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `price` decimal(10, 2) NULL DEFAULT NULL,
  `author` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `picture` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `publish` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`bookid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of book
-- ----------------------------
INSERT INTO `book` VALUES (1, '水浒传', 23.00, '施耐庵', NULL, '人民文学出版社');
INSERT INTO `book` VALUES (2, '西游记', 25.00, '吴承恩', NULL, '人民文学出版社');
INSERT INTO `book` VALUES (3, '红楼梦', 35.00, '曹雪芹', NULL, '人民文学出版社');
INSERT INTO `book` VALUES (4, '三国演义', 28.00, '罗贯中', NULL, '人民文学出版社');
-- ----------------------------
-- Table structure for card
-- ----------------------------
DROP TABLE IF EXISTS `card`;
CREATE TABLE `card`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `bookid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `booknum` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of card
-- ----------------------------
INSERT INTO `card` VALUES (11, '1', '2001', '1', 2);
INSERT INTO `card` VALUES (12, '1', '2001', '3', 1);
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `password` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `email` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 54 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '2001', '111111', '312321@qq.com', '31321');
INSERT INTO `user` VALUES (53, '张三', '1', '', '');
SET FOREIGN_KEY_CHECKS = 1;


五、感悟及商务合作


1.感悟


手写日志太麻烦,所以后来出现了Log4j,Jsp中Java代码和Html混在一起,太不方便了,所以后来有了Servlet和各种框架,所以这也就是框架的意义。简单的事情重复做,做到一定的熟练度,把它抽象出来,形成公用的方法,就有了框架。还要数据连接,JDBC里面有很多重复性代码,后续就有了Mybatis等等。


2.项目参考及搭建


备注1:关于如何搭建项目之前文章里面已经写过,请移步:

IDEA创建Web项目详细说明

备注2:若您想添加管理员增删改查功能,请移步:

图书管理系统-添加管理员增删改查功能

备注3:感谢别先生的博客,是参照他的博客实现的。

别先生的博客地址

备注4:要是侵犯到您的权益,请通知我删除此文章。


六、其他


1.其他系统实现


Java+JSP系统系列实现

Java+JSP实现学生图书管理系统

Java+JSP实现学生信息管理系统

Java+JSP实现用户信息管理系统


Java+Servlet+JSP系统系列实现

Java+Servlet+JSP实现航空订票系统

Java+Servlet+JSP实现新闻发布系统

Java+Servlet+JSP实现图书管理系统

Java+Servlet+JSP实现停车场管理系统

Java+Servlet+JSP实现房屋租赁管理系统

Java+Servlet+JSP实现学生选课管理系统

Java+Servlet+JSP实现宠物诊所管理系统

Java+Servlet+JSP实现学生宿舍管理系统

Java+Servlet+JSP实现学生信息管理系统

Java+Servlet+JSP实现学生成绩管理系统1

Java+Servlet+JSP实现学生成绩管理系统2


Java+SSM系统系列实现

Java+SSM+JSP实现宠物商城系统

Java+SSM+Easyui实现网上考试系统

Java+SSM+Layui实现学生成绩管理系统

Java+SSM+Bootstrap实现学生信息管理系统


Java+SSH系统系列实现

Java+SSH+Bootstrap实现在线考试系统

Java+SSH+JSP实现医院在线挂号系统


Java+Springboot系统系列实现

Java+Springboot+H-ui实现营销管理系统

Java+Springboot+Bootstrap实现网上商城系统


JavaSwing+Mysql系统系列实现

Java+Swing实现斗地主游戏

Java+Swing实现图书管理系统

Java+Swing实现医院管理系统

Java+Swing实现考试管理系统

Java+Swing实现酒店管理系统

Java+Swing实现超市管理系统

Java+Swing实现网上订餐系统

Java+Swing实现电影购票系统

Java+Swing实现仓库管理系统1

Java+Swing实现仓库管理系统2

Java+Swing实现进销存管理系统

Java+Swing实现通讯录管理系统

Java+Swing实现停车场管理系统

Java+Swing实现学生宿舍管理系统

Java+Swing实现学生选课管理系统

Java+Swing实现学生成绩管理系统

Java+Swing实现学校教材管理系统

Java+Swing实现学校教务管理系统

Java+Swing实现企业人事管理系统

Java+Swing实现电子相册管理系统

Java+Swing实现学生信息管理系统1

Java+Swing实现学生信息管理系统2

Java+Swing实现自助取款机(ATM)系统


JavaSwing+Txt系统系列实现

Java+Swing实现超市管理系统-TXT存储信息

Java+Swing实现宠物商店管理系统-TXT存储信息

Java+Swing实现自助取款机(ATM)系统-TXT存储信息


2.获取源码


源码包含管理员对用户的增删改查

Java+JSP+Mysql实现Web图书管理系统


3.部署项目


请点击以下链接,部署你的项目。

IDEA如何导入JavaWeb项目超详细教程


4.备注


如有侵权请联系我删除。


5.鸡汤


牛奶会有的,面包会有的,技术都是千锤百炼出来的。




相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
22天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL是关系型DB,依赖预定义的表格结构,适合结构化数据和复杂查询,但扩展性有限。NoSQL提供灵活的非结构化数据存储(如JSON),无统一查询语言,但能横向扩展,适用于大规模、高并发场景。选择取决于应用需求和扩展策略。
112 1
|
4天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
3月前
|
架构师 Java 关系型数据库
一线架构师开发总结:剖析并发编程+JVM性能,深入Tomcat与MySQL
每一个程序员都有自己清晰的职业规划和终极目标,无论之后是继续钻研技术,还是转管理岗、产品岗,都是需要自己具备有一定的实力,换句话说技术要牛逼。架构师,是很多程序员的终极目标,而成为一名Java架构师,那就需要对自己自身有一定要求,不仅技术能力要过硬,还需要有组织能力和提出解决方案的能力。那么作为架构师,需要掌握哪些技术呢?
一线架构师开发总结:剖析并发编程+JVM性能,深入Tomcat与MySQL
|
3月前
|
缓存 关系型数据库 MySQL
|
3月前
|
XML 安全 Java
JavaWeb有机果蔬商城系统有机蔬菜水果商城系统(分前后台javaWeb+jsp+jstl+css+js+mysql)
JavaWeb有机果蔬商城系统有机蔬菜水果商城系统(分前后台javaWeb+jsp+jstl+css+js+mysql)
|
3月前
|
Java 数据库 数据安全/隐私保护
基于javaWeb电子商城前后台管理系统网上商城系统(spring+mysql+jsp+jstl+css)
基于javaWeb电子商城前后台管理系统网上商城系统(spring+mysql+jsp+jstl+css)
|
3月前
|
前端开发 JavaScript Java
基于JavaWeb机票订购系统(含前后台)(Java+spring+jsp+bootstrap+mysql)
基于JavaWeb机票订购系统(含前后台)(Java+spring+jsp+bootstrap+mysql)
|
3月前
|
前端开发 JavaScript BI
基于Servlet房屋租赁管理信息系统(含前后台)(Java+Servlet+jsp+mysql)
基于Servlet房屋租赁管理信息系统(含前后台)(Java+Servlet+jsp+mysql)
|
3月前
|
前端开发 JavaScript Java
基于servlet+jsp+mysql实现的java web校园车辆管理系统
基于servlet+jsp+mysql实现的java web校园车辆管理系统
|
16天前
|
监控 JavaScript 前端开发
《理解 WebSocket:Java Web 开发的实时通信技术》
【4月更文挑战第4天】WebSocket是Java Web实时通信的关键技术,提供双向持久连接,实现低延迟、高效率的实时交互。适用于聊天应用、在线游戏、数据监控和即时通知。开发涉及服务器端实现、客户端连接及数据协议定义,注意安全、错误处理、性能和兼容性。随着实时应用需求增加,WebSocket在Java Web开发中的地位将更加重要。