Spring MVC控制器已达到,但我仍然得到404

时间:2018-06-20 15:52:35

标签: java spring spring-mvc jsp

我已经建立了一个非常基本的spring mvc Web应用程序,这是我的控制器类中有问题的开头/部分

@Controller
public class MainController {

    @Autowired
    AssetDAO assetDAO;

    @RequestMapping("/")
    public String home() {
    System.out.println("HERE!");
    return "index";
}

和我的index.jsp文件

<%@page language="java" contentType="text/html; charset=UTF-8" paegeEncoding="UTF-8"%>

<!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=UTF-8">
    <title> Welcome Page </title>
</head>

<body>
    <div>
        <h1> Asset Tracking Web App Test </h1>
        <a href="EmployeeList">Get Employee Records</a>
    </div>
</body>


</html>

但是访问localhost:8080/时出现404错误。但是消息HERE被打印

编辑:我在我的src / main / resources文件夹中添加了一个application.properties文件,该文件解决了该问题...现在我的问题是,这与使用InternalViewResolver有何不同?还是我对此的理解是错误的??

EDIT2:项目的文件结构如下

.
├── pom.xml
├── src
│   └── main
│       ├── java
│       │   └── com
│       │       └── assetTracking
│       │           ├── App.java
│       │           ├── AssetDAO.java
│       │           ├── Employee.java
│       │           └── MainController.java
│       ├── resources
│       │   └── application.properties
│       └── webapp
│           └── WEB-INF
│               ├── jsp
│               │   ├── employeeList.jsp
│               │   └── index.jsp
│               └── views.xml
├── tableCreatiosn.sql
├── tableEntries

为了简洁起见,省略了所有依赖项目录。由耶茨(Yates)建议使用这些文件并不能解决问题。但是,将它们替换为application.properties

application.properties
spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp

welcome.message: Hello Test

3 个答案:

答案 0 :(得分:2)

可能您尚未配置InternalViewResolver。如果是,那么它将index.jsp定位在某个错误的位置。

以下是InternalViewResolver

的配置

XML:

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">

    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
</bean>

Java

@EnableWebMvc
@Configuration
@ComponentScan("<package_fully_qualified_name>")
public class WebConfig implements WebMvcConfigurer {

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

答案 1 :(得分:0)

如果您的servlet上没有带属性前缀和后缀的viewResolver bean,spring将不知道“ index”的后缀是什么,因此找不到它。您可以对所有jsp文件使用viewResolver。

这是XML配置:

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

希望有帮助。

编辑

要配置servlet,请将其添加到web.xml(在您的情况下可能是views.xml?):

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

 <servlet-mapping>
   <servlet-name>servletname</servlet-name>
   <url-pattern>/</url-pattern>
 </servlet-mapping>

并且不要忘记创建servlet“ servletname-servlet.xml”,您可以使用应用程序名称代替servlet名称。然后将上面的bean添加到您的servlet中,它应该可以工作。

选中this,如果我忘记了其他任何内容,它可能会对您有所帮助。

答案 2 :(得分:0)

这是无法呈现的jsp页面。

尝试在pom.xml中添加以下依赖项。

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>

如果使用Intellij IDE运行,则可能需要将jasper范围更改为“默认”。