Springmvc控件不能将值传递给jsp

时间:2016-05-20 12:09:20

标签: 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>

您好-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。也许我得到了一个低级错误。但我真的不知道。

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

3 个答案:

答案 0 :(得分:1)

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

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

所以我假设你直接调用index.jsp文件而没有先命中控制器。但是(当然)hello模型变量尚未放入请求属性中,因此无法使用。

如何解决:

为避免直接命中jsp文件,优秀做法建议将它们放在WEB-INF文件夹下。这样,它们永远不会是servlet容器的服务器,并且只有在从控制器转发到时才会显示=&gt;在WEB-INF / jsp / index.jsp下移动index.jsp,并相应地在jspViewResolver配置中更改<property name="prefix" value="/WEB-INF/jsp/"/>

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

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

正在使用xml配置

答案 1 :(得分:0)

试试这个:

之前添加!DOCTYPE

class ConfigurePort(QDialog):
  def __init__(self, parent):
    super(ConfigurePort, self).__init__(parent)
    uic.loadUi("configurePort.ui", self)

    self.myValue = 10
    self.restoreSettings()

    self.connect(self.btn_checkconn, SIGNAL("clicked()"), self.check_ports)
    self.buttonBox.button(QDialogButtonBox.Cancel).clicked.connect(self.close)
    self.buttonBox.button(QDialogButtonBox.Ok).clicked.connect(self.closeEvent)

    self.iniUi()

  def check_ports(self):
    pass

  def iniUi(self):
    pass #I just create some QLabels in here

  @classmethod
  def retrieve_data(cls, parent = None):
    dlg = cls(parent)
    dlg.exec_()
    text = dlg.getPortText()
    return text

  def closeEvent(self, event):
    self.saveSettings()
    super(QDialog,self).closeEvent(event)

  def saveSettings(self):
    settings = QSettings("MyOrg", "MyApp")
    settings.setValue("myValue", self.myValue)

  def restoreSettings(self):
    settings = QSettings("MyOrg", "MyApp")
    self.myValue = settings.value("myValue", self.myValue)

打印值:

TypeError: QWidget.closeEvent(QCloseEvent): argument 1 has unexpected type 'bool'

完整的index.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

希望它有所帮助。

答案 2 :(得分:0)

从弹簧配置中删除<mvc:default-servlet-handler/>。你不需要它,因为你的web.xml中已经有SpringDispatcher,并且你的spring配置中有一个视图解析器。

为&#34; /&#34;以外的请求映射添加值。例如,@RequestMapping("/blam")。 (此网址为http://<host>/<context>/blam)。

不要使用&#34; index.jsp&#34;作为您的视图文件名。 &#34;的index.jsp&#34;是默认的欢迎文件名。

这对我有用:

    我的servlet配置中
  1. no <mvc:default-servlet-handler/>
  2. 我的war文件名为klabben.war(上下文为&#34; klabben&#34;)。
  3. @RequestMapping("/blam")
  4. 来自索引处理程序方法的
  5. return "blam.jsp
  6. 将index.jsp文件内容复制到blam.jsp
  7. 使用网址&#34; http://<host>/klabben/blam&#34;显示&#34;你好:sss&#34;消息。
  8. 注意:我对<mvc:default-servlet-handler/>错了。它提供了我想象的其他价值。