You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot部署JBoss EAP6.3时JSP源码直接显示问题求助

解决Spring Boot应用部署到JBoss EAP6.3时JSP源码直接输出的问题

你的问题很典型——Spring Boot在嵌入式Tomcat里能正常解析JSP和Tiles标签,但放到JBoss EAP6.3上就直接输出源码,这主要是外部容器的JSP处理机制和Spring Boot自动配置的适配问题。下面是一步步的解决办法:

1. 清理冲突依赖

JBoss EAP6.3自带了专属的JSP引擎和Servlet实现,你的pom里有些Tomcat特有的依赖会干扰它的正常工作:

  • 直接移除tomcat-embed-jasper和ecj依赖,这俩是嵌入式Tomcat用来编译JSP的,JBoss完全不需要
  • 你已经排除了spring-boot-starter-tomcat,这步没问题,继续保持

需要删掉的依赖片段:

<!-- To compile JSP files -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>
<!-- Need this to compile JSP -->
<dependency>
    <groupId>org.eclipse.jdt.core.compiler</groupId>
    <artifactId>ecj</artifactId>
    <version>4.6.1</version>
    <scope>provided</scope>
</dependency>

2. 让启动类适配外部容器

部署到外部Servlet容器时,Spring Boot必须通过SpringBootServletInitializer来初始化上下文,否则JBoss没法正确识别Spring的配置。修改你的启动类:

@SpringBootApplication
public class SpringBootAppApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(SpringBootAppApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(SpringBootAppApplication.class, args);
    }
}

3. 配置视图解析器和Tiles

在application.properties里添加视图解析规则,确保Spring能找到JSP文件,同时让Tiles视图生效:

# 根据你的JSP实际存放路径调整前缀
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

# 让Tiles视图解析器优先生效
spring.mvc.view.order=0

同时,确保你已经配置了Tiles的核心Bean(如果还没加的话):

@Configuration
public class TilesConfiguration {

    @Bean
    public TilesConfigurer tilesConfigurer() {
        TilesConfigurer configurer = new TilesConfigurer();
        configurer.setDefinitions("/WEB-INF/tiles.xml"); // 你的tiles配置路径
        configurer.setCheckRefresh(true);
        return configurer;
    }

    @Bean
    public ViewResolver tilesViewResolver() {
        TilesViewResolver resolver = new TilesViewResolver();
        return resolver;
    }
}

4. 添加JBoss专属配置文件

在src/main/webapp/WEB-INF下创建jboss-web.xml,告诉JBoss正确处理JSP请求:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_7_0.xsd"
           version="7.0">
    <!-- 让JBoss的JSP引擎处理所有.jsp请求 -->
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>
    <!-- 设置应用根路径,避免映射冲突 -->
    <context-root>/</context-root>
</jboss-web>

5. 调整DispatcherServlet映射

你之前设置的server.servlet-path=/*会让Spring的DispatcherServlet拦截所有请求,包括JSP,导致JBoss的JSP引擎没机会处理。改成:

server.servlet-path=/

这样DispatcherServlet只会处理业务请求,JSP请求会直接交给JBoss的JSP引擎解析。

6. 验证WAR包结构

确保你的WAR包符合标准结构,比如:

SpringBootApp.war
├── WEB-INF
│   ├── classes
│   │   ├── 编译后的类文件
│   │   └── application.properties
│   ├── lib
│   │   ├── 依赖jar包
│   ├── views
│   │   ├── 你的JSP文件
│   ├── tiles.xml
│   └── jboss-web.xml
└── META-INF
    └── MANIFEST.MF

做完这些修改后,重新打包部署到JBoss EAP6.3,应该就能正常解析JSP和Tiles标签了。

内容的提问来源于stack exchange,提问作者Ranjani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:32:59