SpringMVC学习(++)

一、SpringMVC简介

1.1 简单介绍

SpringMVC是Spring框架的一个模块,两者之间无需通过中间整合层进行整合
SpringMVC是基于MVC的web框架

1.2 什么是MVC?

MVC全程:Model View Controller(模型-视图-控制器)

Model模型
通常指的就是我们的数据模型,一般用于封装数据

View视图
通常指的就是我们的JSP或者HTML。一般用于展示数据
通常视图是依据模型进行建立的

Controller控制器
是应用程序中处理用户交互的部分。一般是处理程序逻辑的
在这里插入图片描述

二、SpringMVC入门介绍

2.1 SpringMVC架构原理

在这里插入图片描述
步骤:

第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找Handler
第三步:处理器映射器HandlerMapping查找Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是SpringMVC框架的一个底层对象,包括Model和View
第八步:前端控制器请求视图解析器去进行视图解析,根据逻辑视图名称解析成真正的视图(JSP)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染,试图渲染将模型数据填空到request域中
第十一步:前端控制器向用户响应结果


组件:(重要!!!)
1.前端控制器(DispatcherServlet)
用于接收请求,响应结果,相当于转发器,中央处理器。
有了它有效减少了其它组件之间的耦合度

2.处理器映射器(HandlerMapping)
根据用户请求查找Handler

3.处理器(Handler)需要程序员开发
它是开发中要编写的具体业务控制器,由DispatcherServlet把用户请求转发到Handler。由Handler对具体的用户其你去进行处理

4.处理器适配器HandlerAdapter
通过它对处理器进行执行,这是适配器模式的应用

5.视图解析器(View resolver)
进行视图解析,根据逻辑视图名解析成真正的视图

6.视图(View)需要程序员开发jsp
View是一个借口,实现类支持不同的View类型(jsp、freemarker、pdf…)

2.2 入门案例

1.导入相关jar包

2.配置核心控制器(Servlet)
在这里插入图片描述

3.创建SpringMVC的配置文件
①开启注解扫描
②视图解析器对象(寻找视图位置的
③开启SpringMVC框架注解的支持
mvc:annotation-driven 该标签可用来替代处理器和映射器的配置

在这里插入图片描述
4.编写控制器并使用注解配置
在这里插入图片描述

3.3 SpringMVC常用注解

@Controller
负责注册一个bean到spring的上下文中


@RequestMapping
控制器指定可以处理那些URL请求


@RequestParam注解(用在参数列表中)
作用:把请求中的指定名称的参数传递给控制器中的形参赋值

属性:value:请求中的参数
required:请求参数是否必须提供此参数
(当为true,get请求方式会报错,当为false,get请求为null)


@RequestBody
作用:用于获取请求体内容(get请求不适用)

属性:required:是否必须有请求体(默认true)


@PathVariable
用于绑定url中的占位符


@RequestHeader(用的少)
用于获取指定请求头的功能


@CookieValue(用的少)
获取指定Cookie的名称的值


@ModelAttribute
①在方法上:表示当前会话会在控制器方法执行前先执行
②在参数上:获取指定的数据给参数赋值


@SessionAttribute(在类上)
用于多次执行控制器方法间的参数共享

3.4 转发和重定向
转发(地址不变)

@RequestMapping("/testForward")
public String testForward() {
System.out.println("AccountController 的 testForward 方法执行了。。。。");
return "forward:/WEB-INF/pages/success.jsp";
}

它相当于“request.getRequestDispatcher(“url”).forward(request,response)”。


重定向(地址变)
在这里插入图片描述
它相当于“response.sendRedirect(url)”。

三、文件上传和异常处理

3.1文件上传

在这里插入图片描述

①form表单的enctype取值必须为multipart/form-data
②method属性的取值必须为post
③提供一个文件选择域

一、配置文件解析器对象
在这里插入图片描述

二、编写控制器

@Controller("fileUploadController")
public class FileUploadController {

@RequestMapping("/fileUpload")
public String testResponseJson(String picname,MultipartFile
uploadFile,HttpServletRequest request) throws Exception{
//定义文件名
String fileName = "";
//1.获取原始文件名
String uploadFileName = uploadFile.getOriginalFilename();
//2.截取文件扩展名
String extendName =
uploadFileName.substring(uploadFileName.lastIndexOf(".")+1,
uploadFileName.length());
//3.把文件加上随机数,防止文件重复
String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase();
//4.判断是否输入了文件名
if(!StringUtils.isEmpty(picname)) {
fileName = uuid+"_"+picname+"."+extendName;
}else {
fileName = uuid+"_"+uploadFileName;
}
System.out.println(fileName);
//2.获取文件路径
ServletContext context = request.getServletContext();
String basePath = context.getRealPath("/uploads");
//3.解决同一文件夹中文件过多问题
String datePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
//4.判断路径是否存在
File file = new File(basePath+"/"+datePath);
if(!file.exists()) {
file.mkdirs();
}
//5.使用 MulitpartFile 接口中方法,把上传的文件写到指定位置
uploadFile.transferTo(new File(file,fileName));
return "success";
}
}

三、前台form表单
在这里插入图片描述

在这里插入图片描述

3.2异常处理

在这里插入图片描述

默认异常处理都是向上抛出的,最终交给用户解决,但这样子对程序员来说可能没什么,但对于用户来说就有些不友好了。

基于上述情况,我们可以自定义异常处理

(当做一个普通的类做就行了。。)
①编写自定义异常类(给提示信息的)
②编写异常处理器**(必须实现HandlerExceptionResolver接口)**
③配置异常处理器(跳转到提示页面)

四、SpringMVC框架中的拦截器

4.1简介

类似于Servlet中的Filter过滤器

过滤器是 servlet 规范中的一部分,任何java web工程都可以使用。
拦截器是 SpringMVC 框架自己的,只有使用了 SpringMVC 框架的工程才能用。
过滤器在 url-pattern 中配置了/*之后,可以对所有要访问的资源拦截。
拦截器它是只会拦截访问的控制器方法,如果访问的是jsp,html,css,image 或者js是不会进行拦截的。

在这里插入图片描述
我们要想自定义拦截器, 要求必须实现:HandlerInterceptor 接口。

4.2配置简单的拦截器

①创建类实现HandlerInterceptor接口

public class HandlerInterceptorDemo1 implements HandlerInterceptor {
//Controller执行前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse
response, Object handler)
throws Exception {
System.out.println("preHandle 拦截器拦截了");
return true;
}
//Controller执行后
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("postHandle 方法执行了");
}
//在 DispatcherServlet 完全处理完请求后被调用,
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse
response, Object handler, Exception ex)
throws Exception {
System.out.println("afterCompletion 方法执行了");
}
}

②配置拦截器

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值