JavaWeb项目【源码】——图书项目2.0:Tomcat版本 & Vue + axios + Servlet + Lombok + JDBC + MySQL技术栈实现


项目简介

本项目是一个简单的图书管理系统,本博客在tomcat中采用servlet 和 jsp技术实现如下功能:

  • 用户登陆,输入用户名,密码,登陆成功后保存到session中,跳转到首页;
  • 用户注册,输入相关信息,以及验证码,注册成功到登陆页面;
  • 用户信息修改,昵称修改,密码修改;
  • 图书信息页面:展示所有信息,到数据分页显示,到分页展示+模糊查询+只看自己的书;
  • 新增图书信息,新增一条图书信息,类型下拉框选择,书名,简介输入,session中获取用户名和id,数据插入数据库中,再回到图书信息页面;
  • 删除图书信息:只能删除自己的书,删除成功再回到图书信息页面;
  • 修改图书信息:原有的信息进行回显,修改成功后再回到图书信息页面;
  • 图书类型分类统计:按照图书类型进行统计,数量为0显示0

在这里插入图片描述

思考 & 改进

1.Jsp都是同步请求---->改成异步Ajax【完成】

在这里插入图片描述

Java网络开发(Asynchronous异步)—— 从 Jsp 到 Ajax 的 axios 到 vue & 同步请求 到 异步请求

2.前端用Jsp技术落后----->用Vue框架【完成】

在这里插入图片描述

前端基础(JavaScript)——基础语法(变量,分支…)& Json对象【重要】& 函数定义 & 事件

前端基础(Vue)——基础语法({{}}, v-model, :src=“imagSrc“, v-for)& 事件@click & 属性和方法(this.add() + this.name)

3.架构问题:配置数据和Java代码耦合;SQL语句和Java代码耦合

在这里插入图片描述

4.架构问题:servlet只能处理一个请求

在这里插入图片描述

用Vue和异步Ajax改造项目

在这里插入图片描述
Java网络开发(Tomcat异步分页+增删改查)——从同步到异步 & 从jsp 到 js + axios + vue 实现 数据分页显示 & 数据增删改查

前端的修改和升级

1.固定的响应格式

import com.alibaba.fastjson.JSON;
import com.tianju.entity.ResData;
resp.getWriter().write(JSON.toJSONString(
                new ResData(200, "登陆成功", newUser)));

2.name 变成 v-model 进行双向绑定

        <%--    要把原有的书名,和简介,以及类型信息显示出来--%>
        书名:<input type="text" v-model="opus.name" ><br>
        简介:<input type="text" v-model="opus.intro" ><br>
        类型:

        <%--    用forEach把类型信息拼出来--%>
<%--     v-model="opus.typeId" 双向绑定--%>
        <select v-model="opus.typeId">
                <%--            如果根据id查询到的书籍信息,和这里拼的某一个类型信息一致,则设置成selected ,实现默认选中--%>
                <option v-for="types in bookTypeList" :value="types.id">{{types.name}}</option>
        </select><br>

3.下拉框选中–:value=“type.id” +v-model=“companyDb.typeId”

    <select v-model="companyDb.typeId">
        <option value="">请选择</option>
        <option v-for="type in typeList" :value="type.id">{{type.name}}</option>
    </select>

4.vue导包固定写法

<head>
    <title>修改公司信息</title>
    <link rel="stylesheet" href="/day06/bootstrap/css/bootstrap.css">
    <script src="/day06/js/axios.min.js"></script>
    <script src="/day06/js/jquery-3.5.1.js"></script>
    <script src="/day06/bootstrap/js/bootstrap.js"></script>
    <script src="/day06/js/vue.min-v2.5.16.js"></script>

</head>

5.script固定写法

	let app = new Vue({
        // 选择操作的div区域
        el:"#app",
        // 数据区
        data:{},
        // 方法区
        methods:{},
        // 文档加载之后就执行
        created(){},
        // 整个页面全部加载完成后再执行
        mounted(){},
    })

6.axios的get请求

            axios.get("/day06/types/list/vue?name="+"柯基")
                .then(response=>{
                    let resp = response.data;
                    console.log(resp);
                },error=>{
                    console.log(error)
                })

7.axios的post请求—let params = new URLSearchParams()

let params = new URLSearchParams();
params.append("username",this.username);
params.append("password",this.password);
params.append("rePassword",this.rePassword);
params.append("gender",this.gender);
params.append("birthday",this.birthday);
params.append("imgCode",this.imgCode);
console.log(params);
axios.post("/day06/comUser/register/vue",params)
      .then(response=>{
           let resp = response.data;
           console.log(resp);
          if (resp.code==200)
          {
              // 成功,跳转回到list页面
              location.href="/day06/compMess/listVue.jsp"
          }
          else
          {
              alert(resp.msg);
          }
       },error=>{
           console.log(error)
       })

8.前端美化table 和 btn

<table class="table-condensed table-hover table-striped table-responsive table-cell table-row-cell table-view table-bordered">

class="btn btn-primary btn-sm"

后端的响应

1.后端改成resp响应

        // 4.new PageInfo对象,共享页数等,以及查询到的数据
        List<Company> list = companyService.queryByLikeNameLimit(pageNum, pageSize,name);
        PageInfo<Company> pageInfo = new PageInfo<>(pageNum, pageSize, total, pages, list);

        resp.getWriter().write(JSON.toJSONString(
                new ResData(200, "ok", pageInfo)
        ));

思考 & 改进

3.架构问题:配置数据和Java代码耦合;SQL语句和Java代码耦合

在这里插入图片描述

4.架构问题:servlet只能处理一个请求

在这里插入图片描述

5.响应方式为响应一个Json,但是servlet写法很繁琐

resp.getWriter().write(JSON.toJSONString(new ResData(

        // 4.new PageInfo对象,共享页数等,以及查询到的数据
        List<Company> list = companyService.queryByLikeNameLimit(pageNum, pageSize,name);
        PageInfo<Company> pageInfo = new PageInfo<>(pageNum, pageSize, total, pages, list);

        resp.getWriter().write(JSON.toJSONString(
                new ResData(200, "ok", pageInfo)
        ));

6.在servlet中接收前端传的参数都是String,用的时候还需要类型转换

        String name = req.getParameter("name");
        String typeId = req.getParameter("typeId");
        String birthday = req.getParameter("birthday");

当用的时候,如果想要的类型其实不是String,还需要自己转换格式

        // 日期类型转换
        private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            comUser.setBirthday(sdf.parse(birthday));
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        
        // int类型转换
        opus.setTypeId(Integer.parseInt(typeId));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Node.js是一种基于Chrome V8引擎的JavaScript运行时环境,适用于构建高性能、可扩展的网络应用程序。它使得开发者可以使用JavaScript语言在服务器端编写应用程序,并且具有非阻塞I/O、异步事件驱动等优势,大大提高了应用程序的性能和速度。 Vue是一种轻量级、易学易用的JavaScript框架,由Evan You开发。Vue提供了一种组件化的开发方式,使得开发者可以将复杂的UI界面分割成独立的、可重复利用的组件,从而提高了代码的可维护性和重用性。Vue还具有响应式数据绑定、虚拟DOM等特性,使得开发者可以更快速地创建交互式Web应用程序。 MySQL是一款开源的关系型数据库,在Web开发中应用广泛。MySQL支持多种数据存储引擎,包括InnoDB、MyISAM、Memory等,能够满足不同类型的应用程序需要。MySQL还具有ACID事务、复制、检索等功能,能够保证数据的一致性和安全性。 在Web开发中,Node.js、VueMySQL的结合非常常见。Node.js可以用来创建服务器端应用程序,处理请求和响应,同时可以使用MySQL进行数据存储和访问。Vue可以用来创建客户端应用程序,实现前端UI交互、展示数据等功能。通过Vue的Ajax请求和后端Node.js应用程序结合,可以实现前后端数据的传输和交互。因此,Node.js、VueMySQL的结合可以实现前后端分离、部分数据交互,可以缩短Web应用程序的开发周期和提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Perley620

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值