Spring之路(26)–Spring Restful+jQuery+Bootstrap开发博客系统实例(前端开发篇)

简介: 本文目录1. 概述2. 配置访问静态资源3. 建立html网页4. 浏览博客功能实现5. 删除博客实现6. 新增博客实现7. 编辑博客实现

1. 概述

本篇来实现下前端部分,采用jQuery发起ajax请求访问后端Restful的API,Bootstrap主要负责显示样式部分。


2. 配置访问静态资源

之前我们已经配置了/*作为SpringMVC拦截的请求路径,这样导致我们的网页等静态资源实际上也无法访问了。


所以需要开放一个目录作为静态资源目录,对此目录的请求不被拦截,我们在WebContent下新建static目录存放html页面等静态资源。然后配置springmvc-config.xml,添加如下mvc:resources配置:


<context:component-scan base-package="org.maoge.restfulblog" />

<mvc:annotation-driven />

<!--静态资源映射-->

   <mvc:resources mapping="/static/**" location="/static/"/>


3. 建立html网页

此处不再需要使用jsp,直接建立一个简单的html网页,同时引入jquery和Bootstrap相关的js文件。


建立在static目录下新建blog.html网页代码如下:


<!DOCTYPE html>

<html>


<head>

<meta charset="UTF-8">

<title></title>

<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"

 integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

</head>


<body>

<nav class="navbar navbar-inverse">

 <div class="container-fluid">

  <ul class="nav navbar-nav">

   <li><a href="#" onclick="viewBlogs()">浏览博客</a></li>

   <li><a href="#" onclick="addBlog()">新增博客</a></li>

  </ul>

 </div>

</nav>

<table id="blogTable" class="table table-striped">

 <tr>

  <th>ID</th>

  <th>标题</th>

  <th>作者</th>

  <th>操作</th>

 </tr>

</table>

</body>

<!--jQuery-->

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>

<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->

<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"

integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous">

</script>

<script>

</script>


</html>


4. 浏览博客功能实现

调用restful接口获取博客列表:


   //浏览博客

function viewBlogs() {

 var row = "";

 //先清空表格

 $('#blogTable').find("tr:gt(0)").remove();

 $.ajax({

  type: "GET",

  url: "/restfulblog/blog",

  dataType: "json",

  contentType: "application/json; charset=utf-8",

  success: function (res) {

   console.log(res);

   $.each(res, function (i, v) {

    row = "<tr>";

    row += "<td>" + v.id + "</td>";

    row += "<td>" + v.title + "</td>";

    row += "<td>" + v.author + "</td>";

    row +=

     "<td><a class='btn btn-primary btn-sm' href='#' οnclick='editBlog(" + v.id +

     ")'>编辑</a>";

    row +=

     "<a class='btn btn-danger btn-sm' href='#' οnclick='deleteBlog(" + v.id +

     ")'>删除</a></td>";

    row += "</tr>";

    $("#blogTable").append(row);

   });

  },

  error: function (err) {

   console.log(err);

  }

 });

}


说白了就是用jQuery先去请求后端接口,然后修改前端页面显示,此时后端足够简单,前端是比较繁琐的,但是功能也实现了。具体效果如下:

image.png

5. 删除博客实现

咱们先实现比较简单的删除博客,在浏览博客功能实现时,我们已经预留了删除博客的js方法,此时我们完善下。注意因为我们封装的后端删除接口没有返回值,所以此处也不要设置dataType。


//删除

function deleteBlog(id) {

 $.ajax({

  type: "DELETE",

  url: "/restfulblog/blog/" + id,

  //dataType: "json",//由于删除方法无返回值,所以此处注释掉

  contentType: "application/json; charset=utf-8",

  success: function () {

   //删除后重新加载

   viewBlogs();

  },

  error: function (err) {

   console.log(err);

  }

 });

}


6. 新增博客实现

使用前端控制流程后,我们可以在一个页面中实现新增博客,而不用啰里啰嗦的跳转页面了,此处我们使用Boostrap弹窗来显示新增博客的表单。


点击新增后弹出弹窗:


   //新增

function addBlog() {

 $('#blogAddModal').modal('show');

}


同时在html中新增弹窗:


<!-- 新增弹窗 -->

<div id="blogAddModal" class="modal fade" tabindex="-1" role="dialog">

 <div class="modal-dialog" role="document">

  <div class="modal-content">

   <div class="modal-header">

    <h4 class="modal-title">新增博客</h4>

   </div>

   <div class="modal-body" style="padding:16px;">

    <!-- 新增博客的表单 -->

    <form>

     <div class="form-group">

      <label>标题</label>

      <input name="title" type="text" class="form-control">

     </div>

     <div class="form-group">

      <label>内容</label>

      <textarea name="content" class="form-control" rows="3"></textarea>

     </div>

     <div class="form-group">

      <label>作者</label>

      <input name="author" type="text" class="form-control">

     </div>

    </form>

   </div>

   <div class="modal-footer">

    <button type="button" class="btn btn-primary" onclick="addBlogSubmit()">提交</button>

    <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>

   </div>

  </div>

 </div>

</div>


最后点击提交后,首先要调用restful api保存新增的博客信息,然后关闭弹窗,最后还要加载最新的博客信息,代码如下:


//新增提交

function addBlogSubmit() {

 var data = {

  id: '',

  title: $("#blogAddModal input[name='title']").val(),

  author: $("#blogAddModal input[name='author']").val(),

  content: $("#blogAddModal textarea[name='content']").val()

 };

 $.ajax({

  type: "POST",

  url: "/restfulblog/blog",

  //dataType: "json",

  contentType: "application/json; charset=utf-8",

  data: JSON.stringify(data), //需要将对象转换为字符串提交

  success: function () {

   //新增后重新加载

   viewBlogs();

   //关闭弹窗

   $('#blogAddModal').modal('hide');

  },

  error: function (err) {

   console.log(err);

  }

 });

}


具体效果如下:

image.png

7. 编辑博客实现

点击编辑后,首先查询博客相关信息并显示到页面上,可用户编辑完成后将修改提交到后端,然后加载最新博客列表。


首先在html中新增编辑弹窗:


<!-- 编辑弹窗 -->

<div id="blogEditModal" class="modal fade" tabindex="-1" role="dialog">

 <div class="modal-dialog" role="document">

  <div class="modal-content">

   <div class="modal-header">

    <h4 class="modal-title">编辑博客</h4>

   </div>

   <div class="modal-body" style="padding:16px;">

    <!-- 编辑博客的表单 -->

    <form>

     <div class="form-group">

      <label>ID</label>

      <input name="id" type="text" class="form-control" readonly>

     </div>

     <div class="form-group">

      <label>标题</label>

      <input name="title" type="text" class="form-control">

     </div>

     <div class="form-group">

      <label>内容</label>

      <textarea name="content" class="form-control" rows="3"></textarea>

     </div>

     <div class="form-group">

      <label>作者</label>

      <input name="author" type="text" class="form-control">

     </div>

    </form>

   </div>

   <div class="modal-footer">

    <button type="button" class="btn btn-primary" onclick="editBlogSubmit()">提交</button>

    <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>

   </div>

  </div>

 </div>

</div>


点击编辑按钮后,查询博客信息,并显示到编辑弹窗中:


//编辑

function editBlog(id) {

 //查询博客信息

 $.ajax({

  type: "GET",

  url: "/restfulblog/blog/" + id,

  dataType: "json",

  contentType: "application/json; charset=utf-8",

  success: function (res) {

   console.log(res);

   //为编辑框赋值

   $("#blogEditModal input[name='id']").val(res.id);

   $("#blogEditModal input[name='title']").val(res.title);

   $("#blogEditModal input[name='author']").val(res.author);

   $("#blogEditModal textarea[name='content']").val(res.content);

   //显示编辑弹窗

   $('#blogEditModal').modal('show');

  },

  error: function (err) {

   console.log(err);

  }

 });

}


最后,当编辑完成提交时,应将信息更新到后端,然后加载最新的列表,代码如下:


//编辑提交

function editBlogSubmit() {

 var data = {

  id: $("#blogEditModal input[name='id']").val(),

  title: $("#blogEditModal input[name='title']").val(),

  author: $("#blogEditModal input[name='author']").val(),

  content: $("#blogEditModal textarea[name='content']").val()

 };

 $.ajax({

  type: "PUT",

  url: "/restfulblog/blog/" + data.id,

  //dataType: "json",

  contentType: "application/json; charset=utf-8",

  data: JSON.stringify(data), //需要将对象转换为字符串提交

  success: function () {

   //新增后重新加载

   viewBlogs();

   //关闭弹窗

   $('#blogEditModal').modal('hide');

  },

  error: function (err) {

   console.log(err);

  }

 });

}

相关文章
|
前端开发 JavaScript 安全
7.6K Star Shadcn Admin:颜值与实力并存的后台管理系统,前端开发者的新宠!
"基于 Shadcn UI 和 Vite 打造的现代化管理后台,开箱即用的响应式设计 + 无障碍访问,让后台开发从未如此优雅!" —— 来自 GitHub 7.6K 星认证
3524 26
|
11月前
|
JSON 监控 前端开发
AMIS:百度开源的前端低代码神器,18.4k star 背后的开发效率提升利器
AMIS(前端低代码框架)是百度开源的低代码前端框架,基于纯 JSON 配置即可生成完整后台页面,包括表单、表格、图表、CRUD 列表,支持可视化拖拽编辑。,星标数已达 18.4k,百度内部已沉淀超过 5 万个页面,广泛应用于审核系统、数据管理后台、模型监控等落地场景
1823 0
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
1274 1
|
10月前
|
人工智能 前端开发 JavaScript
前端工程化演进之路:从手工作坊到AI驱动的智能化开发
前端工程化演进之路:从手工作坊到AI驱动的智能化开发
1037 19
前端工程化演进之路:从手工作坊到AI驱动的智能化开发
|
存储 Java 数据库
Spring Boot 注册登录系统:问题总结与优化实践
在Spring Boot开发中,注册登录模块常面临数据库设计、密码加密、权限配置及用户体验等问题。本文以便利店销售系统为例,详细解析四大类问题:数据库字段约束(如默认值缺失)、密码加密(明文存储风险)、Spring Security配置(路径权限不当)以及表单交互(数据丢失与提示不足)。通过优化数据库结构、引入BCrypt加密、完善安全配置和改进用户交互,提供了一套全面的解决方案,助力开发者构建更 robust 的系统。
521 0
|
10月前
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
398 5
|
存储 人工智能 Java
Spring AI与DeepSeek实战四:系统API调用
在AI应用开发中,工具调用是增强大模型能力的核心技术,通过让模型与外部API或工具交互,可实现实时信息检索(如天气查询、新闻获取)、系统操作(如创建任务、发送邮件)等功能;本文结合Spring AI与大模型,演示如何通过Tool Calling实现系统API调用,同时处理多轮对话中的会话记忆。
2972 57
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
767 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
|
存储 人工智能 自然语言处理
用Spring AI搭建本地RAG系统:让AI成为你的私人文档助手
想让AI帮你读懂PDF文档吗?本文教你用Spring AI和Ollama搭建一个本地RAG系统,让AI成为你的私人文档助手。无需GPU,无需云端API,只需几行代码,你的文档就能开口说话了!
2200 2
|
消息中间件 存储 Java
📨 Spring Boot 3 整合 MQ 构建聊天消息存储系统
本文详细介绍了如何使用Spring Boot 3结合RabbitMQ构建高效可靠的聊天消息存储系统。通过引入消息队列,实现了聊天功能与消息存储的解耦,解决了高并发场景下直接写入数据库带来的性能瓶颈问题。文章首先分析了不同MQ产品的特点及适用场景,最终选择RabbitMQ作为解决方案,因其成熟稳定、灵活路由和易于集成等优势。接着,通过Docker快速部署RabbitMQ,并完成Spring Boot项目的配置与代码实现,包括生产者发送消息、消费者接收并处理消息等功能。最后,通过异步存储机制,既保证了消息的即时性,又实现了可靠持久化。
1019 0
📨 Spring Boot 3 整合 MQ 构建聊天消息存储系统