javax.servlet
javax.servlet-api
4.0.0
compile
2.2 springmvc.xml 配置
<?xml version="1.0" encoding="UTF-8"?><context:component-scan base-package=“cn.gorit”></context:component-scan>
<bean id="internalResourceViewResolver"class=“org.springframework.web.servlet.view.InternalResourceViewResolver”>
mvc:annotation-driven/
- 启动服务器,加载一些配置文件
-
DispatcherServlet对象创建
-
springmvc.xml 被加载了
-
HelloController 创建成对象
2.3 SpringMVC 中的组件控制器
- DispatcherServlet:前端控制器
用户请求到达前端控制器,它就相当于 mvc 中的 c,dispatcherServlet 是整个流程控制中心,由它调用其他组件处理用户的请求,dispatcherServlet 的存在降低了组件之间的耦合性
- HanderMapping:处理器映射器
HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了 不同的映射器实现不同的映射方式,例如配置文件方式,实现接口方式,注解方式等
- Handler:处理器
它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet把用户请求转发送到 Handler。由 Handler 对具体用户请求进行处理
- HandlerAdapter:处理适配器
通过对 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器执行。
类比插座 和 接口
- View Resolver:视图解析器
View Resolver 负责将处理结果生成 View 视图, View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展现给用户
- View:视图
SpringMVC 框架提供很多 View 视图类型的支持,包括 jstlView,freemarkerView,pdfView等,我们最常用的视图就是 jsp。
一般情况下需要通过页面标签或页面模板技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发页面
- mvc:annitation-driven 说明
2.3 web.xml 配置
Archetype Created Web Application
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
dispatcherServlet
/
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
characterEncodingFilter
/*
2.4 RequestMapping 讲解
作用:建立请求 URL 和处理请求方法之间对应的关系。
-
path:指定请求路径 url
-
value:value 属性和 path 属性是一样的
-
method:指定该方法的请求方式
-
params:指定限制请求参数的条件
-
headers:发送请求中必须包含的请求头
三、请求参数的绑定
3.1 绑定的机制
-
请求参数绑定说明
-
绑定机制
-
表单提交的数据都是 k=v 形式 user=hehe&pwd=123
-
SpringMVC 的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
-
要求:提交表单的 name 和 参数名称是相同的
-
支持的数据类型
-
基本数据类型和字符串类型
-
实体类型(JavaBean)
-
集合数据类型(List,map集合等)
-
基本数据类型和字符串类型
-
提交表单的 name 和参数的名称是相同的
-
区分大小写
-
实体类型(JavaBean)
-
提交表单的 name 和 javaBean 中的属性名称要一致
-
如果一个 JavaBean类中包含其他的引用类型,那么表单的 name 属性需要编写成:对象 属性:
eg:address name
-
给集合属性数据封装
-
JSP 页面编写方式:list[0] 属性, 封装对象表达式,对 前端的表单页面进行设置
-
请求参数中乱码解决(解决 post 请求乱码)
-
在 web.xml 中配置 Spring提供的过滤器类 (上面的 web.xml 已经修改)
3.2 获得原生 Servlet API
// 获取原生的 Servlet API
@RequestMapping(“/testServlet”)
public String testServlet(HttpServletRequest request, HttpServletResponse response) {
System.out.println(“执行了”);
System.out.println(request.getRemoteUser());
return “success”;
}
四、常用注解
4.1 RequestParam
作用:
把请求中指定名称的参数给控制器中的形参赋值
属性:
value:请求参数的名称
required:请求参数中是否必须提交此参数
// jsp 代码
@Controller
@RequestMapping(“/anno”)
public class AnnoController {
@RequestMapping(value = “/testRequestParam”)
public String testAnno(@RequestParam(name=“name”) String username) {
// 这样强制要求必须传 name,否则就把报错
System.out.println(“执行了”);
System.out.println(“username:”+username);
return “success”;
}
}
https://www.bilibili.com/video/BV1Sb411s7qa?p=18
4.2 RequestBody
作用:
用于获取请求体内容,直接使用得到的是 key=value&key1=value1 … 结构的数据
不适合 get 请求方法
赋值
value:请求参数的名称
required:是否必须有请求体,默认为:true,当取值为 get 时,请求方法会报错,如果
// jsp 代码
用户姓名:
用户年龄:
@Controller
@RequestMapping(“/anno”)
public class AnnoController {
/**
-
获取到请求体的内容
-
*/
@RequestMapping(value = “/testRequestBody”)
public String testRequestBody(@RequestBody String body) {
System.out.println(“执行了。。。”);
System.out.println(body);
return “success”;
}
}
4.3 PathVariable
- 作用:拥有绑定 url 中的占位符的,例如:url中有/delete/{id},id 是占位符
- 属性:
1. value:指定 url 中的占位符名称
- Restful 风格的 URL
1. 请求路径一样,可以根据不同的请求方式执行后台的不同方法
2. restful 风格的 URL 优点
1. 结构清晰
2. 符合标准
3. 易于理解
4. 扩展方便
// jsp 代码
@Controller
@RequestMapping(“/anno”)
public class AnnoController {
/**
-
PathVariable 注解
-
*/
@RequestMapping(“/testPathVariable/{sid}”)
public String testPathVariable(@PathVariable(name = “sid”) String id) {
System.out.println(“执行了。。。”);
System.out.println(id);
return “success”;
}
}
4.4 RequestHeader
作用:
用于获取请求头消息
属性:
value:提供消息头名称
value:请求参数的名称
required:是否必须有此请求头
// jsp 代码
@Controller
@RequestMapping(“/anno”)
public class AnnoController {
/**
-
获取请求头的值
-
*/
@RequestMapping(“/testRequestHeader”)
public String testRequestHeader(@RequestHeader(value = “Accept”) String header) {
System.out.println(“执行了。。。”);
System.out.println(header);
return “success”;
}
}
4.5 CookieValue
作用:
用于把指定 cookie 名称的值传入控制器方法参数
属性:
value:指定 cookie 的名称
required:是否必须有此 cookie
// jsp 代码
@Controller
@RequestMapping(“/anno”)
public class AnnoController {
/**
-
获取 Cookie 的值
-
*/
@RequestMapping(“/testCookieValue”)
public String testCookieValue(@CookieValue(value = “JSESSIONID”) String cookieValue) {
System.out.println(“执行了。。。”);
System.out.println(cookieValue);
return “success”;
}
}
4.6 ModelAttribute
// jsp 代码
用户姓名:
用户年龄:
@Controller
@RequestMapping(“/anno”)
public class AnnoController {
/**
- testModelAttribute 注解
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
这份文档从构建一个键值数据库的关键架构入手,不仅带你建立起全局观,还帮你迅速抓住核心主线。除此之外,还会具体讲解数据结构、线程模型、网络框架、持久化、主从同步和切片集群等,帮你搞懂底层原理。相信这对于所有层次的Redis使用者都是一份非常完美的教程了。
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!!!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
(img-OYRAvhNJ-1713330664787)]
[外链图片转存中…(img-Nzku4xft-1713330664788)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
这份文档从构建一个键值数据库的关键架构入手,不仅带你建立起全局观,还帮你迅速抓住核心主线。除此之外,还会具体讲解数据结构、线程模型、网络框架、持久化、主从同步和切片集群等,帮你搞懂底层原理。相信这对于所有层次的Redis使用者都是一份非常完美的教程了。
[外链图片转存中…(img-kACxAPVI-1713330664788)]
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!!!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!