CentOS 与 JSP 兼容性问题的排查与解决
一、先搭建一致且可复现的运行环境
yum install -y java-1.8.0-openjdk-devel,然后 java -version 验证。wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.56/bin/apache-tomcat-9.0.56.tar.gz && tar -zxvf apache-tomcat-9.0.56.tar.gz -C /usr/local/chmod +x /usr/local/apache-tomcat-9.0.56/bin/*.sh && /usr/local/apache-tomcat-9.0.56/bin/startup.shcurl http://localhost:8080 能看到欢迎页。/etc/profile 追加
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdkexport CATALINA_HOME=/usr/local/apache-tomcat-9.0.56source /etc/profile 生效。firewall-cmd --zone=public --add-port=8080/tcp --permanent && firewall-cmd --reload。webapps/ROOT/ 放置简单 test.jsp(见下文模板),访问 http://服务器IP:8080/test.jsp。二、常见兼容性问题与对应修复
org.apache.jasper.JasperException: Unable to compile class for JSP。ClassNotFoundException: org.apache.jsp.WEB_002dINF.jsp.xxx_jsp 或属性未闭合等。WEB-INF/lib/ 放置标准 JSTL 实现(如 javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api 与 org.glassfish.web:javax.servlet.jsp.jstl),确保与容器版本匹配;Maven 项目使用官方 BOM 或明确版本,避免运行时缺失。<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>;<form accept-charset="UTF-8">;characterEncoding=UTF-8);request.setCharacterEncoding("UTF-8")(在解析参数前调用);new String(bytes, "GBK") 式“转码”,统一全链路 UTF-8。tomcat/bin/tomcat-juli.jar;清理工作目录并重新部署。三、一套可复用的 JSP 最小示例与自检
test.jsp(置于 webapps/ROOT/):<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head><title>Test JSP</title></head>
<body>
<h1>Hello, 中文测试(UTF-8)</h1>
<p>Server Time: <%= new java.util.Date() %></p>
</body>
</html>
http://服务器IP:8080/test.jsp,确认页面与服务器时间正常显示;logs/catalina.out 与 logs/localhost*.log,无编译与运行期异常;<c:out> 的页面验证标签库解析是否正常。四、部署与运维的实用建议
yum install -y tomcat)时,注意其目录结构与用户(常见为 tomcat 用户),并为服务创建 systemd 单元,设置 JAVA_HOME/CATALINA_HOME 等环境变量,便于开机自启与统一运维。webapps/、logs/、work/ 具备读写权限;避免在 webapps 下直接放源码,优先使用 WAR 包自动部署。conf/web.xml 将 listings 设为 false 禁止目录浏览;删除不必要的示例与管理应用;按需调整连接器参数(如 connectionTimeout、maxThreads)。