"no mapping found" 错误 java spring MVC 没有 xml 配置
"no mapping found" error java spring MVC with no xml configuration
我是 Spring + MVC 的新手。
我找到了一个脚本,我可以 运行 这个脚本的某些部分。
此脚本配置 spring mvc,没有 xml,在 java 端。
我把所有的罐子都放进了 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
}
我有两个问题:
- 如果我写“http://localhost:8080/SpringMVC/”,页面会显示。
但是如果我写“http://localhost:8080/SpringMVC/movies/index”我会收到这个警告:
"WARNING: No mapping found for HTTP request with URI [/SpringMVC/WEB-INF/views/index.jsp] in DispatcherServlet with name 'spring'"
- 如果我在 WebContent 下添加一个 JSP 页面(Giris.jsp),我将无法显示该页面。必须所有页面都有映射吗?如何显示简单的 jsp 页面?
警告:在名称为 '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)
对这个逻辑有什么建议吗?
此致。
- 在MovieController.java中需要添加'/'
:
@RequestMapping("/movies")
- 您正在使用
servlet.addMapping("/*");
,这意味着您的 org.springframework.web.servlet.DispatcherServlet
,即 Spring 将拦截进入您的应用程序的每个请求。现在,您在任何控制器中都没有 Giris.jsp
的任何 RequestMapping
,因此 Spring 抛出错误:未找到具有 URI [/SpringMVC/Giris.[ 的 HTTP 请求的映射。 =105=]]
为了显示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
,当为控制器返回视图名称 'Giris' 时,InternalResourceViewResolver 添加您定义的前缀和后缀,并显示该页面。因此,如果视图名称 'Giris',将呈现页面 '/WEB-INF/views/'+ 'Giris' + '.jsp'
。
- 根据 java naming convention,JSP(文件)名称应始终以 lower-case 字母开头。所以使用
giris.jsp
而不是 Giris.jsp
编辑(修改后的问题):
Failed to load resource: http://localhost:8080/js/film/filmler.js
请注意,由于 DispatcherServlet
映射到 /*
,您 web-app 的每个请求都由 DispatcherServlet
处理,即 Spring
。
只要您的应用程序遇到 url http://localhost:8080/js/film/filmler.js,它就知道 DispatcherServlet
会处理 url。 DispatcherServlet
检查 url(在控制器中)是否有任何 RequestMapping
。
现在,当您添加 url
没有可以处理此类 url 的 RequestMapping,因此您得到的是 url。
加载js文件或图片文件等资源,使用mvc:resources
.
例如:
对于 js 文件:
将所有 js 文件放在目录 /WEB-INF/js/
.
中
在您的配置中为 js 文件添加 mvc:resource 映射:
<mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
现在您将能够访问您的 js 文件。如果 Spring 遇到 url 例如 /js/film/filmler.js
,它会从 mvc:resource 映射中知道在哪里寻找那个文件。
Goof mvc:resource 教程。
我是 Spring + MVC 的新手。 我找到了一个脚本,我可以 运行 这个脚本的某些部分。 此脚本配置 spring mvc,没有 xml,在 java 端。 我把所有的罐子都放进了 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
}
我有两个问题:
- 如果我写“http://localhost:8080/SpringMVC/”,页面会显示。 但是如果我写“http://localhost:8080/SpringMVC/movies/index”我会收到这个警告:
"WARNING: No mapping found for HTTP request with URI [/SpringMVC/WEB-INF/views/index.jsp] in DispatcherServlet with name 'spring'"
- 如果我在 WebContent 下添加一个 JSP 页面(Giris.jsp),我将无法显示该页面。必须所有页面都有映射吗?如何显示简单的 jsp 页面?
警告:在名称为 '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)
对这个逻辑有什么建议吗?
此致。
- 在MovieController.java中需要添加'/' :
@RequestMapping("/movies")
- 您正在使用
servlet.addMapping("/*");
,这意味着您的org.springframework.web.servlet.DispatcherServlet
,即 Spring 将拦截进入您的应用程序的每个请求。现在,您在任何控制器中都没有Giris.jsp
的任何RequestMapping
,因此 Spring 抛出错误:未找到具有 URI [/SpringMVC/Giris.[ 的 HTTP 请求的映射。 =105=]]
为了显示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
,当为控制器返回视图名称 'Giris' 时,InternalResourceViewResolver 添加您定义的前缀和后缀,并显示该页面。因此,如果视图名称 'Giris',将呈现页面 '/WEB-INF/views/'+ 'Giris' + '.jsp'
。
- 根据 java naming convention,JSP(文件)名称应始终以 lower-case 字母开头。所以使用
giris.jsp
而不是Giris.jsp
编辑(修改后的问题):
Failed to load resource: http://localhost:8080/js/film/filmler.js
请注意,由于 DispatcherServlet
映射到 /*
,您 web-app 的每个请求都由 DispatcherServlet
处理,即 Spring
。
只要您的应用程序遇到 url http://localhost:8080/js/film/filmler.js,它就知道 DispatcherServlet
会处理 url。 DispatcherServlet
检查 url(在控制器中)是否有任何 RequestMapping
。
现在,当您添加 url
没有可以处理此类 url 的 RequestMapping,因此您得到的是 url。
加载js文件或图片文件等资源,使用mvc:resources
.
例如:
对于 js 文件:
将所有 js 文件放在目录 /WEB-INF/js/
.
在您的配置中为 js 文件添加 mvc:resource 映射:
<mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
现在您将能够访问您的 js 文件。如果 Spring 遇到 url 例如 /js/film/filmler.js
,它会从 mvc:resource 映射中知道在哪里寻找那个文件。
Goof mvc:resource 教程。