欢迎和大家交流技术相关问题:
邮箱: jiangxinnju@163.com
博客园地址: http://www.cnblogs.com/jiangxinnju
GitHub地址: https://github.com/jiangxincode
知乎地址: https://www.zhihu.com/people/jiangxinnju
最近我经常要更改应用中的一些功能,其实要做的事情比较简单,但是也很繁琐,这里记录一下。由于只是实现一些小的功能接口,不会更改网站的显示内容,所以不能或者很难通过网页直接查看,所以我一般是按照下面的步骤进行处理。
- 在Eclipse中完成基本的代码编写,比如完成所需的接口函数。
- 在powershell窗口中利用maven对刚刚修改的代码内容进行打包。(不是打包整个工程,只是其中一个自工程)
- 利用sftp程序(比如Xmanager中的Xftp)将打出jar包上传到服务器中的对应目录,替换掉原来的jar包。
- 重启tomcat服务器。
- 修改测试jsp页面。(由于符合restful,所以可以通过jsp直接出发新编写的函数)
- 利用sftp程序,将上传的jsp文件上传到服务其中的对应目录。
- 开启Eclipse远程Debug。
- 在浏览器中登陆需要测试的网站,运行jsp文件,通过数据库进行查看,验证所实现的功能是否正确。如果不正确返回上面的某个步骤继续。
针对上面的内容再补充几点:
- 由于利用jsp页面触发所实现的功能,有可能会更改数据库中的内容,在已有的Web框架下,应该能够使Web应用中的数据得到同步刷新,但是不排除意外可能。
- 由于某些原因,可能需要手动修改数据库内容,也就是说不是通过页面操作,这是为了保证Web应用的数据与数据库保持一致,需要重启应用(tomcat),更新数据内容。
- 在手动修改数据库时,比如利用Oracle SQL Developer和PL/SQL Developer等客户端对数据库进行操作,一定要保证本地运行的SQL脚本已经commit,否者这些客户端会持有对数据库的写锁,使Web应用无法对数据库进行写操作。
- 在上述编码、测试环境中经常需要用Eclipse对远程服务器中的tomcat进行调试,所以一定要注意保持Eclipse中的源码和远程服务器中的jar包保持一致,否则会出现许多问题。
- 我们一般都只对Web应用中很小的一部分进行修改,所以我们都是将某个子工程的jar包上传服务器进行替换,但是需要注意该jar包是否能和服务器中其它的内容相一致,因为很可能于此同时,其他同时已经更改了其它jar包,导致了不一致,出现难以调试的困难。为了保证一致,有两个方法:一是将本地所有的jar包上传服务器进行替换,但是我们一般不推荐这样做。另一种方法是进行减小jar包的替换范围,我们可以讲远程服务器中我们需要修改的jar包下载到本地,然后只替换其中若干个我们需要修改的class文件。
- 从服务器拉出jar包
- jd-jui反编译代码之后关闭jd-jui。使用反编译的代码替换eclipse中的对应代码。
- mvn clean package -DskipTest
- 再次从服务器拉出jar包
- 用7-zip替换jar包中对应class文件
- 上传到服务器
- 在有些情况下可以直接使用restclient发送消息报文进行测试,不有自己编写jsp页面。
- 有一次我在重启tomcat时,发现shutdown命令无法正常关闭tomcat,所以之后利用startup启动时也会出现问题,经过很长时间的排查,发现是在前一次启动tomcat时是用的root身份,所以之后在普通用户权限下无法进行关闭。解决办法比较简单,就是重新切回root身份进行关闭,然后退到普通权限重新启动。另一个关于权限的问题是在用sftp上传文件时一定注意所使用的身份,非特殊情况一般不要使用root权限上传,否则会导致文件(比如jar文件)的读写权限太严,tomcat无法正常读取。
- 在Linux服务器中的文件对比工具都不是很顺手,命令行对比虽然还不错,但是文件路径都很深,每次只是输入路径就麻烦死了,我一般是将需要对比的文件、文件夹利用Xftp下载到本地,然后使用beyond compare进行对比,由于Xftp和beyond compare这两个工具都有路径历史记录,省去了每次输入路径的麻烦。
- 在修改代码中经常会使用文件内容搜索功能,Eclipse的搜索限制太多,比如只能搜索java等文本文件,所以我一般都是使用filelocator进行搜索,功能更加强大,可以搜素word,pdf等二进制文件。