当前位置: 首页 > 知识库问答 >
问题:

“找不到映射”错误Java spring MVC没有xml配置

张承颜
2023-03-14

我是spring+MVC的新手。我找到了一个脚本,我可以运行这个脚本的一部分。这个脚本配置spring mvc没有xml,在Java方面.我将所有的jar放入web-inf/lib。

控制器配置.Java

package org.java.springmvc.bootstrap;

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;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "org.java.springmvc.controller")
public class ControllerConfiguration {

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

}

WebAppInitializer.java

package org.java.springmvc.bootstrap;

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 WebAppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(final ServletContext servletContext) throws ServletException {
        final AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext();
        root.setServletContext(servletContext);
        root.scan("org.java.springmvc.bootstrap");
        root.refresh();

        final Dynamic servlet = servletContext.addServlet("spring", new DispatcherServlet(root));
        servlet.setLoadOnStartup(1);
        servlet.addMapping("/*");
    }

}

HomeController.java

package org.java.springmvc.controller;

import java.io.IOException;
import java.io.Writer;

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

@Controller
public class HomeController {

    @RequestMapping(value = "/")
    public void home(final Writer writer) 
            throws IOException  {
        writer.append("<h2>Welcome, XML Free Spring MVC!</h2>");
    }

    @RequestMapping(value = "/giris")
    public void giris(final Writer writer) 
            throws IOException  {
            writer.append("Giris");
    } 

}

FilmController.java

package org.java.springmvc.controller;

import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.java.springmvc.model.Film;
import org.java.springmvc.model.Film.FilmTurleri;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/film")
public class FilmController {

    @RequestMapping(value = "filmler")
    public void filmler(final Writer writer) 
            throws IOException  {
        writer.append("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-9\"><title>...Filmler...</title>");
        writer.append("<script type=\"text/javascript\" src=\"/js/touch/sencha-touch-all.js\"></script>");
        writer.append("<script type=\"text/javascript\" src=\"/js/film/filmler.js\"></script>");
        writer.append("</head><body></body></html>");

    } 

    @RequestMapping (value = "/filmleriGetir", method = RequestMethod.GET)
    public @ResponseBody Map<String, List<Film>> FilmleriGetir() {
        List<Film> movies = new ArrayList<Film>();

        // For testing...
        movies.add(new Film(0, "Birinci Film", "Birinci Yönetmen", 2015, FilmTurleri.Aksiyon));
        movies.add(new Film(0, "İkinci Film", "İkinci Yönetmen", 2015, FilmTurleri.Komedi));
        movies.add(new Film(0, "Üçüncü Film", "Üçüncü Yönetmen", 2015, FilmTurleri.Aile));

        Map<String, List<Film>> resp = new HashMap<String, List<Film>>();
        resp.put("filmListesi", movies);
        return resp;
    }

}

film.java

package org.java.springmvc.model;

public class Film {

    public int Id;
    public String FilmAdi, Yonetmen;
    public int CikisTarihi;
    public FilmTurleri Turu;

    public enum FilmTurleri {
        Aksiyon, Komedi, Aile, Korku, Savas;
    }

    public Film(){

    }

    public Film(int id, String title, String director, int yearOfRelease, FilmTurleri tur)
    {
        super();
        this.Id = id;
        this.FilmAdi = title;
        this.Yonetmen = director;
        this.CikisTarihi = yearOfRelease;
        this.Turu = tur;
    }
    //getter, settings method
}

我有两个问题:

  1. 如果我写“http://localhost:8080/springmvc/”,页面将显示。但如果我写“http://localhost:8080/springmvc/movies/index”,则会收到以下警告:

“警告:在名为”spring“的DispatcherServlet中找不到URI为[/springmvc/web-inf/views/index.jsp]的HTTP请求的映射”

警告:在名为“spring”的DispatcherServlet中找不到URI为[/springmvc/giris.jsp]的HTTP请求的映射

编辑:我改变了一点。我的项目结构是这样的:

我得到这个错误:

无法加载资源:

http://localhost:8080/js/film/filmler.js

http://localhost:8080/js/touch/sencha-touch-all.js

我想这样一个逻辑

- there will be a jsp file including "*.js" files. (filmler.jsp)

- there are some methods returning json object in those *.js files. (FilmleriGetir method)

对这个逻辑有什么建议吗?

问候。

共有1个答案

宫铭
2023-03-14
  1. 在MovieController.java中,需要添加“/”:

@requestmapping(“/movies”)

为了显示giris.jsp页面,您需要:

a]使用requestmapping为“giris.jsp”添加条目/创建新控制器,并将视图设置为“giris”

例如:

   @Controller
public class MyController {

    @RequestMapping(value = "/Giris.jsp")
    public void home(final Writer writer) 
            throws IOException  {
            return 'Giris';
    }    
}

您最好将RequestMapping用作/giris而不是/giris.jsp,因为它公开了基础技术是JSP。

b]将giris.jsp文件放在/web-inf/views/文件夹下。

了解InternalResourceViewResolver的工作原理。参考您的controllerconfiguration,当为controller返回视图名称为“giris”时,InternalResourceViewResolver会添加您定义的前缀和后缀,然后显示该页面。因此,如果视图名称为“giris”,将呈现页'/web-inf/views/'+'giris'+'.jsp'

  • 根据Java命名惯例,JSP(文件)名应该始终以小写字母开头。因此使用giris.jsp而不是giris.jsp

编辑(对于修改的问题):

无法加载资源:http://localhost:8080/js/film/filmler.js

请理解,当DispatcherServlet映射到/*时,到达Web应用程序的每个请求都由DispatcherServletspring处理。

每当应用程序遇到url http://localhost:8080/js/film/filmler.js时,它就知道dispatcherServlet将处理该url。DispatcherServlet检查url(在controller中)是否有任何RequestMapping

现在,当您添加url

http://localhost:8080/js/film/filmler.js

没有RequestMapping可以处理这类url,所以您得到的是一个url。

对于加载js文件或图像文件等资源,请使用mvc:resources

例如:对于js文件:将所有的js文件放在/web-inf/js/目录中。

在您的配置中为js文件添加mvc:resource mapping:

 <mvc:resources mapping="/js/**" location="/WEB-INF/js/" />

现在您将能够访问您的js文件。如果spring遇到/js/film/filmler.js之类的url,它将从mvc:resource映射中知道在哪里查找该文件。

Goof MVC:教程资源。

 类似资料:
  • 从控制器返回Html页面时获取此错误 org.springframework.web.servlet.页未找到noHandler已找到警告:没有找到HTTP请求与URI[/SpringMVCDemo/WEB-INF/response.html]在DispatcherServlet名称调度器映射 放在哪里response.html? 这是我的密码

  • 我写了一个spring boot项目。它有三个文件。 appconfig.java HelloController.java 当我尝试运行它时,它出现了错误“没有为名为'DispatcherServlet中URI[/springc1_01/]的HTTP请求找到映射”。这是因为服务器没有找到控制器还是其他原因?THX.

  • 尝试以以下方式创建(或者更确切地说学习)一个: 我正在使用一个在线编译器,并且已经搜索了很多,我发现我的声明方式是正确的,但是出现了其他错误 下面是错误 我需要帮助的是:我只是想了解创建hashmap并在其中插入一些键和值的基本知识,但是上面的错误在第一步就阻止了我……非常感谢对解决此问题的任何帮助!!:)

  • 问题内容: 在我的applicationContext.xml中,这就是将xml映射到POJO的方式。如何将目录映射到类文件而无需创建xml? 问题答案: 您可以通过转换进一步简化操作 至 现在您的包中所有带有注释的类都将自动被拾取。

  • XML 映射配置文件 MyBatis 的 XML 配置文件包含了影响 MyBatis 行为甚深的设置和属性信息。 XML 文档 的高层级结构如下: configuration 配置 properties 属性 settings 设置 typeAliases 类型命名 typeHandlers 类型处理器 objectFactory 对象工厂 plugins 插件 environments 环境 e