使用java的spring3.05 mvc注解后出现错误:No mapping found for HTTP request with URI
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用java的spring3.05 mvc注解后出现错误:No mapping found for HTTP request with URI相关的知识,希望对你有一定的参考价值。
//----web.xml配置
<servlet>
<servlet-name>annomvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/annomvc-servlet.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>annomvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
//----annomvc-servlet.xml配置
<context:annotation-config />
<!-- 把标记了@Controller注解的类转换为bean -->
<context:component-scan base-package="com.svs.master.controller" />
//---controller
@Controller
@RequestMapping(value = "/userlogin.do")
public class UserLoginController
@RequestMapping(params="method=login", method = RequestMethod.POST)
public String userLogin(HttpServletRequest request,
HttpServletResponse response) throws Exception
//...方法内容
改为
<url-pattern>/</url-pattern>
这好像是spring框架处理所有请求的特定写法,这和Filter写法不一致 参考技术B
No mapping found for HTTP request with URI
我也遇到这个问题,反正我就是这么改就解决问题了
<!-- Spring MVC的核心是DispatcherServlet,这个servlet充当Spring MVC的前端控制器 <servlet-name>spitter</servlet-name>一定要spitter.servlet.xml配置文件 --><servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 通过将DispatcherServlet映射到/,声明了它会作为默认的servlet并且会处理所有的请求,包括对静态资源的请求 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
改成:
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
页面
报错:
No mapping found for HTTP request with URI
[/test/csy/page/userlogin.do] in DispatcherServlet with name 'annomvc'
Spring MVC的常用注解
Spring Boot 默认集成了Spring MVC,下面为Spring MVC一些常用注解。
开发环境:IntelliJ IDEA 2019.2.2
Spring Boot版本:2.1.8
新建一个名称为demo的Spring Boot项目。
一、Controller注解
Controller注解用于修饰Java类,被修饰的类充当MVC中的控制器角色。
Controller注解使用了@Component修饰,使用Controller注解修饰的类,会被@ComponentScan检测,并且会作为Spring的bean被放到容器
中。
package com.example.demo; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class DemoController @RequestMapping("/index") @ResponseBody public String index() return "index";
运行项目后,浏览器访问:http://localhost:8080/index,页面显示:
index
二、RestController注解
RestController注解是为了更方便使用@Controller和@ResponseBody。
@ResponseBody修饰控制器方法,方法的返回值将会被写到HTTP的响应体中,所返回的内容不放到模型中,也不会被解释为视图的名称。
下面例子等同于上面例子。
package com.example.demo; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class DemoController @RequestMapping("/index") public String index() return "index";
三、RequestMapping注解
RequestMapping注解可修饰类或方法,主要用于映射请求与处理方法。
当用于修饰类并设置了URL时,表示为各个请求设置了URL前缀。
RequestMapping注解主要有以下属性:
(1)path与value:用于配置映射的url;
(2)method:映射的HTTP方法,如GET、POST、PUT、DELETE;
也可以使用默认配置了@RequestMapping的method属性的几个注解:
@GetMapping等同于RequestMapping(method="RequestMethod.GET")
@PostMapping、@PutMapping、@DeleteMapping类似。
(3)params:为映射的请求配置参数标识;
(4)consumes:配置请求的数据类型,如XML或JSON等;
(5)produces:配置响应的数据类型,如“application/json”返回json数据;
package com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/oa") public class DemoController @RequestMapping(value = "/index1") public String index1() return "index1"; @RequestMapping(value = "/index2", method = RequestMethod.GET) public String index2() return "index2"; @GetMapping(value = "/index3") public String index3() return "index3";
浏览器分别访问:
http://localhost:8080/oa/index1
http://localhost:8080/oa/index2
http://localhost:8080/oa/index3
页面分别显示:
index1
index2
index3
四、PathVariable注解
PathVariable注解主要用于修饰方法参数,表示该方法参数是请求URL的变量。
package com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @RestController public class DemoController @GetMapping("/index1/name") public String index1(@PathVariable String name) return "index1: " + name; //可以为@PathVariable配置属性值,显式绑定方法参数与URL变量的值 @GetMapping("/index2/name") public String index2(@PathVariable("name") String lc) return "index2: " + lc;
浏览器访问http://localhost:8080/index1/a
页面显示:
a
访问http://localhost:8080/index1/b
页面显示:
b
五、RequestParam注解
RequestParam注解用于获取请求体中的请求参数,如表单提交后获取页面控件name值。
package com.example.demo; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.Map; @RestController public class DemoController @PostMapping("/index1") public String index1(@RequestParam String userName) return userName; //map存放所有请求参数 @PostMapping("/index2") public String index2(@RequestParam Map<String,String> map) String age = map.get("age"); String sex = map.get("sex"); return age + "," + sex;
随便在电脑中如桌面新建一个html文件:
<html> <body> <form method="post" action="http://localhost:8080/index1"> <input type="text" name="userName" value="abc" /> <input type="submit" value="提交1" /> </form> <form method="post" action="http://localhost:8080/index2"> <input type="text" name="age" value="22" /> <input type="password" name="sex" value="male" /> <input type="submit" value="提交2" /> </form> </body> </html>
浏览器打开后,如果点击“提交1”按钮后,页面跳到http://localhost:8080/index1,显示abc。
如果点击“提交2”按钮后,页面跳到http://localhost:8080/index2,显示22,male。
六、文件上传
使用RequestParam注解可以实现文件上传。
package com.example.demo; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; @RestController public class DemoController @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) throws IOException String fileName = file.getOriginalFilename(); String filePath = "D:/"; File dest = new File(filePath + fileName); file.transferTo(dest); return "上传成功";
随便新建一个html文件
<html> <body> <form method="post" action="http://localhost:8080/upload" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit" value="提交" /> </form> </body> </html>
浏览器打开后,选择一个文件,点击提交后,文件保存到了D盘。
以上是关于使用java的spring3.05 mvc注解后出现错误:No mapping found for HTTP request with URI的主要内容,如果未能解决你的问题,请参考以下文章
如何在带有注解配置的spring mvc中使用spring数据