java实战基础------一文搞定springmvc

本文详细介绍了SpringMVC框架的核心组件,包括DispatcherServlet的工作流程,@RequestMapping的请求映射,数据绑定(如PathVariable、RequestParam等),文件上传实现,以及拦截器的配置和执行。
摘要由CSDN通过智能技术生成

在这里插入图片描述

🎈个人主页:靓仔很忙i
💻B 站主页:👉B站👈
🎉欢迎 👍点赞✍评论⭐收藏
🤗收录专栏:java实战基础
🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!


springMVC简介

在这里插入图片描述
高内聚,低耦合
可扩展性太差
反复迭代

mvc回顾

在这里插入图片描述

springmvc 整体架构

在这里插入图片描述
1、用户发起请求到控制器 DispatcherServlet(前端控制器)
2、前端控制器去handlerMapper查找Handler对象
3、HandlerMapper返回HandlerExecutorChain 执行链(包含两部分内容:Handler ,拦截器集合)
4、前端控制器,通过HandlerAdapter 适配器执行 Handler对象
5、Handler处理具体的业务逻辑
6、Handler处理完业务逻辑之后,返回ModelAndView 其中的View是视图名称
7、将ModelAndView返回前端控制器
8、前端控制器,通过ModelAndView 中的视图名称。在视图解析器中查找视图
9、返回真正的View 视图对象
10、渲染视图
11、返回用户响应

使用RequestMapping映射请求

在SpringMVC中的众多Controller以及每个Controller的众多方法,请求是如何映射到具体的处理方法上?这个就是靠@RequestMapping完成的。
@RequestMapping既可以定义在类上也可以定义在方法上,
请求映射的规则是:
类上面的@RequestMapping.value + 方法上面的@RequestMapping.value。
五种映射:
1、标准URL映射
2、Ant风格的URL映射
3、占位符映射
4、限制请求方法映射
5、限制参数映射

标准url映射

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Ant风格的URL映射

在这里插入图片描述
举例:
@RequestMapping("/test//show")
匹配:
/hello/test/a/show.do
/hello/test/b/show.do
都是有效的。
@RequestMapping(“/test/**/show”)
hello/test/a/b/c/show.do
在这里插入图片描述
在这里插入图片描述
测试:
配置一个 /
在地址栏中分别输入
http://localhost:8080/demo/show1/a/test.do
http://localhost:8080/demo/show1/b/test.do

配置 /** 在地址栏输入
http://localhost:8080/demo/show2/b/a/d/test.do
http://localhost:8080/demo/show2/b/d/test.do

占位符映射

Url中可以通过一个或多个{xxxx}占位符映射。
通过@PathVariable(“xxx”)绑定到方法的入参中。
例如:
@RequestMapping(“/user/{userId}/query")
请求URL:
http://localhost/user/8/query
在这里插入图片描述
在这里插入图片描述

限制请求方法映射

在这里插入图片描述
限制请求方法:
在这里插入图片描述
在这里插入图片描述

限定请求参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

处理方法与数据绑定(被动接受)

绑定servlet内置对象

在这里插入图片描述
在这里插入图片描述

@PathVariable获取占位符中的参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

@RequestParam

在这里插入图片描述
注意:当defaultValue有值的时候,required自动修改成false
在这里插入图片描述
未设置 defaultValue时,访问时必须带上绑定的参数,否则会报400错误
在这里插入图片描述
设置defaultValue后,required属性失效,会自动给出默认值( defaultValue内设置的值)
在这里插入图片描述

@CookieValue

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

POJO对象绑定参数

SpringMVC会将请求过来的参数名和POJO实体中的属性名进行匹配,如果名称一致,将把值填充到对象中。
在这里插入图片描述
在这里插入图片描述

Java的基本数据类型绑定

在这里插入图片描述
表单代码:

<form action="/demos/demo1.action" method="post">
	<div>姓名:</div>
	<div><input name="name" value="张三"/></div>
	<div class="clear"></div>
	<div>年龄:</div>
	<div><input name="age" value="20"/></div>
	<div class="clear"></div>
	<div>收入:</div>
	<div><input name="income" value="100000"/></div>
	<div class="clear"></div>
	<div>结婚:</div>
	<div>
	<input type="radio" name="isMarried" value="true" checked="checked"/><input type="radio" name="isMarried" value="false"/></div>
	<div class="clear"></div>
	<div>兴趣:</div>
	<div>
	<input type="checkbox" name="interests" value="听歌" checked="checked"/>听歌
	<input type="checkbox" name="interests" value="书法" checked="checked"/>书法
	<input type="checkbox" name="interests" value="看电影" checked="checked"/>看电影
	</div>
	<div class="clear"></div>
	<div><input type="submit" value="提交表单"/></div>
</form>

在这里插入图片描述

集合List绑定

解决方案2:参考json处理。

如果方法需要接受的list集合,不能够直接在方法中书写List
List的绑定,需要将List对象包装到一个类中才能绑定
要求:表单中的name的值
要求表单name的值, 和封装的对象中的结合的属性名一致。
如下:
在这里插入图片描述
类:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

springmvc 和struts2的区别

在这里插入图片描述

使用ResponseBody输出JSON

ajax请求通常返回json数据,异步方法要使用@ResponseBody注解标明返回json
在这里插入图片描述
单个对象的输出:

@RequestMapping("getUser")
    @ResponseBody
    public User getUser(){
        
        User user = new User();
        user.setuserName("西门吹牛");
        user.setName("西门吹雪");
        user.setAge(1);
        return user;
    }

在这里插入图片描述
集合的输出:

 @RequestMapping("getUsers")
    @ResponseBody
    public List<User> getUsers(){
        
        List<User> users = new ArrayList<User>();
        for(int i =0;i<8;i++){
            User user = new User();
            user.setuserName("西门吹"+i+"牛");
            user.setName("西门吹雪"+i);
            user.setAge(i+1);
            users.add(user);
        }
        return users;
    }

在这里插入图片描述

RequestBody

在这里插入图片描述
代码:
在这里插入图片描述
在这里插入图片描述

文件上传

添加依赖

<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.1</version>
		</dependency>

定义文件上传解析器

定义在springmvc-servlet.xml里面

<!-- 定义文件上传解析器 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 设定默认编码 -->
		<property name="defaultEncoding" value="UTF-8"></property>
		<!-- 设定文件上传的最大值5MB,5*1024*1024 -->
		<property name="maxUploadSize" value="5242880"></property>
	</bean>

代码

package cn.itcast.springmvc.controller;

import java.io.File;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

@RequestMapping("/file")
@Controller
public class FileUploadController {
        /**
         * 文件上传
         */
	@RequestMapping("/upload")
	public String upload(@RequestParam("file") MultipartFile multipartFile)
			throws Exception {
		if (multipartFile != null) {
		        
			// multipartFile.getOriginalFilename() 获取文件的原始名称
			multipartFile.transferTo(new File("d:\\tmp\\" + multipartFile.getOriginalFilename()));
		}
		return "success";
	}
}

转发和重定向

重定向

使用视图名字前加:redirect:/success.html
在这里插入图片描述
访问路径:
在这里插入图片描述
实际响应后路径:
在这里插入图片描述

转发

在视图名称前加上: forward:
在这里插入图片描述

拦截器

在这里插入图片描述

拦截器执行过程

在这里插入图片描述

编写自定义拦截器

在这里插入图片描述

配置拦截器

<mvc:interceptors>
		<mvc:interceptor>
<!-- 			path: 拦截所有请求 -->
			<mvc:mapping path="/**"/>
<!-- 			class:指定拦截器 -->
			<bean class="cn.bd.springmvc.interceptor.MyHandlerInterceptor"/>
		</mvc:interceptor>
	</mvc:interceptors>

配置多个拦截器

多个拦截器执行顺序遵循 先入后出 的原则,先执行的拦截器后执行完成

<mvc:interceptors>
		<mvc:interceptor>
<!-- 			path: 拦截请求 -->
			<mvc:mapping path="/user/**"/>
<!-- 			class:指定拦截器 -->
			<bean class="cn.bd.springmvc.interceptor.MyHandlerInterceptor"/>
		</mvc:interceptor>
		<mvc:interceptor>
			<mvc:mapping path="/user/**"/>
			<bean class="cn.bd.springmvc.interceptor.MyHandlerInterceptor2"/>
		</mvc:interceptor>
	</mvc:interceptors>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

靓仔很忙i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值