目录

  • 我的学习过程
  • 我的学习心路
  • 热加载配置
  • bug问题总结

我的学习过程

前天写的client-server聊天项目写完后,今天进行了调试。我用到的是out目录下的server.class文件和client.class文件。
先后启动两个命令行窗口来进行测试的。
使用java server启动服务端窗口。
再使用java client启动客户端窗口。

客户端发送四次信息

ni
hao
zhong
guo

客户端发给服务端的信息正常情况下,服务端接收后屏幕打印一律显示了str。

客户端打印的四次信息

str
str
str
str

我的学习心路

客户端的发送的具体信息,全是str。为什么呢?

我的操作心路
首先是服务端显示异常,所以定位到server.java的代码。定位到问题代码如下:

// 有bug的java代码
System.out.println("str");

我的操作心路
这个bug简单,就是不小心加了双引号,导致直接打印了字符串str。修正!我用的是gradle管理项目,进行了clean、build、rebuild project后,继续使用两个命令行窗口进行测试。

我的心里路程
问题没有得到解决。我想想会是什么原因呢?明明已经改过来了。该怎么解决呢?我或许可以尝试到idea里打断点进行调试,看看是不是有其他代码问题。

我的操作心路
说干就干,在idea里配置两个tomcat试试,学习了tomcat的热加载配置。

热加载配置

找到tomcat的目录下找到conf/server.xml文件,打开,
在host节点下增加Context节点。

<Host name="localhost"...
...
<Context path="项目路径" docBase="/【某目录名】" debug="0" privileged="true" reloadable="true"/>
...
</Host>

属性概念:

debug=“0”
debug是设定debug level, 0表示提供最少的信息,9表示提供最多的信息。

privileged=“true”
privileged设置为true的时候,才允许Tomcat的Web应用使用容器内的Servlet。

reloadable=“true”
会让修改生效,该选项适合调试。

我的心里路程
我发现,上面参数里【某目录名】是建在webapps目录下,目录里面需要放置项目编译后的class文件和项目的jar包。但是同样class文件在目录中存在了2个地方。

一个是out/production/classes目录下
另一个build/classes/java/main目录下

我的心里路程
老师的课程用的是out目录下的class文件,我也是使用out目录下的,是什么原因导致修正不生效呢?为什么有2个地方的class?

我的操作心路
百度一下看看:推测出,由于每次使用的是out目录下的class文件,但clean、build、rebuild project并没有修正out文件下class文件。是每次都不起作用呢?还是一定时间间隔后起作用?有待考证*1

我的操作心路
使用tomcat热加载后,问题得倒了解决。

我的心里路程
推测两种可能:

  1. reloadable="true"可以对out目录下的class文件修正。
  2. 或者热加载使用的是build目录下的class文件。
    有待考证*2
    标记:学习下gradle的目录结构或源网站的说明。

考证*1
我的考证结果:有待考证*1处思考有误。
我的考证思路:
在Server.java中添加打印语句,观察两处class文件是否添加该打印语句进行来验证。

两种build验证:

  1. idea上方导航栏build(clean project、build project、rebuild project)
  2. idea窗口右侧边栏Gradle-Tasks下build(clean、build)

第一种build下:针对的是out目录下的class
Server.java修改后,

  1. 若未进行clean project,则build project和rebuild project都未能修正out目录下的Server.class。
  2. 若先进行了clean project,则build project和rebuild project都能修正out目录下的Server.class。

第二种build下:针对的是build/classes/java/main目录下的class
Server.java修改后,

  1. clean直接会删除build/classes/java/main整个目录和Server.class文件。
  2. 直接build就可以修正build/classes/java/main目录下的Server.class文件。

考证*2
我的考证结果:有待考证*2处思考有误。热加载使用的是out目录下的class文件。
我的考证思路:
利用两种build的不同点使两处的class文件具备不同的打印语句。观察运行后窗口的打印语句。

out目录下的Server.class:
System.out.println("-------bad1----");

build/classes/java/main目录下的Server.class:
System.out.println("-------bad2----");

Server.java:
System.out.println("-------good----");

启动tomcat,运行Server.java,窗口打印结果:

-------good----

out目录下的Server.class内打印语句发生变化:
System.out.println("-------good----");

out目录下的class能修正,是否与reloadable="true"有关呢?
我的心里路程
把reloadable设置false试试。重复上面操作。
结果:不影响out目录下的class的修正。

百度了解:这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用。

我的思考
设为false时,第一次启动tomcat也会调一次监测吗?或者说服务器重启了会重新加载更新一次,重启与这个属性无关?
设为true时,启动tomcat,运行Server.java,修改Server.java,保存重新编译(修正了out目录下的class)。Server.java并没有重新加载。啊哦!想错了。监视的是WEB-INF/classes和WEB-INF/lib目录下class文件。与out目录下的class无关。想错了,哈哈哈。

bug问题总结

我错在使用的是第二种的clean,针对的是build/classes/java/main目录下的class。未使用第一种的clean project再build project,针对的是out目录下的class。

gradle下bug修正后问题仍存在解决思路相关推荐

  1. Linux下安装mysql后无法启动的解决方法

    在Linux下安装完mysql后,mysql服务无法启动,总是failer.       这个不是因为mysql安装失败,而是因为启动了SELinux.       进入/etc/selinux/co ...

  2. ideapad720s在接通电源情况下,关机后自动重启的解决办法

    win10, ideapad720s, 在接通电源情况下,关机后自动重启的解决办法 本文参考:[求助] Win10系统联想U430P笔记本关机后自动重启的解决方法! 步骤1:点击笔记本左下角的&quo ...

  3. win11安装后黑屏怎么解决

    有不少小伙伴反应自己给电脑安装了win11系统后,都出现了一些win11黑屏怎么办,该如何解决win11黑屏问题呢?遇到这些情况的时候,我们可以尝试以下的方法解决,下面小编就给大家分享下win11安装 ...

  4. CodeDom Assistant CodeDom的强大工具, 有些BUG修正了下,发到CodePlex,大家有需要的可以看看...

    一.第一次编译并调整代码 二.修正泛型无法生成CodeDOM代码 后期我会用到这个工具, 如果有需要修改, 会及时修改和改进, 有兴趣的可以参与进来. http://codedomassistant. ...

  5. macOS关闭SIP后,仍无法修改/usr文件夹下文件

    发现问题 MacOS 升级到Big Sur后,删除多余的python3文件,发现写不到磁盘,会报OSError: [Errno 30] Read-only file system的错误.经过了解,在M ...

  6. UNITY 5.4.0发行说明中文版(不包含bug修正部分)

    原文地址:https://unity3d.com/cn/unity/whats-new/unity-5.4.0 Unity5.4.0F3 发行说明中文版(不包含bug修正部分) 因为工作需要自己临时翻 ...

  7. 77 ~And, two stars meet again~ RC汉化补丁[BUG修正]

    [遊戲名稱/Name]:77 -And, two stars meet again- [遊戲廠商/Company]:Whirlpoor [發售日期/Sale date]:2009/07/31 Whir ...

  8. store下拉框同步_关于选择主下拉框后~后面的下拉框跟着同步一起变化的问题~~...

    关于选择主下拉框后~后面的下拉框跟着同步一起变化的问题~~ 代码很简单~4个下拉框~想要实现的效果就是~主下拉框选择了"赵子龙",后面3个下拉框当前选项也同步成"赵子龙& ...

  9. matlab 修正后阿尔法,修正后的阿尔法均值滤波器Alpha.ppt

    修正后的阿尔法均值滤波器Alpha 数字图像处理Digital Image Processing 第6章 图像复原(Image Restoration) 第6章 图像复原(Image Restorat ...

最新文章

  1. timestamp 数据类型在 sql_mode 主从不一致引起的不同步问题解决
  2. gl.vertexAtteib3f P42 讲数据传给location参数指定的attribute变量
  3. 前端笔记-echarts加载bmap地图
  4. Linux增加开放端口号
  5. Memory Notification: Library Cache Object loaded into SGA问题
  6. Mac远程服务器文件上传rz和sz的安装使用
  7. 观测天文角分辨率单位换算
  8. Stylus基本使用
  9. 如何在服务台提交工单?
  10. python实现快递地址分拣程序(代码有详细注释)
  11. JS设计模式——责任链模式
  12. bluetoothctl No default controller available
  13. Uber上市即破发 CEO安慰员工:Facebook和亚马逊上市后股价表现也不好
  14. c语言寻找完全平方数,菜鸟求助,要怎么求完全平方数?
  15. Bootstrap分割线和普通分割线
  16. 一元四次方程欧拉解法的证明
  17. FIFO读写时序理解——almost_empty、almost_full
  18. 双摄测距原理_双摄像头系列原理深度剖析
  19. 与京东物流合作,能不能补全东方甄选的最后一块拼图?
  20. PyCharm修改背景颜色

热门文章

  1. Verizon的SDN策略:不鸣则已,一鸣惊人?
  2. 域名发散--前端优化(三)
  3. OpenCart 之 CSV 格式商品导入 – 如何导入商品主图片和附加图片?
  4. 快速配置 Samba 将 Linux 目录映射为 Windows 驱动器
  5. 智能情绪分析技术_石化缘推荐:炼化企业智能机器人巡检技术应用前景分析!...
  6. oracle-SQL-case when 改用 DECODE
  7. 使用循环链表实现一个通讯录的管理程序_【LeetCode链表题型总结】
  8. concat特征融合_MSFNet:多重空间融合网络进行实时语义分割(北航和旷视联合提出)...
  9. MySQL数据库是非关系_MySQL(数据库)基础知识、关系型数据库yu非关系型数据库、连接认证...
  10. 使用JavaScript中的示例的escape()函数