簡體   English   中英

“未找到映射”錯誤,沒有xml配置的java spring MVC

[英]“no mapping found” error java spring MVC with no xml configuration

我是Spring + MVC的新手。 我找到了一個腳本,可以運行該腳本的某些部分。 此腳本在Java端內部配置不帶xml的spring mvc。 我把所有的罐子放到WEB-INF / lib中。

ControllerConfiguration .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;
    }

}

電影.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 ”,則會收到此警告:

“警告:在DispatcherServlet中,名稱為“ spring”的URI [/SpringMVC/WEB-INF/views/index.jsp]找不到HTTP請求的映射”

  1. 如果在WebContent下添加JSP頁面(Giris.jsp),則無法顯示此頁面。 所有頁面都必須有映射嗎? 如何顯示簡單的jsp頁面?

警告:在DispatcherServlet中,名稱為“ spring”的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. 在MovieController.java中,您需要添加'/':

@RequestMapping("/movies")

  1. 您正在使用servlet.addMapping("/*"); 這意味着您的org.springframework.web.servlet.DispatcherServlet即Spring將攔截到您的應用程序的每個請求 現在,您在任何控制器中都沒有針對Giris.jsp RequestMapping ,因此Spring拋出錯誤,因為:未找到具有URI [/SpringMVC/Giris.jsp]的HTTP請求的映射。

為了顯示Giris.jsp頁面,您需要:

A]使用“ Giris.jsp”的RequestMapping在條目中添加條目//新建控制器,並將視圖設置為“ 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 ,當以“ Giris”的形式返回控制器的視圖名稱時,InternalResourceViewResolver將添加您定義的前綴和后綴,並顯示該頁面。 因此,在視圖名稱為“ Giris”的情況下,將呈現頁面'/WEB-INF/views/'+ 'Giris' + '.jsp'


  • 根據Java命名約定 ,JSP(文件)名稱應始終以小寫字母開頭。 因此,請使用giris.jsp而不是Giris.jsp


編輯(對於修改的問題):

無法加載資源: http:// localhost:8080 / js / film / filmler.js

可以理解,由於DispatcherServlet映射到/* ,因此Webpat的每個請求都由DispatcherServlet處理,即Spring

每當您的應用程序遇到URL http:// localhost:8080 / js / film / filmler.js時 ,它就會知道DispatcherServlet將處理該URL。 DispatcherServlet檢查url(在控制器中)是否存在任何RequestMapping

現在,當您添加網址時

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

沒有可以處理此類網址的RequestMapping,因此您將獲得一個網址。

要加載js文件或圖像文件等mvc:resources ,請使用mvc:resources

例如:對於js文件:將所有js文件放在目錄/WEB-INF/js/

在配置中為js文件添加mvc:resource映射:

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

現在,您將能夠訪問您的js文件。 如果Spring遇到/js/film/filmler.js URL,它將從mvc:resource映射知道在哪里尋找該文件。

Goof mvc:教程資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM