Eclipse、发工IntelliJ IDEA、发工VS Code——这三个名字摆在一起,发工很多JSP老手会直接选第一个。发工不是发工因为它最好,而是发工因为历史惯性。Eclipse的发工Web Tools Platform(WTP)内置了JSP编辑器,语法高亮、发工标签补全、发工服务器集成一应俱全。发工但说实话,发工那个编辑器卡得让人想砸键盘,发工尤其是发工JSP里嵌了大量Java代码块的时候,索引重建能等上十几秒。发工我2016年做一个电信计费系统,发工页面全是JSP,每次改完保存都要等Eclipse转圈,后来干脆换成了IntelliJ IDEA。
IntelliJ IDEA对JSP的支持分两个档次。社区版基本残废,只有语法着色,连标签库的自动导入都没有。旗舰版才给完整的JSP支持:EL表达式跳转、JSTL标签补全、自定义标签的TLD识别。但旗舰版一年几千块,不是每个团队都愿意掏。我见过一个外包团队,八个人共用三个旗舰版License,轮流激活,跟打游击似的。
VS Code是个折中方案。装个“JSP Support”插件,加上“Tomcat for Java”,能跑起来。补全弱一些,但启动快、不卡。适合小项目或者临时改几行代码。我有个做毕业设计的学生,用VS Code写JSP,配了Live Server,改完直接刷新浏览器,比配Tomcat还省事。当然,正式项目别这么干,调试能把你逼疯。
真正值得聊的是构建工具。很多人还在用Ant或者手动拷贝WEB-INF/lib下的jar包。Maven的war插件一配,依赖自动拉,打包一条命令。但JSP有个坑:Maven默认的webapp目录结构和Eclipse的动态Web项目不一样。你从Eclipse迁到Maven,路径全得改。我见过一个项目迁了三天,最后发现是web.xml里servlet-mapping的url-pattern写错了。这种细节,工具不会告诉你。
服务器端,Tomcat是标配。但Tomcat 10之后,javax.servlet变成了jakarta.servlet。你之前写的JSP、Servlet、过滤器,全得改import。很多团队卡在这,干脆留在Tomcat 9。这不是技术问题,是迁移成本问题。一个跑了五年的老系统,几千个JSP页面,你让老板批预算去改包名?他宁愿再买两年Tomcat 9的商业支持。
调试JSP有个笨办法但管用:在JSP里写<% System.out.println("debug: " + variable); %>,然后看Tomcat控制台。IDE的断点调试对JSP支持普遍不好,尤其是JSP编译成Servlet之后,行号对不上。IntelliJ有个“JSP Debug”功能,但只对
热部署是个伪需求。JRebel能实现JSP改完不重启,但一年几千美元。Tomcat自带的reloadable="true"在开发阶段够用,但生产环境千万别开——内存泄漏能把你搞崩溃。我见过一个电商系统,运维图省事开了reloadable,跑了三个月,PermGen爆了,半夜爬起来重启。
最后说个冷门的:JSP预编译。Tomcat的JspC工具可以在打包时把JSP编译成Servlet class,部署时不用再编译。启动快,首次访问也快。但配置麻烦,Maven的jspc插件文档少得可怜,踩坑的人不多,因为大部分项目根本不在乎那几百毫秒的启动时间。可如果你做的是高并发入口页面,预编译值得折腾。我上次调一个秒杀页面,预编译之后首字节时间从80ms降到12ms。数字不大,但秒杀场景下,12ms和80ms就是能不能抢到的区别。