在Eclipse中使用Spring MVC 5的新项目,但出现错误404

时间:2019-08-19 03:41:45

标签: java eclipse spring-mvc

我是Spring MVC的新手,我正在尝试制作一个简单的HelloWorld程序,我正在按照本教程https://www.javaguides.net/2018/10/spring-mvc-5-hello-world-example.html

AppConfig

package main.java.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {
"main.java"
})
public class AppConfig {

@Bean
public InternalResourceViewResolver resolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setViewClass(JstlView.class);
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".jsp");
    return resolver;
}
}

调度程序Servlet初始化程序

package main.java.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletDispatcherInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected Class <?> [] getRootConfigClasses() {
    // TODO Auto-generated method stub
    return null;
}

@Override
protected Class <?> [] getServletConfigClasses() {
    return new Class[] {
        AppConfig.class
    };
}

@Override
protected String[] getServletMappings() {
    return new String[] {
        "/"
    };
}
}

控制器

package main.java.controller;

import java.time.LocalDateTime;

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

import main.java.model.HelloWorld;

@Controller
public class JavaController {

@RequestMapping("/helloworld")
public String handler(Model model) {

    HelloWorld helloWorld = new HelloWorld();
    helloWorld.setMessage("Hello World Example Using Spring MVC 5!!!");
    helloWorld.setDateTime(LocalDateTime.now().toString());
    model.addAttribute("helloWorld", helloWorld);
    return "helloworld";
}
}

模型

package main.java.model;

public class HelloWorld {
private String message;
private String dateTime;
public String getMessage() {
    return message;
}
public void setMessage(String message) {
    this.message = message;
}
public String getDateTime() {
    return dateTime;
}
public void setDateTime(String dateTime) {
    this.dateTime = dateTime;
}
}

JSP

...
      ${helloWorld.message}</h2>
      Server date time is : ${helloWorld.dateTime}
...

文件路径

enter image description here

错误

enter image description here

我尝试清理服务器,关闭并打开浏览器,重新发布我的项目。

我现在不知道该怎么办,请帮助我。

我的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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>SpringMVC5</groupId>
  <artifactId>SpringMVC5</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>

 <name>springmvc5-helloworld-exmaple Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <properties>
   <failOnMissingWebXml>false</failOnMissingWebXml>
    </properties>
    <dependencies>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.1.0.RELEASE</version>
    </dependency>

    <!-- JSTL Dependency -->
    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>javax.servlet.jsp.jstl-api</artifactId>
        <version>1.2.1</version>
    </dependency>
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>

    <!-- Servlet Dependency -->
    <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>javax.servlet-api</artifactId>
         <version>3.1.0</version>
         <scope>provided</scope>
    </dependency>

    <!-- JSP Dependency -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.1</version>
        <scope>provided</scope>
    </dependency>
 </dependencies>

  <build>
<sourceDirectory>src</sourceDirectory>
<plugins>
  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
      <release>11</release>
    </configuration>
  </plugin>
</plugins>

    

3 个答案:

答案 0 :(得分:1)

可能的问题之一是您的软件包命名错误。 Maven项目的文件夹结构如下所示:

src
  |_ main
  |     |_ java
  |     |     |_ your.actual.package
  |     |_ resources
  |     |_ webapp
  |_ test
        |_ java
              |_ your.actual.package

因此,您的实际包在java文件夹之后立即开始。这意味着您实际上拥有:

  • config软件包,而不是main.java.config类的AppConfig

  • controller软件包,而不是main.java.controller

  • JavaController
  • model软件包,而不是main.java.model的{​​{1}}

此外,您还需要更改HelloWorld。将其保留为空以扫描根软件包。或尝试使用@ComponentScan(如果不起作用)。

之后,您需要检查basePackageClasses文件。将其解压缩,并检查war文件夹是否包含所有创建的类的WEB-INF文件,并且.class是否有您的views文件。

我希望这会有所帮助。

答案 1 :(得分:0)

不确定确切的问题出在哪里,但是这里有一个完整的项目适合您。 您可以从这里获得帮助:

https://github.com/imrangthub/BlogSolutionUsingSpringHibernateWithClassLevelConfig

答案 2 :(得分:0)

1-

您应该在@ComponentScan注释中列出所有包,包括配置类,而不是main.java: @ComponentScan(basePackages = {"config","controller"})

将所有包移动到父包(例如com.project)中,例如 com.project.config,com.project.controller,com.project.model并使用它:

@ComponentScan(basePackages = {"com.project"})

2-检查项目的Web依赖程序集,它应该像这样: enter image description here

如果您的配置不是这样,则应通过单击“添加”按钮并选择java Build Path Entries来添加它。

enter image description here

然后在下一个窗口中选择Maven依赖项。