java - Springmvc控件无法将值传递给jsp

标签 java jsp spring-mvc

我尝试学习springmvc,但是当我开始学习时,我遇到了一个问题。

我认为这是一个简单的问题。我在网上搜索并找到了很多例子。但我没有找到原因。这是代码。

HomeControll.java

package cn.qingtianr.controll;

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

/**
 * Created by jack on 16-5-20.
 */

@Controller
public class HomeControll {

    @RequestMapping("/")
    public String index(ModelMap model){
        String s = "hhh";
        model.addAttribute("hello",s);
        return "index";
    }
}

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: jack
  Date: 16-5-20
  Time: 下午6:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${hello}
</body>
</html>

web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>


  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

hello-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="cn.qingtianr.controll"/>


    <mvc:default-servlet-handler/>


    <mvc:annotation-driven/>


    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.qingtianr</groupId>
  <artifactId>springmvctest</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>springmvctest Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
    <spring.version>4.2.5.RELEASE</spring.version>
    <spring-data.version>1.2.0.RELEASE</spring-data.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>springmvctest</finalName>
  </build>
</project>

当我访问index.jsp时。我在浏览器上得到的是${hello}而不是hhh。也许我得到了一个低级错误。但我没有'真的不知道。

有人可以帮助我吗?谢谢。

最佳答案

看起来像 DispatcherServlet 映射的 SpringMVC 问题。

您将 servlet 映射到/,这意味着它将获取其他 servlet(包括默认容器)无法解析的所有 URL。一个常见的问题是 Spring MVC DispatcherServlet 永远不会收到空 URL '/'(请参阅我的另一篇 answer 以获取更详细的解释)。

所以我假设您直接调用了index.jsp 文件,而没有先点击 Controller 。但是(当然)hello模型变量尚未放入请求属性中,无法使用。

如何修复:

为避免直接访问 jsp 文件,建议将它们放在 WEB-INF 文件夹下。这样,它们将永远不会由 servlet 容器作为服务器,并且仅在从 Controller 转发 => 将 index.jsp 移动到 WEB-INF/jsp/index.jsp 下并相应地更改 <property name="prefix" value="/WEB-INF/jsp/"/> 时才会显示。在 jspViewResolver 配置中。

然后使用引用帖子中的解决方案之一。我建议将 DispatcherServlet 映射到 /*并将静态资源移动到由 ResourceHttpRequestHandler 处理的文件夹,例如使用:

<mvc:resources mapping="/resources/**" location="/public-resources/"/>

当您使用 xml 配置时

关于java - Springmvc控件无法将值传递给jsp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37346392/

相关文章:

java - TransformerHandler 输出 CDATA 部分

javascript - 将值从 jsp 传递到操作类 java 文件

java - Spring MVC - 将枚举填充到下拉列表

java - 如何使Spring Controller 在所有请求主体传输之前被调用(并将主体作为流处理)?

java - 一个 web.xml 中的多个 Jersey servlet

java - 替换文本末尾的额外字符

尝试从 aws lambda 处理函数调用 SDN 时出现 java.lang.NullPointerException

java - 如何从外部jsp调用内部类方法或变量?

java - 内容类型不允许 : fileUpload in Struts 2

java - Spring 3 验证不起作用