JSP主机用起来跟PHP主机是两种感觉。PHP丢个文件上去就能跑,JSP得先确认容器版本、JDK版本、web.xml配置对不对。虚拟主机商给你一个Tomcat,版本可能是8.5也可能是9.0.你本地用11编译的war包丢上去直接报UnsupportedClassVersionError,这种事第一次遇到会懵,后来就习惯了,传之前先问客服要环境信息,比自己瞎试省时间。
挑选JSP虚拟主机的时候,有几项参数优先级比价格更高。JVM内存是首要考量点,Java应用内存消耗和PHP不在一个量级,小型站点最少要分配512MB独立堆内存,共享内存的主机方案尽量避开,很容易出现OutOfMemory崩溃。Tomcat版本底线是8.5以上,JDK优先选用8或者11这类LTS长期支持版本,还在用JDK7的主机直接跳过。还有一个容易忽略的地方,服务商是否开放修改Tomcat配置文件权限,部分封闭型主机商会锁定server.xml,想新增虚拟目录都无法操作。

虚拟目录在虚拟主机和独立服务器上,使用体验差别很大。如果是cPanel面板的JSP主机,操作会简单不少。cPanel开启Tomcat托管之后,会自动为每个站点生成默认context,路径固定在`/home/domain/public_html/WEB-INF`。不用手动修改server.xml,直接上传JSP文件就能运行。但这里存在限制,单个cPanel账户只有主域名支持启用JSP,子域名无法使用,官方同时说明不支持.war包部署,只能直接上传编译完成的class文件与JSP页面。
如果是自己租用VPS或者云服务器,拥有Tomcat完整管理权限,虚拟目录存在两种常用配置方式。第一种修改conf/server.xml,找到
更稳妥的方案是单独新建Context配置文件。在conf/Catalina/localhost/目录新建xml文件,文件名就是访问路径,例如upload.xml,文件内容只写一行
有一处细节经常被忽略。docBase填写相对路径时,不同Tomcat版本解析基准目录不一样,有的以Tomcat安装目录为基准,有的以webapps目录为准。稳妥做法直接填写绝对路径,Linux写成/data/upload,Windows写成D:/data/upload。目录权限同样需要确认,Tomcat进程必须拥有该目录读写权限,Linux最低要求chmod 755.不然访问页面会返回403.
共享JSP虚拟主机还有另一种途径,直接在控制面板操作。登录后台找到虚拟目录或者站点设置板块,填写目录名称与物理路径,保存即可生效。底层本质是后台自动修改Tomcat配置,不用手动编辑server.xml。但可用功能取决于服务商开放权限,部分主机商仅允许映射到已存在目录,不能随意指定任意路径。
虚拟目录配置完成后测试,核对浏览器访问地址path参数是否匹配。配置/upload,访问地址就是`http://你的域名/upload/`,不要额外添加多余前缀。访问出现404.优先检查docBase对应的物理目录内是否存在文件,再确认Tomcat是否重新加载配置。独立xml配置文件的方式,Tomcat几秒内自动识别新配置,不用重启;修改server.xml的方式,改动后必须重启服务。
虚拟目录和标准Web应用目录有本质区别。webapps下的目录会被Tomcat识别为完整Web应用,自动加载WEB-INF/web.xml,初始化Servlet。虚拟目录仅仅映射普通文件夹,不会当作Web应用处理,目录内JSP文件能够正常执行,但若想运行Servlet,需要手动搭建完整WEB-INF目录结构。很多人配置完虚拟目录,Servlet无法访问,根源就在这里。