基于 Spring Boot 博客系统开发(十二)

基于 Spring Boot 博客系统开发(十二)

本系统是简易的个人博客系统开发,为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。🌿🌿🌿
基于 Spring Boot 博客系统开发(十一)👈👈

系统设置实现

设置用户基本信息、友情链接、个性化头像。

在这里插入图片描述

创建表和添加数据,执行下面SQL

-- ----------------------------
-- Table structure for t_config
-- ----------------------------
DROP TABLE IF EXISTS `t_config`;
CREATE TABLE `t_config` (
  `id` bigint(20) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `value` varchar(255) DEFAULT NULL,
  `description` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of t_config
-- ----------------------------
INSERT INTO `t_config` VALUES ('1', 'site_name', 'CrazyStone', '用户昵称');
INSERT INTO `t_config` VALUES ('2', 'site_profile', '个人博客小站,主要发表关于Java、Spring、Docker等相关文章', '个人简介');
INSERT INTO `t_config` VALUES ('3', 'site_tags', 'Java后台开发', '兴趣标签');
INSERT INTO `t_config` VALUES ('4', 'site_theme', '1', '博客主题');
INSERT INTO `t_config` VALUES ('5', 'social_weibo', null, '微博账号');
INSERT INTO `t_config` VALUES ('6', 'social_zhihu', null, '知乎账号');
INSERT INTO `t_config` VALUES ('7', 'social_github', null, 'Github账号');
INSERT INTO `t_config` VALUES ('8', 'social_twitter', null, 'Twitter账号');
INSERT INTO `t_config` VALUES ('9', 'head_pic', '/assets/img/me.jpg', '头像');

添加静态HTML

setting.html

<!DOCTYPE html>
<html lang="en">
<head>
    <title>系统设置</title>
    <th:block th:include="admin/include :: common-css" />
</head>
<body class="fixed-left">
<div id="wrapper">
    <th:block th:include="admin/include :: header-menu(6)" />
    <div class="content-page">
        <div class="content">
            <div class="container">
                <div class="row">
                    <div class="col-sm-12">
                        <h4 class="page-title">系统设置</h4>
                    </div>
                    <div class="col-md-6">
                        <div class="panel panel-color panel-primary">
                            <div class="panel-heading">
                                <h3 class="panel-title">基本信息</h3>
                            </div>
                            <div class="panel-body">
                                <form class="form-horizontal" role="form" >
                                    <div class="form-group">
                                        <label class="col-md-3 control-label">用户昵称</label>
                                        <div class="col-md-9">
                                            <input type="text" class="form-control" name="site_name" placeholder="用户昵称"
                                                    required="required" aria-required="true"/>
                                        </div>
                                    </div>
                                    <div class="form-group">
                                        <label class="col-md-3 control-label">个人简介</label>
                                        <div class="col-md-9">
                                            <input type="text" class="form-control" name="site_profile" placeholder="个人简介"
                                                    required="required" aria-required="true"/>
                                        </div>
                                    </div>
                                    <div class="form-group">
                                        <label class="col-md-3 control-label">兴趣标签</label>
                                        <div class="col-md-9">
                                            <input type="text" class="form-control" name="site_tags" placeholder="兴趣标签"
                                                    required="required" aria-required="true"/>
                                        </div>
                                    </div>

                                    <div class="form-group">
                                        <label class="col-md-3 control-label">博客主题</label>
                                        <div class="col-md-9">
                                            <select name="site_theme" class="form-control">
                                                <option value="default" >默认主题</option>
                                            </select>
                                        </div>
                                    </div>

                                    <div class="clearfix pull-right">
                                        <button type="button" class="btn btn-primary waves-effect waves-light" onclick="saveSetting()">
                                            保存设置
                                        </button>
                                    </div>
                                </form>
                            </div>
                        </div>
                    </div>

                    <div class="col-md-6">
                        <div class="panel panel-color panel-inverse">
                            <div class="panel-heading">
                                <h3 class="panel-title">链接设置</h3>
                            </div>
                            <div class="panel-body">
                                <form  class="form-horizontal" role="form">
                                    <div class="form-group">
                                        <label class="col-md-3 control-label">微博账号</label>
                                        <div class="col-md-9">
                                            <input type="text" class="form-control" name="social_weibo"
                                                   placeholder="微博账号,不输入则不显示"/>
                                        </div>
                                    </div>
                                    <div class="form-group">
                                        <label class="col-md-3 control-label">知乎账号</label>
                                        <div class="col-md-9">
                                            <input type="text" class="form-control" name="social_zhihu"
                                                   placeholder="知乎账号,不输入则不显示"/>
                                        </div>
                                    </div>
                                    <div class="form-group">
                                        <label class="col-md-3 control-label">Github账号</label>
                                        <div class="col-md-9">
                                            <input type="text" class="form-control" name="social_github"
                                                    placeholder="Github账号,不输入则不显示"/>
                                        </div>
                                    </div>
                                    <div class="form-group">
                                        <label class="col-md-3 control-label">Twitter账号</label>
                                        <div class="col-md-9">
                                            <input type="text" class="form-control" name="social_twitter"
                                                    placeholder="Twitter账号,不输入则不显示"/>
                                        </div>
                                    </div>
                                    <div class="clearfix pull-right">
                                        <button type="button" class="btn btn-inverse waves-effect waves-light"
                                                onclick="saveIndiviSetting()">
                                            保存设置
                                        </button>
                                    </div>
                                </form>
                            </div>
                        </div>
                    </div>

                    <div class="clearfix"></div>

                    <div class="col-md-6">
                        <div class="panel panel-color panel-success">
                            <div class="panel-heading">
                                <h3 class="panel-title">个性化设置</h3>
                            </div>
                            <div class="panel-body">
                                <form  class="form-inline" role="form">
                                    <div class="form-group col-md-12 ">
                                        <input id="uploadImage" style="display: none" class="form-control" accept="image/*" placeholder="文件上传" required="" aria-required="true" type="file"/>
                                        <button type="button" class="btn btn-success waves-effect waves-light m-l-10" onclick="$('#uploadImage').click()">头像上传</button>
                                    </div>

                                    <br>
                                    <div class="form-group col-md-12 " style="text-align: center;margin: 10px;">
                                        <img id="previewImage" src="/assets/img/me.jpg" alt="预览图片">
                                    </div>
                                    <div class=" pull-right">
                                        <button type="button" class="btn btn-success waves-effect waves-light"
                                                onclick="saveIndiviSetting()">
                                            保存设置
                                        </button>
                                    </div>
                                </form>
                            </div>
                        </div>
                    </div>

                </div>

            </div>
        </div>
    </div>
</div>

<th:block th:include="admin/include :: footer" />
<th:block th:include="admin/include :: common-js" />
<script type="text/javascript">
    document.getElementById('uploadImage').addEventListener('change', function(e) {
        var file = e.target.files[0];
        var reader = new FileReader();
        var previewImage = document.getElementById('previewImage');

        reader.onload = function(e) {
            var img = new Image();
            img.onload = function() {
                var MAX_WIDTH = 220; // 设置最大宽度
                var width = img.width;
                var height = img.height;

                // 检查图片是否需要缩放
                if (width > MAX_WIDTH) {
                    var ratio = MAX_WIDTH / width;
                    width = MAX_WIDTH;
                    height *= ratio; // 保持纵横比
                }

                var canvas = document.createElement('canvas');
                canvas.width = width;
                canvas.height = height;

                var ctx = canvas.getContext("2d");
                ctx.drawImage(img, 0, 0, width, height);

                var dataurl = canvas.toDataURL("image/png");
                previewImage.src = dataurl;
            }

            img.src = e.target.result;
        }

        if (file) {
            reader.readAsDataURL(file);
        } else {
            previewImage.src = "";
        }
    });
</script>

</body>
</html>

添加处理请求的方法,返回setting模板

浏览器访问 http://127.0.0.1:8080/admin/setting 效果和上面第一张图一样

@Controller
@RequestMapping("/admin")
public class SettingController {

    @RequestMapping("/setting")
    public String setting(){
        return "admin/setting";
    }
}

代码生成器生成 t_config 表的基础代码,并将其放入项目中指定目录

在这里插入图片描述

后端查询数据,准备数据回显

 	@RequestMapping("/setting")
    public String setting(Model model){
        //查询数据列表
        List<Config> list = configService.list();
        Map<String, String> configMap = new HashMap<>();
        //遍历list放到map容器中
        list.forEach(config -> {
            configMap.put(config.getName(),config.getValue());
        });
        model.addAttribute("configMap",configMap);
        return "admin/setting";
    }

基本信息数据的回显

使用thymeleaf表达式 显示数据

th:value=“${configMap.site_name}”

<div class="col-md-6">
    <div class="panel panel-color panel-primary">
        <div class="panel-heading">
            <h3 class="panel-title">基本信息</h3>
        </div>
        <div class="panel-body">
            <form class="form-horizontal" role="form" >
                <div class="form-group">
                    <label class="col-md-3 control-label">用户昵称</label>
                    <div class="col-md-9">
                        <input type="text" class="form-control" name="site_name" placeholder="用户昵称"
                               th:value="${configMap.site_name}"     required="required" aria-required="true"/>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-md-3 control-label">个人简介</label>
                    <div class="col-md-9">
                        <input type="text" class="form-control" name="site_profile" placeholder="个人简介"
                               th:value="${configMap.site_profile}"     required="required" aria-required="true"/>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-md-3 control-label">兴趣标签</label>
                    <div class="col-md-9">
                        <input type="text" class="form-control" name="site_tags" placeholder="兴趣标签"
                               th:value="${configMap.site_tags}"    required="required" aria-required="true"/>
                    </div>
                </div>

                <div class="form-group">
                    <label class="col-md-3 control-label">博客主题</label>
                    <div class="col-md-9">
                        <select name="site_theme" class="form-control"  >
                            <option value="1" th:selected="${configMap.site_theme eq '1'}" >默认主题</option>
                            <option value="2" th:selected="${configMap.site_theme eq '2'}" >灰色主题</option>
                        </select>
                    </div>
                </div>

                <div class="clearfix pull-right">
                    <button type="button" class="btn btn-primary waves-effect waves-light" onclick="saveSetting()">
                        保存设置
                    </button>
                </div>
            </form>
        </div>
    </div>
</div>

基本信息回显效果

在这里插入图片描述

添加保存设置后端方法

	@RequestMapping("/config/edit")
    @ResponseBody
    public AjaxResult edit(HttpServletRequest request){
        //获取请求参数的map对象
        Map<String, String[]> parameterMap = request.getParameterMap();
        //遍历map的key集合,获取key和value,并使用service保存到数据库
        for (String key : parameterMap.keySet()) {
            String value = request.getParameter(key);
            //根据key查询配置对象
            QueryWrapper<Config> query = new QueryWrapper<>();
            query.eq("name",key);
            Config one = configService.getOne(query);
            //修改值并执行更新
            if(one !=null){
                one.setValue(value);//设置新的值
                configService.updateById(one);//执行更新
            }
        }
        return AjaxResult.success();
    }

添加点击保存设置的事件JS方法,调用后端方法/admin/config/edit执行修改操作

    function saveSetting(){
        $.ajax({
            type: 'post',
            url: '/admin/config/edit',
            data: $("#baseInfoFormId").serialize(),
            async: false,
            dataType: 'json',
            success: function (result) {
                if(result.code == 0){
                    alert("更新成功")
                }else{
                    alert(result.msg)
                }
            }
        });
    }

点击保存设置,弹出消息框

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/663234.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

热门新游 2024 植物大战僵尸杂交版 Mac 版本下载安装详细教程

最近植物大战僵尸杂交版可谓是非常的火&#xff0c;好多主播都在播这款游戏&#xff0c;我一个 Mac 党也想玩&#xff0c;可奈何该游戏目前只有 PC 版本&#xff0c;经过一番折腾终于在我的 Mac 上安装上了该游戏&#xff0c;分享给大家 其实安装过程也很简单&#xff0c;只需…

深度学习 --- stanford cs231 编程作业(如何在chrome中安装Google colab)

stanford cs231 编程作业(如何开始你的colab编程&#xff09; 斯坦福231n的所有作业都要求在colab里面做&#xff0c;colab可以为你提供免费的云计算。实际上在他的官网中也有关于如何安装colab的详细说明视频。 https://youtu.be/DsGd2e9JNH4https://youtu.be/DsGd2e9JNH4 我这…

GPU学习(1)

一、为什么要GPU 我们先看一个基本的神经网络计算 YF(x)AxB 这就是一次乘法一次加法 &#xff0c;也叫FMA&#xff0c;(fused multiply-add) 如果矩阵乘&#xff0c;就是上面的那个式子扩展一下&#xff0c;所以又用了这张老图 比如你要多执行好几个yAxB&#xff0c;可能比较简…

AI图书推荐:使用GitHub Copilot和ChatGPT辅助的Python编程

使用Python编写计算机程序变得更加简单了&#xff01;使用像GitHub Copilot和ChatGPT这样的AI辅助编码工具&#xff0c;将你的想法快速转化为应用程序。人工智能已经改变了我们编写计算机程序的方式。有了像Copilot和ChatGPT这样的工具&#xff0c;你可以用简单的英语描述你想要…

【docker】Docker的基本指令和HTML/PYTHON/C++的简单创建示例

目录 &#x1f30a;1. 什么是 Docker&#xff1f; &#x1f30a;2. Docker 安装 &#x1f30a;3. Docker基本指令 &#x1f30a;4. Docker 创建示例【联网情况】 &#x1f30d;4.1 示例&#xff1a;HTML &#x1f30d;4.2 示例&#xff1a;Python 脚本 &#x1f30d;4.3…

四信云-设备维保管理系统上线,实现设备全生命周期管理

在当今的制造业中&#xff0c;设备是企业生产的核心要素&#xff0c;是企业竞争力的基石。 随着企业发展规模不断扩大&#xff0c;设备数量急速增长&#xff0c;传统的手工管理方式已经无法满足企业需求&#xff0c;设备管理系统的出现则填补了市场需求空白&#xff0c;其目标…

5-21作业

流式域套接字 服务器端实现 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #include <semaphore.h> #include <…

【运维项目经历|015】:Nginx Web服务性能提升与优化项目

目录 项目名称 项目背景 项目目标 项目成果 我的角色与职责 我主要完成的工作内容 本次项目涉及的技术 本次项目遇到的问题与解决方法 本次项目中可能被面试官问到的技术性问题 问题1&#xff1a;本次项目的人员配置&#xff1f; 问题2&#xff1a;本次项目的周期&am…

PX4使用yolo仿真环境搭建

文章目录 前言一、修改机架sdf文件二、安装yolo三、运行 前言 ubuntu20.04 PX4 1.13.3 已配置好PX4 ROS gazebo环境 一、修改机架sdf文件 将双目相机加到仿真的iris机架上 修改下图文件 添加如下&#xff1a; <include><uri>model://stereo_camera</uri>…

tensorrt输出结果为nan的解决方案

系统环境&#xff1a; ubuntu20.04 python3.9 cuda11.8 cudnn8.9.7.29 torch1.13.1cu117&#xff08;pip install torch1.13.1&#xff09; 1.针对cuda版本查了一下trt支持版本&#xff0c;发现V10和V8版本都支持 本着用新不用旧标准&#xff0c;果断下载了8.6&#xff0c…

iptables+SNAT+DNAT

一、Linux包过滤防火墙概述 主要工作在网络层&#xff0c;针对IP数据包&#xff0c;体现在对包内的IP地址、端口、协议等信息的处理上 以下两种称呼都可以表示Linux防火墙 netfilter 位于Linux内核中的包过滤功能体系 成为Linux防火墙的“内核态” 是内核的一部分&#xff0…

誉天Linux云计算架构师就业班要学习哪些内容?

课程设计思路&#xff1a; 根据十多年来毕业学员的就业和反馈&#xff0c;对数百名学员的就业回访;Linux运维&#xff0c;云计算&#xff0c;高并发&#xff0c;分布式&#xff0c;容器&#xff0c;云原生&#xff0c;自动化等是目前市场上就业情况最好&#xff0c;需求量最大&…

SQL查询-电商数据案例

假设我们现在需要是某电商平台数据分析&#xff0c;由于业务需要&#xff0c;需要用sql取数 包括&#xff0c;Python连接数据库到模拟电商数据库&#xff0c;到sql场景查询 1,Python连接SQL数据库 以下是使用Python连接MySQL数据库并进行操作的示例代码&#xff1a; import…

【python】python 全国5A级景区数据采集与pyecharts可视化(源码+数据+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Liunx上安装MySQL

该文章是介绍的是 Ubuntu 操作系统&#xff0c;如果有使用 CentOS 的小伙伴不会的话可以私信我~ 1. 查找安装包 apt list |grep "mysql-server" 2. 安装mysql sudo apt install mysql-server 注意&#xff1a;安装的到最后一步会问你是否继续&#xff0c;输入y / Y就…

python内存马学习

python内存马学习 python内存马学习 python内存马学习环境搭建和复现分析payloadFlask 请求上下文管理机制bypass高版本flask内存马的利用before_request**after_request** teardown_requesterrorhandler相关例题H&NCTF 2024 ezFlask python内存马 环境搭建和复现 from fl…

SQL问题的常用信息收集命令及解决思路 |OceanBase应用实践

面对SQL问题&#xff0c;大家的常用的分析思路是&#xff1a; 一、问题是否源于SQL本身&#xff1f;是的话需进行SQL调优。 二、SQL语句本身无误&#xff0c;但执行效果并未达到我们的预期效果。 检查当前的服务器负载状况&#xff0c;例如CPU利用率、内存占用、IO读写等关键…

图书管理系统——java基础(源码)后续引入数据库,Swing程序设计,支持关注!后续更新……

学了java想要练手&#xff0c;图书管理系统这个项目非常适合你 项目需求大体想法&#xff1a; 能够查看书籍&#xff0c;借阅书籍&#xff0c;打印书籍等功能。输出姓名后能进入为普通用户模式或者管理员模式。 各类包之间协同合作之间关系讲解。 做这个项目的始终是为了对…

新疆 | 金石商砼效率革命背后的逻辑

走进标杆企业&#xff0c;感受名企力量&#xff0c;探寻学习优秀企业领先之道。 本期要跟砼行们推介的标杆企业是新疆砼行业的龙头企业&#xff1a;新疆兵团建工金石商品混凝土有限责任公司&#xff08;以下简称&#xff1a;新疆金石&#xff09;。 从年产80万方到120万方&am…

计算机图形学入门03:基本变换

变换(Transformation)可分为模型(Model)变换和视图(Viewing)变换。在3D虚拟场景中相机的移动和旋转&#xff0c;角色人物动画都需要变换&#xff0c;用来描述物体运动。将三维世界投影变换到2D屏幕上成像出来&#xff0c;也需要变换。 1.二维变换 1.1缩放变换 如上图所示&…