Code

WebSocket需要区分请求(Http请求,WebSocket请求)

是的,你遇到的问题可能是因为路由冲突或者地址重复的原因。具体来说,WebSocket 和普通的 HTTP 请求(如你提到的 /front/chat)都使用相同的路径,可能导致服务器无法正确区分这两者。

为什么会出现这个问题?

  1. 路由冲突: 如果你在同一个地址上同时使用了 WebSocket 和 HTTP 请求,那么在处理请求时,服务器无法区分你是要建立一个 WebSocket 连接,还是发起一个普通的 HTTP 请求。这会导致请求无法被正确路由到相应的处理逻辑。

  2. WebSocket 的路径: WebSocket 实际上是一个协议升级的过程(从 HTTP 协议升级到 WebSocket 协议),因此它会通过相同的 URL 路径进行连接。在很多情况下,如果你用 /front/chat 作为 WebSocket 连接的路径,可能会和普通的 HTTP 路由发生冲突。

解决方案

  1. 为 WebSocket 使用单独的路径: 你可以为 WebSocket 配置一个专门的路径,以避免和普通 HTTP 路由冲突。比如,改成 /ws/chat,这就可以专门用于 WebSocket 连接,避免和 /front/chat 冲突。

    示例:

    @Configuration
    public class WebSocketConfig implements WebSocketConfigurer {
        @Override
        public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
            registry.addHandler(chatHandler(), "/ws/chat")
                    .setAllowedOrigins("*");  // 设置允许跨域的来源
        }
        
        @Bean
        public WebSocketHandler chatHandler() {
            return new ChatWebSocketHandler();  // 处理聊天逻辑
        }
    }
  2. 使用 @RequestMapping@GetMapping 来区分: 如果你希望 /front/chat 继续作为一个普通的 HTTP 路由,也可以通过 HTTP 请求处理类和 WebSocket 类的路径区分来避免冲突。

  3. 确保 WebSocket 连接的协议和请求的协议正确: 确保你使用的是 ws://wss://(如果使用 HTTPS)协议来建立 WebSocket 连接,而不是 http://https://

总结来说,WebSocket 的路径和普通的 HTTP 请求路径最好分开,避免混淆。你可以尝试将 WebSocket 地址设置为一个新的路径,比如 /ws/chat,并确保它和其他 HTTP 路由没有重复。

如何将Spring Boot框架的应用部署到Linux(CentOS)服务器上?

1. 使用maven插件,将项目打包。jar包或者war包,jar包集成tomcat,war包需要自己安装
2. 从CentOS官网下载CentOS安装包
3. 在VMware Fusion中创建一个虚拟机,选择CentOS安装包进行安装,选择最小化安装
4. 在VMware Fusion中登录CentOS,查看IP地址,在本地电脑ssh连接(好操作)
5. 虚拟机中安装jdk21(项目开发用的jdk21)(https://refusea.com/?p=1424)
6. 安装mysql8(这个的解决方法就是加上这个就可以了:禁掉GPG验证检查–nogpgcheck (https://developer.aliyun.com/article/983775)
7. 关闭mysql密码权限要求,修改mysql密码(改项目密码总报错,于是决定修改服务器mysql密码)(https://www.jianshu.com/p/b437566ccf98)
8. navicat连接mysql(方便),创建数据库
9. 项目中server.address=0.0.0.0 监听所有端口
10. 服务器中开放端口8080,防火墙
11. scp上传jar包
12. java -jar运行

二,八,十,十六进制转换

最近开始准备专业课了,突然发现最经典的进制转换以前学的又忘了,特地写篇博客记录下,以便以后需要的时候再用。

比着B站的一个UP主上传的视频,整理了一下。

再整理下那个UP主的视频。

二⇌八

二⇌十

二⇌十六

(这个可以考虑2⇌10-⇌16)

八⇌十

八⇌十六

十⇌十六

___________________________
补充一下,我发现完全可以直接用是十进制进行中转就可以了,
二进制转十进制,就是依次计算2^0*对应的数+2^1*对应的数。。。就可以了
八进制转十进制,就是依次计算8^0*对应的数+8^1*对应的数。。。就可以了
十六进制转十进制,就是依次计算16^0*对应的数+16^1*对应的数。。。就可以了
然后相对应的,
十进制转化为对应的进制,只需要对应的短除进制数就可以了,
需要二进制,就十进制数短除2,
需要八进制,就十进制数短除8,
需要十六进制,就十进制数短除16。
这样借助十进制来中转,就方便多了。

WordPress日期链接别忘开启伪静态

刚刚还沉浸在网站搬家的快乐,结果一打开别的文章,忽然发现怎么404了?

后来才突然想到应该是忘记设置伪静态规则了,于是赶忙将原网站的伪静态复制过来,于是所有文章的链接,重新满血复活了!

location /
{
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;

MySQL更换8.0版本,无法连接,提示“2002 – Can’t connect to server on ‘127.0.0.1(36)”错误

一直手痒痒,想着把电脑的软件都更新到最新的版本。

以前的学校一直都是MySQL 5.7的版本教学,所以电脑一直装着MySQL 5.7的版本,但这个学校看到学校机房都是MySQL 8.0的版本,并且毕业设计的项目也几乎都是MySQL 8.0的项目,于是便决定花点时间,把MySQL 5.7版本换到8.1.0版本。

按照网上的搜到的更换教程,备份好原有数据库后,依次复制了几行命令,在终端App里运行,然后MySQL 5.7就卸载掉了。

从官网下载了MySQL 8.1.0的安装包,按照安装指引,一步步向下走就可以了。

但是安装完后,在Navicat Premium里想要建立连接后,发现无法连接,提示提示“2002 – Can’t connect to server on ‘127.0.0.1(36)”错误.

思来想去也没找到解决的办法,就在想,是不是原有MySQL 5.7版本的my.cnf文件干扰了,于是把它删除掉,没想到就成功了!

但又考虑到,MySQL 8.0版本该如何设置默认字符UTF8呢?通过查询了解到,原来MySQL8.0版本已经默认就是UTF8了,这样就不用再去弄配置文件了,省心了。

Java导入包“java.swing.*”报错,切换JDK1.8又无法使用var

为更好的贴合课本代码学习,使用var,所以切换到了自己的笔记本电脑上进行编程,但JDK版本是17了,能用var缺无法导入javax.swing.*的包。


在互联网各种搜索有,还是无法很好的找到解决方法,有的朋友提到换到JDK版本1.7或者1.8但这样的话,var这个语法糖就用不了了,最后终于发现了问题。


在module-info.java中加入一句“requires java.desktop;”class中导入包就不会报错了,就可以顺利进行了!

CentOS 由图形界面与命令行界面的切换

初入CentOS,一般都是安装的图形界面,方便操作,不会让自己感到那么生疏。

可是如果想要拟真服务器上的界面,变成命令行模式,该怎么弄呢?

由图形界面切换到命令行界面,快捷键:

Mac:Control+Option+F2(需要按着fn才有f2)

Windows:Ctrl+Alt+F2

由命令行界面切换到图形界面,输入:startx

回车就可以了。

CentOS虚拟机连不上网怎么办?

这几天放假了,想在家还是跑几个项目玩一玩,电脑刚刚重装系统了,所以好多东西需要重新配置。

VMware跑CentOS虚拟机的时候,ip addr命令获取不到地址,Mac也Ping不到虚拟机的地址,这就不行了,就不能ssh连接虚拟机了,想了一下,是不是虚拟机还不能联网,于是试了一下虚拟机Ping外网地址,果然也失败了,由此确定了虚拟机没有联网。

感觉不放心,切换到了图形界面,用浏览器试了一下,确实,还是不行

就开始找原因啊,虚拟机的网络配置里我已经打开了NAT模式,那就配置的问题,

思来想去,还是找不到解决方法,就决定去搜索引擎上查一下,找到了很多解决方法,但看着那些各种操作的解决方法就头疼啊,想着当时学的时候也没弄过什么啊,就决定去设置里看看,果然原来是Network的Wired没有打开导致的,打开后,就正常了

点击按钮,打开,然后可以联上网了

虚拟机也能Ping通外网了。

可以开心的ssh连接虚拟机折腾了,哈哈!

AJAX的Put方法使用。

AJAX一般常用的是Post和Get请求,今天突然学习的时候遇到了Put的请求,

一直没看懂前端JS是怎么写的,没搞明白前端的逻辑。

后来仔细研究了下,终于是差不多了。

首先,AJAX是不能直接发送put请求的。

在Tomcat中,Connector的默认方法是Post,如果不是Post方法,数据将无法封装到Parameter中去,后端就无法获得数据。

因此可以通过使用HttpPutFormContentFilter (com.sptingframework 5.1以后使用FormContentFilter)过滤器。

通过从request中获取request,getInputStream()的流 inputMessage,然后将流中的数据封装到Map中 MultiValueMap 最后将数据重新封装到request对象中去,完成put数据的封装。

从而实现Toncat的Request不满足的PUT请求类似数据封装层对象这一点操作。

<filter>
    <filter-name>FormContentFilter</filter-name>
    <filter-class>org.springframework.web.filter.FormContentFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>FormContentFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>