Spring MVC未显示预期结果

问题描述:

我是Spring MVC和Maven的新手。我在eclipse中创建了一个maven web项目。为spring添加依赖关系并运行该项目,但我没有得到期望的结果。这里是我的项目结构Spring MVC未显示预期结果

Project Structure in eclipse

当我运行该项目,然后我得到的结果Hello World这是我的index.jsp

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
     <title>Hello</title> 
    </head> 
    <body> 
     <h1>Hello World</h1> 
    </body> 
</html> 

但是,当我改变URL http://localhost:8080/Spring_Maven/jsp/hello我得到HTTP Status 500 error。当我改变URL http://localhost:8080/Spring_Maven/jsp/hello.jsp然后我得到的输出${message}

,这里是我的hello.jsp页面

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
     <title>Hello</title> 
    </head> 
    <body> 
     <h1>${message}</h1> 
    </body> 
</html> 

这里是我的web.xml

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

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

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

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/springMaven-dispatcher-servlet.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

</web-app> 

这里是我的springMaven,调度员-servlet.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.2.xsd"> 

    <context:component-scan base-package="pk.training.basitMahmood.springMaven.controller" /> 

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

这里是依赖项列表tha T I基于Maven

spring dependencies

添加什么,我做错了什么?

+0

我在搜索过程中发现的一件事是,maven依赖项应该复制到'WEB-INF/lib'文件夹中。但它不是复制。虽然当我去'项目属性 - >部署大会'我有'Meven依赖映射到WEB-INF/lib'。但是我的WEB-INF中没有lib文件夹。我还不知道是否需要手动创建该文件夹。我也尝试通过手动创建文件夹,但罐子不复制到lib文件夹不知道为什么......但这是我的发现,直到:) – Basit 2013-05-09 10:56:07

最后我让它工作:)。但我想分享,所以新的maven和eclipse的人可以节省他们的时间。

首先我安装了m2e eclipse WTP plugin,然后创建maven项目,正如我在我的问题中所述。你需要做的是在你的pom.xml文件中添加编译器插件和JDK版本,否则每次你做right click on project --> Maven --> Update project你都会在标记选项卡中看到关于JRE and java EE configuration problem的错误。您还需要做right click on project --> properties --> Project facets --> Change java version以改变项目方面。这里是pom.xml的片段。

<build> 
    <finalName>SpringMavenHelloWorld</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

然后在web.xml我更新的servelt模式,我发现我需要定义两个调度员servlet和在servlet上下文我SERVET-dispatcer.xml文件。这是我的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 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" 
    version="3.0"> 
    <display-name>Spring_Maven</display-name> 
    <servlet> 
     <servlet-name>springMaven-dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
     <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/spring/springMaven-dispatcher-servlet.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

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

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/springMaven-dispatcher-servlet.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <welcome-file-list> 
      <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

</web-app> 

这是我的项目的结构。我改变了一下。在WEB-INF中创建一个spring文件夹,并将调度器servlet移入其中。

Final structure of my project

虽然在WEB-INF没有lib文件夹,但一切工作正常。我花了太多时间的是定义了servletcontext paramservelet init-param。如果我只有这样定义

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

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

<!-- 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/spring/springMaven-dispatcher-servlet.xml</param-value> 
</context-param> 
--> 

然后servlet的初始参数我得到了错误

SEVERE: Context initialization failed 
org.springframework.beans.factory.BeanDefinitionStoreException: 
IOException parsing XML document from ServletContext resource 
[/WEB-INF/applicationContext.xml]; nested exception is 
java.io.FileNotFoundException: Could not open ServletContext 
resource [/WEB-INF/applicationContext.xml] 

,如果我只定义背景PARAM像

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

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

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/spring/springMaven-dispatcher-servlet.xml</param-value> 
</context-param> 

然后我得到了错误

SEVERE: Context initialization failed 
org.springframework.beans.factory.BeanDefinitionStoreException: 
IOException parsing XML document from ServletContext resource 
[/WEB-INF/springMaven-dispatcher-servlet.xml]; nested exception is 
java.io.FileNotFoundException: Could not open ServletContext resource 
[/WEB-INF/springMaven-dispatcher-servlet.xml] 

但是def两者都解决了这个问题。现在,当我做right click on my project --> run on server然后我得到Hello World的页面URL http://localhost:8080/SpringMavenHelloWorld/,当我将其更改为http://localhost:8080/SpringMavenHelloWorld/hello然后我得到我想要的输出是

enter image description here

希望这将帮助其他人了。谢谢:)