博客系统的后端设计(八) - 实现发布博客功能

news2025/1/9 1:17:16

文章目录

  • 发布博客
    • 1. 约定前后端交互接口
    • 2. 服务器代码
    • 3. 客户端代码
    • 4. 出现的问题

发布博客


在原来的编辑页面点击发布文章按钮,是不会有什么效果的。
这是因为此时还不能实现前后端的交互。

1. 约定前后端交互接口

请求使用 POST,路径是 /blog
title=这是标题&content=这是正文

请求中要有 body,按照 form 表单的方式添加进去。

响应使用 HTTP/1.1 302
跳转到列表页:Location: blog.list.html

在一篇博客当中,它有 blogId、title、content、userId、postTime 属性。
只有 title 和 content 是需要自己获取的,blogId 是自增主键,数据库会自己生成;
userId 是作者信息,看提交博客的用户是谁,直接从会话中拿即可;
postTime 是当前的时间。

2. 服务器代码


在之前实现好的 BlogServlet 类中重写一个 doPost 方法。

 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     // 发布博客
     // 读取请求,构造 Blog 对象,插入数据库即可
     HttpSession httpSession = req.getSession(false);
     if (httpSession == null) {
         // 未登录
         resp.setContentType("text/html; charset=utf8");
         resp.getWriter().write("当前未登录,无法发布博客!!!");
         return;
     }
     User user = (User) httpSession.getAttribute("user");
     if (user == null) {
         resp.setContentType("text/html; charset=utf8");
         resp.getWriter().write("当前未登录,无法发布博客!!!");
         return;
     }
     // 确定登陆之后,就可以把作者给拿到了

     // 获取博客标题和正文
     String title = req.getParameter("title");
     String content = req.getParameter("content");
     if (title == null || "".equals(title) || content == null || "".equals(content)) {
         resp.setContentType("text/html; charset=utf8");
         resp.getWriter().write("当前提交的数据有误,标题或正文为空!!!");
         return;
     }

     // 构造 Blog 对象
     Blog blog = new Blog();
     blog.setTitle(title);
     blog.setContent(content);
     blog.setUserId(user.getUserId());
     // 发布时间在 java 中生成/数据库都可以
     blog.setPostTime(new Timestamp(System.currentTimeMillis()));
     // 插入数据库
     BlogDao blogDao = new BlogDao();
     blogDao.add(blog);

     // 跳转到博客列表页
     resp.sendRedirect("blog.list.html");
 }

3. 客户端代码


将之前的写的编辑区容器代码改为以下代码。

<!-- 编辑区容器 -->
<div class="blog-edit-container">
    <form action="blog" method="post">
        <!-- 博客标题编辑区 -->
        <div class="title">
            <input type="text" id="title" placeholder="请输入文章标题" name="title">
            <input type="submit" id="submit" value="发布文章">
        </div>

        <!-- 博客编辑器 是为了和 markdrow 编辑器对接而设置的-->
        <div id="editor">
            <textarea name="content" style="display: none"></textarea>
        </div>
    </form>
</div>

4. 出现的问题


接下来启动服务器,在用户登录后发布一个博客。此时可以看到虽然自动跳转到了列表页,但是出现乱码了。



发布博客后发现乱码了,此时考虑乱码是提交的时候乱的,还是获取的时候乱的。

如果是提交的时候乱的,只需要看一下数据库是不是乱的;此处应该是提交的的时候乱的,
因为提交功能是新写的,还没有测试过,获取博客已经测试过了。


查看数据库后可以看到此时的数据库是乱的。


解决:

先将乱码的记录删除,之后在指定字符集。





此时文章发布成功。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MVVM封装

MVVM封装 一.MVVM1.依赖2.mvvm封装3.业务层调用1.MainService2.MainRepository3.MainViewModel4.TestActivity 4.独立运行main业务模块 一.MVVM 1.依赖 config.gradle //jetpackdef lifecycle_version "2.5.1"libLivedata "androidx.lifecycle:lifecycle-li…

谁懂啊!性能测试还能这么快学好。。。。。。

目录 前言 &#xff08;一&#xff09;用户视角看响应时间: &#xff08;二&#xff09;运维视角看系统的使用率 mysql等数据库关注指标 JVM&#xff08;针对java技术线&#xff09;&#xff1a;Java应用程序的CPU和内存使用率 系统最大处理的任务数&#xff1a; &#…

如何完善企业性能测试流程?详解测试计划编写与实现

目录 前言&#xff1a; 性能测试流程 性能测试计划 实例代码 总结 前言&#xff1a; 在现代技术领域中&#xff0c;性能测试是非常重要的一个流程。无论是应用程序、网站、数据库等&#xff0c;都需要经过严格的性能测试&#xff0c;以确保其能够在各种条件下保持稳定的性…

RabbitMq指南:彻底解决消息可靠性问题以及实现延迟队列

提到 RabbitMq&#xff0c;想必大家都不陌生&#xff0c;我们经常使用它来进行服务之间的异步通信&#xff0c;如短信&#xff0c;日志&#xff0c;邮件发送等业务场景都可以使用 RabbitMq 实现&#xff0c;但在使用的过程中我们会遇到消息丢失的问题&#xff0c;也会有延迟消费…

SSM(Spring篇)

Spring Spring的IOC和DI Spring简介 介绍 Spring的分层Java SE\EE应用full-stack轻量级开源框架&#xff0c;以IOC&#xff08;Inverse Of Control&#xff1a;反转控制&#xff09;和AOP&#xff08;Aspect Oriented Programing&#xff1a;面向切面编程&#xff09;为内核…

AOP参数校验

场景 在面试中&#xff0c;可能会问道AOP的适用场景有哪些&#xff0c;参数校验就是其中的一个例子 在Java使用登录or注册功能时&#xff0c;会需要用户提交邮箱手机号等信息&#xff0c;此时前端可能会做参数校验&#xff0c;以下代码是基于后端的参数校验&#xff0c;可适用…

不推荐你做网工,就因为这一个字

大家好&#xff0c;我是许公子。 我平时闲暇的时候&#xff0c;很喜欢在网上逛逛&#xff0c;看看大家最近都在聊什么。 这几天看到个问题。 网络工程师&#xff0c;累吗&#xff1f; 里面有不少回答觉得&#xff0c;网工这行&#xff0c;太累了。 “ 做实施的时候&#xf…

【学习记录22】git删除远程主分支和文件

项目分支太多&#xff0c;代码冗余太多&#xff0c;项目也没正式启用&#xff0c;想着全部清空重新来一遍&#xff0c;参考了网上的步骤都不太理想&#xff0c;全部走不通&#xff0c;搜出来大部分都是类似下面的操作。经过一段时间折腾终于删掉并清空。因此记录一下以备后期查…

小白入门SRC漏洞挖掘的正确姿势

前言 有不少阅读过我文章的伙伴都知道&#xff0c;我从事网络安全行业已经好几年&#xff0c;积累了丰富的经验和技能。在这段时间里&#xff0c;我参与了多个实际项目的规划和实施&#xff0c;成功防范了各种网络攻击和漏洞利用&#xff0c;提高了安全防护水平。 也有很多小…

Azure Services -5.25-summary

文章目录 1. Resources2.Data processing process3.Virtual network and public ip address4. Kubernetes services5. Yaml file first , we enter the homepage of microsoft azure, and we can see a lot of servicse provided by the microsoft azure , 1. Resources accou…

SSM(SpringMVC篇)

SpringMVC SpringMVC简介 概述 SpringMVC是一种基于java的实现MVC设计模型的请求驱动类型的轻量级web框架&#xff0c;属于SpringFrameWork的后续产品&#xff0c;已经融合在Spring Web Flow中 SpringMVC已经成为目前最主流的框架之一&#xff0c;并且随着Spring3.0的发布&…

Excel高手与普通人之间的差距,全在这个比Access还简单的工具

用“Excel”还是用“Python”&#xff1f; 很多职场人&#xff0c;在工作的大部分时间都会和“Excel”打交道&#xff0c;普通人&#xff0c;我们用“Excel”的录入和统计等&#xff0c;很多功能是不会用的。 只有一部分人群&#xff0c;会“Excel”的高级操作&#xff0c;比…

毫米波雷达模块在自动驾驶系统中的关键功能

随着自动驾驶技术的快速发展&#xff0c;毫米波雷达模块作为一项关键技术&#xff0c;为自动驾驶系统提供了重要的感知和决策能力。毫米波雷达模块通过实时探测和跟踪周围环境中的车辆、行人和障碍物&#xff0c;提供精确的距离和速度信息&#xff0c;帮助自动驾驶车辆做出准确…

【干货】IPV6 知识点与OSPFv3 原理与配置

今天和海翎光电的小编咱们一起聊聊IPv6的报头。下图是IPV4和IPV6的对比图&#xff0c;个人感觉还是比较直观的&#xff0c;我们就以这张图来梳理IPv6的报头内容。 一、IPv4的报头内容 首先&#xff0c;我们先重新回顾一下IPv4的报头内容&#xff0c;对于这个内容比较熟悉的朋友…

第十二章 异常(Exception)

一、异常的概念&#xff08;P444&#xff09; Java 语言中&#xff0c;将程序执行中发生的不正常情况称为“异常”。&#xff08;开发过程中的语法错误和逻辑错误不是异常&#xff09; 执行过程中所发生的异常事件可分为两大类&#xff1a; &#xff08;1&#xff09;Error&…

Three.js--》实现3d圣诞贺卡展示模型

目录 项目搭建 初始化three.js基础代码 加载环境模型 设置环境纹理 添加水面并设置阴影效果 实现幽灵小球的运动 实现相机切换和文字切屏 实现漫天星星和爱心样式 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目…

QT 一个project调用另外一个project

1.随便建两个project, test888 (test888 里面随便写一个类如CHPerson), test999 2.把test888放在test999目录下 3.在test888里面手动创建一个test888.pri文件&#xff0c;里面内容如下: INCLUDEPATH $$PWDHEADERS \$$PWD/CHPerson.h \SOURCES \$$PWD/CHPerson.cpp \4.在tes…

集权设施攻防兵法:实战攻防之Exchange篇

一、黑客视角下的Exchange Microsoft Exchange Server是由微软开发的企业级邮件和协作平台。它提供了强大的电子邮件、日历、联系人和任务管理功能&#xff0c;使组织能够高效地进行沟通和协作。然而&#xff0c;它也时常受到攻击。 攻击者喜欢攻击Exchange服务器有两个重要原…

基于遗传算法的LQR控制器优化设计(matlab实现)

以下内容大部分来源于《MATLAB智能算法30个案例分析》&#xff0c;仅为学习交流所用。 5.1 理论基础 5.1.1 LQR控制 假设线性时不变系统的状态方程模型为 可以引入最优控制的性能指标&#xff0c;即设计一个输入量u,使得 为最小。其中&#xff0c;Q和R分别为状态变量和输…

JavaWeb ( 十 ) SpringMVC

4.Spring MVC Spring MVC是Spring提供的一个实现了Web MVC设计模式的轻量级Web框架。 三层架构分为表述层&#xff08;或表示层)、业务逻辑层、数据访问层&#xff0c;表述层表示前台页面和后台servlet 4.1.Spring MVC优点&#xff1a; ① 基于原生的Servlet&#xff0c;通过…