【问题标题】:JSP not Evaluating with Spring MVCJSP 不使用 Spring MVC 进行评估
【发布时间】:2013-02-16 22:19:20
【问题描述】:

我正在尝试使用注释驱动配置在 Spring 3.2 中呈现 JSP,但 JSP 呈现为字符串并且未评估。

我正在使用 maven jetty 插件在开发中运行 webapp。所以似乎一切都应该“正常工作”。

我使用 JSP 所包含的依赖项是

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

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>

配置JSP的bean是

@Configuration
public class WebAppConfiguration {
  @Bean
  public InternalResourceViewResolver internalResourceViewResolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("/views/");
    resolver.setSuffix(".jsp");
    return resolver;
  }
}

控制器非常简单

@Controller
public class RootController {
  @RequestMapping(value = "/login")
  public String login() {
    return "login";
  }

JSP 也很简单

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>

<html>
<head></head>
<body>
<%= "Hello World" %>
${ "Hello World" }
<form name="auth" action="<c:url value='j_spring_security_check' />" method="POST">
  <label>Username: <input type="text" name="j_username"></label>
  <label>Password: <input type="password" name="j_password"></label>
  <input type="submit" value="Submit"/>
</form>
</body>
</html>

从图中可以看出,JSP 没有被评估。我需要做些什么来告诉 JSP 在呈现时进行评估。

编辑 1

因此,我使用Resthub archetype resthub-mongodb-backbonejs-archetype 来引导这个项目,它使用 WebAppInitializer 而不是旧的 web.xml,并且它使用新的注释驱动 bean 而不是 xml bean,因此只是为了提供一些额外的信息。


编辑 2

我一直在努力解决这个问题,所以我把这个项目放在了 github https://github.com/austinbv/calendar/。因为我不知道什么重要什么不重要。

感谢您的帮助


【问题讨论】:

  • 您是否将 jstl.jar 和 standard.jar 复制到 WEB-INF/lib 中?
  • 在我的 WEB-INF 中,我确实有 jstl 库。通过将 JSTL 添加到我的 pom 并在构建时添加它来包含它
  • 您是否尝试在您的 WebAppConfiguration 类中使用@EnableWebMvc?
  • 你能发布你的 web.xml 吗?
  • View 文件夹中有 login.jsp 吗?

标签: java jsp spring-mvc


【解决方案1】:

@austinbv 请使用SPRING LINK 检查设置。 (正如@Rohit 在上面指出的那样——缺失的部分)

【讨论】:

    【解决方案2】:

    我在使用 spring boot 时遇到了同样的问题。将这些依赖项添加到项目 pom.xml 解决了这个问题:

    <dependency>
        <groupId>tomcat</groupId>
        <artifactId>jasper-compiler</artifactId>
        <version>5.5.23</version>
    </dependency>
    <dependency>
        <groupId>tomcat</groupId>
        <artifactId>jasper-runtime</artifactId>
        <version>5.5.23</version>
    </dependency>
    <dependency>
        <groupId>tomcat</groupId>
        <artifactId>jasper-compiler-jdt</artifactId>
        <version>5.5.23</version>
    </dependency>
    

    【讨论】:

      【解决方案3】:

      在“web.xml”中进行以下更改后,为我解决了上述问题

      spring servlet 需要是默认的servlet。即映射到/而不是/*。

      参考链接:https://code-examples.net/en/q/b49ce1

      【讨论】:

        【解决方案4】:

        你需要指定合适的视图类

         public InternalResourceViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);
        resolver.setPrefix("/views/");
        resolver.setSuffix(".jsp");
        return resolver;
        

        }

        【讨论】:

        • 设置 ViewClass 后得到相同的结果
        【解决方案5】:

        我不知道我的答案会有多少实际,但我遇到了完全相同的问题(Spring + boot + maven + tomcat)。 我通过从 tomcat.embed 依赖中删除 scope-provided 来解决它。所以,我的依赖现在看起来像这样:

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        

        【讨论】:

        • 这解决了我的问题,很高兴我尝试了它,即使是 -1。
        【解决方案6】:

        因为 JSP 不遵循 MVC 模式:P

        【讨论】:

          猜你喜欢
          • 2012-08-03
          • 2018-05-09
          • 2022-10-15
          • 1970-01-01
          • 1970-01-01
          • 2014-05-19
          • 2017-05-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多