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

SpringBoot+NetBeans环境下JSP运行异常问题排查求助

问题根因

当前配置存在3个核心错误,直接对应你遇到的两个异常:

  • 模板引擎配置错配:项目引入Thymeleaf依赖,却将Thymeleaf视图后缀配置为.jsp,Thymeleaf既不识别JSP原生${}EL语法,项目也没有配置JSP专属视图解析器,两套模板规则混用导致视图无法正常渲染,直接把源码文本输出到页面。
  • 请求参数规则配置不合理:@RequestParam注解默认要求参数必传,不带name参数访问时接口直接抛出400参数缺失错误,项目未自定义错误页,就会触发SpringBoot默认的/error fallback提示。
  • 视图路径匹配存疑:配置的Thymeleaf视图前缀为classpath:/templates/mama/,需要确认视图文件实际存放路径是否和配置一致,路径不匹配也会导致视图解析失败。
分步解决方案

第一步:确定使用的模板技术,二选一,禁止混配

方案1:使用JSP(SpringBoot官方对JSP内嵌容器支持有限,不推荐)

  • 删掉application.properties中所有Thymeleaf相关配置,即删除以下两行:
    spring.thymeleaf.prefix=classpath:/templates/mama/
    spring.thymeleaf.suffix=.jsp
    
  • 新增JSP视图解析配置:
    spring.mvc.view.prefix=/WEB-INF/jsp/
    spring.mvc.view.suffix=.jsp
    logging.level.org.springframework.web=DEBUG
    
  • 将login.jsp从templates目录移动到src/main/webapp/WEB-INF/jsp/路径下,这是SpringBoot识别JSP文件的默认路径。
  • 检查pom.xml依赖,补齐JSP运行必要的包:
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    
  • 检查JSP文件头,若存在<%@ page isELIgnored="true" %>配置直接删除,或显式添加<%@ page isELIgnored="false" %>启用EL表达式解析。

方案2:使用Thymeleaf(SpringBoot官方推荐,适配性更好)

  • 将login.jsp重命名为login.html,放到src/main/resources/templates/mama/目录下,和配置的视图前缀路径完全对应。
  • 修改application.properties中Thymeleaf后缀配置,将.jsp改为.html:
    spring.thymeleaf.prefix=classpath:/templates/mama/
    spring.thymeleaf.suffix=.html
    logging.level.org.springframework.web=DEBUG
    
  • 调整页面变量写法,Thymeleaf不支持直接在文本中写原生${name}的语法,需要通过th属性绑定,同时修正th命名空间地址:
    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org/">
    <head>
        <title>First web application</title>
    </head>
    <body>
        <h1 th:text="'Welcome ' + ${name} + '!'"></h1>
    </body>
    </html>
    

第二步:修复无参数访问报错问题

修改Controller层的@RequestParam注解配置,将参数设为非必填,同时配置默认值,修改后代码如下,没用的冗余import可以直接删掉:

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class LoginController {
    @RequestMapping("/login")
    public String loginMessage(@RequestParam(required = false, defaultValue = "guest") String name, ModelMap model){
        model.put("name", name);
        return "login";
    }
}

修改后不带name参数访问时,会默认传递name=guest,不会再触发参数缺失错误。

第三步:清理缓存重启验证

在NetBeans中执行clean build命令,清空之前的target编译缓存,再重启项目,分别测试带参数、不带参数的访问地址即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:03:25