gpt4 book ai didi

spring-mvc - WebApplicationInitializer 的 Spring MVC 实现

转载 作者:行者123 更新时间:2023-12-02 02:09:42 25 4
gpt4 key购买 nike

我已经学会了如何使用 XML 配置 Spring MVC 应用程序,所以我决定继续。

我阅读了有关 WebApplicationInitializer 和最小化应用程序配置中的 XML 的文档。但是当我完成示例应用程序的所有准备工作时,我遇到了 404 页面。

此外,我放了我的代码片段,请给我建议如何正确制作基于@的方法。

配置文件:

package com.onet.init;

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.UrlBasedViewResolver;

@Configuration
@ComponentScan("com.onet")
@EnableWebMvc
public class BaseConfig {

@Bean
public UrlBasedViewResolver setupViewResolver() {
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}

}

初始化器:

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration.Dynamic;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

public class Initializer implements WebApplicationInitializer {

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(BaseConfig.class);

Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
servlet.addMapping("*.html");
servlet.setLoadOnStartup(1);
}

}

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>oneTest</groupId>
<artifactId>oneTest</artifactId>
<version>0.0.1-SNAPSHOT</version>

<packaging>war</packaging>

<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>

<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>

</project>

Controller :

package com.onet.controller;

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

@Controller
public class HelloController {

@RequestMapping(value="/hello")
public ModelAndView goToHelloWorld() {
return new ModelAndView("hello-world");
}

}

索引.jsp

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Home page</title>
</head>
<body>
<h1>Home page</h1>
<p>This is a home page.</p>
<p><a href="hello.html">Say Hello</a></p>
</body>
</html>

所以当我点击“Say Hello”链接时,我得到了 404。整个项目你可以download从我的投递箱。

最佳答案

我刚刚查看了您保管箱中的项目。在我看来,项目的结构是错误的。您将 maven-scruture 与 eclipse-structure 混合在一起。当你使用 maven 时,你将 webcontent 放在 src/main/webapp... 而不是像你那样放在 WebContent 中。你可以看看here有关此主题的更多详细信息。

简短版:

将文件从 WebContent 移动到 src/main/webapp 并重试。

长版:

如果您运行 mvn package 并从 /target 目录中提取生成的 *.war,您将看到它缺少来自 WebContent 的文件目录。 Maven 期望这些文件位于 src/main/webapp 中。我假设您是从在 Eclipse 中创建“动态 Web 项目”开始的。 Eclipse 期望像 *.j​​sp 和 co 这样的资源。位于 WebContent 中,这就是调用 index.jsp 的原因。但是当涉及到 spring 时它失败了,因为 hello-world.jsp 没有位于它应该位于的位置。

如何修复:

首先将文件从 WebContent 移动到 src/main/webapp。然后运行 ​​mvn eclipse:eclipse -Dwtpversion=2.0。它将生成 eclipse 的配置(.classpath、.project 等)。在 Eclipse 中刷新项目。现在它应该可以工作了。

关于spring-mvc - WebApplicationInitializer 的 Spring MVC 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13455314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com