我是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}
...
文件路径
错误
我尝试清理服务器,关闭并打开浏览器,重新发布我的项目。
我现在不知道该怎么办,请帮助我。
我的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>
答案 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"})
如果您的配置不是这样,则应通过单击“添加”按钮并选择java Build Path Entries来添加它。
然后在下一个窗口中选择Maven依赖项。