2016-06-10 134 views
0

我是新来的spring mvc。我试图从我的helloworld.jsp上的模型视图控制器获取响应。当我运行应用程序时,我只能在页面上定义$ {message} $ {name}。我在控制器文件中使用了sysout,但没有在控制台上获取任何东西。请你能检查我缺少的东西吗?Spring MVC控制器不返回值

弹簧MVC版本:4.2.6.RELEASE

的index.jsp

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
     pageEncoding="ISO-8859-1"%> 
     <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
     <html> 
     <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
     <title>Spring 4 MVC - HelloWorld Index Page</title> 
     </head> 
     <body> 

      <center> 
       <h2>Hello World</h2> 
       <h3> 
        <a href="helloworld.jsp">Click Here</a> 
       </h3> 
      </center> 
     </body> 
     </html> 

的helloWorld.jsp

<html> 
<head> 
<title>Spring 4 MVC -HelloWorld</title> 
</head> 
<body> 
     <h2>${message} ${name}</h2> 


</body> 
</html> 

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="3.0" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 

    <display-name>FirstSpringMVCProject</display-name> 

    <servlet> 
    <servlet-name>spring-dispatcher</servlet-name> 
     <servlet-class> 
        org.springframework.web.servlet.DispatcherServlet 
     </servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/spring-dispatcher-servlet.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>spring-dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

</web-app> 

弹簧调度-servlet.xml中

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    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.test.testcontroller" /> 
    <mvc:annotation-driven/> 

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

</beans> 

TestController.java

package com.test.testcontroller; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.servlet.ModelAndView; 

@Controller 
public class TestController { 

    @RequestMapping("/index") 
    public ModelAndView showMessage() { 
     System.out.println("in controller"); 

     ModelAndView mv = new ModelAndView("helloworld"); 
     mv.addObject("message", "this is a message for"); 
     mv.addObject("name", "Spring"); 
     return mv; 
    } 

} 

应用结构

enter image description here

登录:

INFO: Initializing Spring FrameworkServlet 'spring-dispatcher' 
Jun 13, 2016 9:30:23 AM org.springframework.web.servlet.DispatcherServlet initServletBean 
INFO: FrameworkServlet 'spring-dispatcher': initialization started 
Jun 13, 2016 9:30:23 AM org.springframework.web.context.support.XmlWebApplicationContext prepareRefresh 
INFO: Refreshing WebApplicationContext for namespace 'spring-dispatcher-servlet': startup date [Mon Jun 13 09:30:23 BST 2016]; root of context hierarchy 
Jun 13, 2016 9:30:23 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from ServletContext resource [/WEB-INF/spring-dispatcher-servlet.xml] 
Jun 13, 2016 9:30:24 AM org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter initControllerAdviceCache 
INFO: Looking for @ControllerAdvice: WebApplicationContext for namespace 'spring-dispatcher-servlet': startup date [Mon Jun 13 09:30:23 BST 2016]; root of context hierarchy 
Jun 13, 2016 9:30:24 AM org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter initControllerAdviceCache 
INFO: Looking for @ControllerAdvice: WebApplicationContext for namespace 'spring-dispatcher-servlet': startup date [Mon Jun 13 09:30:23 BST 2016]; root of context hierarchy 
Jun 13, 2016 9:30:24 AM org.springframework.web.servlet.DispatcherServlet initServletBean 
INFO: FrameworkServlet 'spring-dispatcher': initialization completed in 1211 ms 
Jun 13, 2016 9:30:24 AM org.springframework.web.servlet.PageNotFound noHandlerFound 
WARNING: No mapping found for HTTP request with URI [/TestApp/index] in DispatcherServlet with name 'spring-dispatcher' 
+0

你的链接应该是'/ index'而不是jsp。另外如果yu可以使用你在'index.jsp'中的链接,那么你的jsp就不是你告诉它弹簧的地方。 –

+0

Deinum,对不起,我没有得到。请你能告诉我应该改变什么/在哪里? – Muhammad

+0

我说的。将文件中的链接更改为'/ index' ... –

回答

0

以下到web.xml中似乎有一些问题与使用maven创建Spring MVC的项目。由于某些原因,它不会生成.class文件。我尝试了各种选择,但都没有为我工作。

然后我创建了一个简单的动态web项目,它的工作正常。

我还想知道为什么maven没有工作。

感谢您的帮助。

0

这应该是更新的index.jsp。此外,我们将链接作为索引,因为您的请求映射仅为/索引。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
     pageEncoding="ISO-8859-1"%> 
     <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
     <html> 
     <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
     <title>Spring 4 MVC - HelloWorld Index Page</title> 
     </head> 
     <body> 

      <center> 
       <h2>Hello World</h2> 
       <h3> 
        <a href="index">Click Here</a> 
       </h3> 
      </center> 
     </body> 
     </html> 

检查此线在tomcat控制台日志

INFO: Mapped "{[/index]}" onto public org.springframework.web.servlet.ModelAndView com.test.testcontroller.TestController.showMessage() 

如果它不存在就意味着请求未进行映射。请参阅下更新的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="3.0" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 

    <display-name>FirstSpringMVCProject</display-name> 

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

    <servlet-mapping> 
     <servlet-name>spring-dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

</web-app> 

做这一切后,你会得到

HTTP Status 404 - /spring-mvc-check/WEB-INF/helloworld.jsp 

要解决此提出的helloWorld.jsp WEB-INF内。

更新了pom.xml的

<?xml version="1.0" encoding="UTF-8"?> 
<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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.stackoverflow</groupId> 
    <artifactId>spring-mvc-check</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>4.2.6.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context-support</artifactId> 
      <version>4.2.6.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>2.6.2</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.mortbay.jetty</groupId> 
      <artifactId>jsp-api-2.0</artifactId> 
      <version>6.1.26</version> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.tomcat.maven</groupId> 
       <artifactId>tomcat7-maven-plugin</artifactId> 
       <version>2.2</version> 
      </plugin> 
     </plugins> 
    </build> 
</project> 
+0

得到这个错误---------------- 2016年6月10日下午4:08:16 org.springframework.web.servlet.PageNotFound noHandlerFound 警告:找不到HTTP请求的映射DispatcherServlet中名称为“spring-dispatcher”的URI [/ TestApp/index] – Muhammad

+0

您可以粘贴您的应用程序启动日志吗?您已经尝试过/ index,现在您还尝试了/ TestApp/index。你有没有在启动时看到/索引映射? –

+0

更新后的启动日志.. – Muhammad

0

尝试添加下弹簧调度的servlet

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
<init-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:spring-dispatcher-servlet.xml</param-value> 
</init-param> 
<load-on-startup>1</load-on-startup> 
+0

我已经尝试添加这个标签,但获取错误---- cvc-complex-type.2.4.a:发现无效内容从元素'init-param' – Muhammad

+0

发现你可以发布你的整个web.xml和servlet.xml ? –

+0

已更新后的更改。 – Muhammad

0

您在设置使用设置默认春(STS),而不是问题

首先,客人不愿意用的index.jsp。 只需使用helloworld.jsp。

(控制器)在浏览器

package com.test.testcontroller; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.servlet.ModelAndView; 

@Controller 
public class TestController { 

    @RequestMapping(value = "/show/message") 
    public ModelAndView showMessage(ModelAndView mv) { 
     System.out.println("in controller"); 

     mv.addObject("message", "this is a message for"); 
     mv.addObject("name", "Spring"); 
     mv.setViewName("/helloworld"); 

     return mv; 
    } 

} 

输入一个URL(你本地主机/上下文路径/显示/消息)。 你成功显示消息。

,如果你想使用的index.jsp (你index.jsp)之后

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
    <title>Spring 4 MVC - HelloWorld Index Page</title> 
    </head> 
    <body> 

     <center> 
      <h2>Hello World</h2> 
      <h3> 
       <a href="/show/message">Click Here</a> 
      </h3> 
     </center> 
    </body> 
    </html> 

您在控制器

@Controller 
public class TestController { 

.... 

    @RequestMapping(value = "/index") 
    public String showIndex() { 

     return "/index"; 
    } 

} 
-1

默认添加代码EL被禁用。

添加

<%@ page isELIgnored="false" %> 

把jsp启用它。