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

Spring MVC视图显示${message}而非真实传入消息的问题排查

问题:Spring MVC视图页面直接显示EL表达式${message}而非真实消息

提交表单后,视图页面未渲染Controller传入的message属性值,而是直接显示${message}表达式,以下是排查和解决方法:

核心原因分析

  1. Servlet版本兼容问题:你的web.xml使用了Servlet 2.3的DTD规范,该版本默认禁用EL表达式解析,导致JSP无法识别${}语法。
  2. JSP未显式启用EL:即使Servlet版本支持,部分环境下JSP可能默认忽略EL,需要手动开启。
  3. 依赖版本不稳定:pom.xml中使用的servlet-api是3.0-alpha-1版本,属于测试版,存在兼容性问题。

解决方案

1. 升级web.xml到Servlet 3.0+规范

替换原web.xml内容为Servlet 3.1的XML Schema版本,默认启用EL:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <display-name>Archetype Created Web Application</display-name>
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

2. 在JSP页面显式启用EL

在viewpage.jsp和errorpage.jsp的头部添加page指令,强制开启EL解析:

<%@ page isELIgnored="false" %>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
${message}
</body>
</html>

3. 更换稳定的servlet-api依赖

修改pom.xml中的servlet-api依赖,使用稳定的3.1.0版本,并设置scope为provided(避免与容器自带的API冲突):

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

相关代码参考

Controller代码

@Controller
public class HelloController {

    @RequestMapping("/hello")
    public String display(@RequestParam("name") String name, @RequestParam("pass") String pass, Model m) {

        System.out.println("Inside display ");
        if (pass.equals("admin")) {

            System.out.println("Inside IF ");
            String msg = "Hello " + name;
            m.addAttribute("message", msg);
            return "viewpage";
        } else {
            System.out.println("Inside ELSE ");
            String msg = "Sorry " + name + " Wrong Password";
            m.addAttribute("message", msg);
            return "errorpage";
        }

    }
}

index.jsp代码

<html>
<body>
<form action="hello">
Username : <input type="text" name="name">
Password : <input type="password" name="pass">
<input type="submit" name="submit">
</form>
</body>
</html>

spring-servlet.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="com.deepthi" />

    <mvc:annotation-driven/>
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:39:50