【问题标题】:Http 404 Spring java configHttp 404 Spring Java 配置
【发布时间】:2015-12-28 20:28:51
【问题描述】:

您好,我在 spring 中遇到了 java config 的问题。我试图通过从多个教程中学习来完成它,但我仍然有问题。有什么线索吗?

error

AppConfig.java

package org.spring.mvc.libraryDemo.config;

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

/**
 * Created by wiktor on 28.12.2015.
 */
@Configuration //adnotacja oznaczajaca plik konfiguracyjny
@EnableWebMvc
@ComponentScan(basePackages = "org.spring.mvc.libraryDemo") //enable skan komponentow
@Import({AppConfig.class}) //na co musi jeszcze uwazac Spring
public class AppConfig {

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

}

SpringConfigInit

package org.spring.mvc.libraryDemo.config;

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

public class SpringConfigInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

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

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

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

}

控制器

package org.spring.mvc.libraryDemo.controllers;

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

/**
 * Created by wiktor on 28.12.2015.
 */
@Controller
public class HomeController {

    @RequestMapping(value="/",method= RequestMethod.GET)
    public String sayHello(ModelMap modelMap)
    {
        modelMap.addAttribute("greeting","witaj");
        return "index";
    }
}

Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

【问题讨论】:

    标签: java spring model-view-controller web configuration


    【解决方案1】:

    使用这种类型的 servlet 映射,我想您会在 http://localhost:8080/{warfile name}/ 找到您的应用,而不是在 http://localhost:8080/

    【讨论】:

    • warfile 名称我的意思是:如果您的warfile 名称是 MyApp.war,则 url 应该是 localhost:8080/MyApp 。 MyApp 之后必须有一个斜杠(Stack Overflow 省略了该斜杠)。你试过了吗?
    • 是的,但什么也没发生
    【解决方案2】:

    您在这里混合了两种方法(如您的 web.xml 所示):

    ContextLoaderListener with /WEB-INF/applicationContext.xml : 这意味着你的 spring 应用程序将由 applicationContext.xml 中的 xml 内容配置。

    但显然你想使用Java Config,即在@Configuration 注释类下定义的bean。要启用此功能,一种方法是将您的 web xml 更改为以下内容:

    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>contextClass</param-name>
            <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
        </init-param>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>SpringRootConfig</param-value>
        </init-param>
    </servlet>
    

    AnnotationConfigWebApplicationContext 是这里的关键。这将扫描您的类路径并考虑 @Configuration 的东西。

    【讨论】:

    • 尝试了类似的方法,但与您的尝试相同:d 我在 init-param 之间有错误。
    【解决方案3】:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    
        <context-param>
            <param-name>contextClass</param-name>
            <param-value>
                org.springframework.web.context.support.AnnotationConfigWebApplicationContext
            </param-value>
        </context-param>
    
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>org.spring.mvc.libraryDemo.config.AppConfig</param-value>
        </context-param>
    
        <servlet>
            <servlet-name>spring</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
            </servlet-mapping>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    </web-app>
    

    【讨论】:

      猜你喜欢
      • 2012-10-07
      • 1970-01-01
      • 2017-03-28
      • 2014-06-27
      • 2015-03-24
      • 2019-01-01
      • 2023-03-21
      • 2023-03-19
      • 2014-07-15
      相关资源
      最近更新 更多