springmvc常用注解,springmvc的工作原理
SpringMVC_day01_ Concept _入门_@RequestMapping Notes _参数封装和绑定_编码过滤器_技术博客of _mb632819641cdf1 _博客
文章一,知识回顾二,三层架构与MVC设计模式三,springMVC的概念四,SpringMVC的HelloWorld(重点)1,引入依赖2,spring-mvc.xml配置3,web.xml 4,自定义核心控件类5,第5页。介绍案例6的实施过程及原理分析。@RequestMapping Notes(强调)7。参数绑定(强调)8。编码过滤器(重点)解决中文乱码post请求get请求78代码演示总理XML POM . XML web . XML spring-MVC . XML domain控制器转换器特殊类型自转换JSP总结一、知识复习1 .mybatis:持久层轻量级开源框架
Crud、一对一映射、一对多、多对多、延迟加载(延迟加载)、缓存(一级缓存:sqlSession级、二级缓存)
Save: SqlSessionFactory级别(应用程序级别)):xml和注释实现
2.spring:表现在业务层,解耦和事务管理。
两个核心:IOC:控制反转,包括依赖注入和依赖查找。
AOP:面向方面编程(多面向对象编程)参考:声明式事务管理、日志管理、spring security安全
结构
aop中的重点:声明式事务管理——XML、ann两层和三层架构以及MVC设计模式A和三层架构。
Web层-表示层:处理用户的请求和相应的
技术:servlet
服务层:业务层,写业务,处理业务逻辑,写事务。
工艺:弹簧
Dao层:持久层,添加、删除、检查数据。
技术:JDBC-dbutils-JDBC模板-mybatis(主流)-春季数据jpa(趋势)
b、mvc设计模式
M: model-model: pojo类,封装数据,广义来说:dao服务模型=业务模型层。
V: view-view: jsp,html,freemarker:显示数据。广义来说,只要你能展示数据,就是一个视图。
c:controller-控制层:servlet:处理用户的请求和对应三、springMVC 1的概念。springMVC是spring系统中的子项目。
2.springMVC是一个开源的轻量级框架。
3.springmvc是一个满足mvc设计模式的表示层框架。
4.大多数表示层框架都符合MVC设计模式。4.SpringMVC的HelloWorld(强调)1。引入依赖pom.xml
注意:两个范围限制都应该添加。
属国
属国
groupId junit /groupId
artifactId junit /artifactId
版本4.11/版本
范围测试/范围
/依赖关系
!春天的核心
属国
groupId org . spring framework/groupId
artifact id spring-context/artifact id
版本5.0.2 .发布/版本
/依赖关系
!弹簧罐
属国
groupId org . spring framework/groupId
artifact id spring-web MVC/artifact id
版本5.0.2 .发布/版本
/依赖关系
!-两个范围限制都要加,否则一运行就报错,说不是servlet tomcat,这两个jar包有冲突-
属国
groupId javax.servlet /groupId
artifact id servlet-API/artifact id
版本2.5/版本
!-
Maven项目实施分为三个阶段。
编译(必需)测试(必需)运行(非必需)
假设:编译器生效,测试生效,运行不生效。
Servlet-api、jsp-api:这两个包需要用提供的依赖范围进行配置,其他的不需要。
-
提供的范围/范围
/依赖关系
属国
groupId javax.servlet /groupId
artifactId jsp-api /artifactId
版本2.0/版本
提供的范围/范围
/依赖关系
/dependencies 2,spring-mvc.xml配置?xml版本=1.0 编码=UTF-8 ?
beans xmlns= http://www . spring framework . org/schema/beans
xmlns:xsi= http://www . w3 . org/2001/XML schema-instance
xmlns:context= http://www . spring framework . org/schema/context
xsi:架构位置= http://www。spring框架。http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www。spring框架。组织/模式/上下文/spring-context。xsd
!-开启注解扫描包-
上下文:组件扫描基础包= cn。ahpu /上下文:组件扫描
!-内部资源视图解析器-
豆
!-配置前缀-
property name= prefix value=/we b-INF//property
!-配置后缀-
属性名称=后缀值=。JSP /属性
!-配好后:
返回“/我们b-INF/show。JSP”;
可以简写为
返回”显示”;
-
/bean
/beans 3、web.xml!DOCTYPE web应用程序公共
-//太阳微系统公司//DTD Web应用程序2.3//EN
http://爪哇。星期日com/dtd/we B- app _ 2 _ 3。 dtd
元素内
显示名称原型创建的网应用程序/显示名称
!-配置servlet:前端控制器
学习笔记一只有一个小型应用程序
-
小型应用程序
小型应用程序名称调度程序Servlet /servlet名称
servlet类组织。spring框架。网络。servlet。调度程序servlet/servlet类
!- servlet中配置局部参数:读取配置文件-
初始化参数
参数名称上下文配置位置/param-name
参数值类路径:spring-mvc.xml /param-value
/init-param
!-在启动雄猫时创建小型应用程序对象-
启动时加载1/启动时加载
/servlet
小型应用程序映射
小型应用程序名称调度程序Servlet /servlet名称
!-
/拦截所有请求:包括超文本传送协议(超文本传输协议的缩写)请求,静态资源请求(img、css、js)
/* 拦截请求:不包含静态资源
*.做,*。行动:通配符配置拦截以做动作结尾的请求思想来源于支柱2
-
全球资源定位器(Uniform Resource Locator)模式//url模式
/servlet-映射
/web-app 4、自定义核心控制类TestController.java
@控制器
公共类测试控制器{
@RequestMapping(/test )
公共字符串测试(){
System.out.println(测试成功!);
返回”显示”;//本来是返回“/我们b-INF/show。JSP”;因为配置了内部资源视图解析器
}
}5、页面配置index.jsp
注意:isELIgnored="false "不忽略埃尔表达式修改想法默认的jsp文件模板
%@页is alignored= false content type= text/html;charset=UTF-8 语言=java %
超文本标记语言
头
标题标题/标题
/头
身体
%-is alignored= false 不忽略埃尔表达式- %
a href= $ { pagecontext。请求。上下文路径}/测试请求1 /a % - 404 - %
a href=/test 请求2 /a % - 500 - %
/body
/html
show.jsp
随意显示一行文本即可
五、入门案例的执行过程及原理分析
六、@RequestMapping注解(重点)1.@RequestMapping请求路径映射,该注解可以标记在方法上,也可以标记在类上
标记在类上用来窄化路径
2.属性
路径:指定请求路径,别名值,所以属性名可以省略(path={/hello ,/hello2}指定多个路径完全没必要)
方法:请求方式:
获取:路径和超链接请求都是默认得到请求
帖子:必须在表单中实现
参数:声明请求路径的规则-==了解==
姓名:路径中必须有名字
"20岁":路径中必须有20岁
!姓名:路径中不能存在名字
例如:实例
TestController.java
@控制器
@RequestMapping(/test )
公共类测试控制器{
@RequestMapping(value=/hello ,method=RequestMethod .POST,params={name , age 20})
公共字符串你好(){
System.out.println(测试成功!);
返回”显示”;//本来是返回“/我们b-INF/show。JSP”;因为配置了内部资源视图解析器
}
}index.jsp
身体
%-is alignored= false 不忽略埃尔表达式- %
a href= $ { pagecontext。请求。上下文路径}/test/hello 请求1 /a % - 404 - %
a href=/test/hello 请求2 /a % - 500 - %
整点
表单操作= $ { pagecontext。请求。上下文路径}/test/hello?"20岁"方法="后"
输入类型=text name=name % -没属性名字会报400错误?20岁也是必要的- %
输入类型=提交
/表单
/body
七、参数的绑定(重点)1.表单中提交的名字值与方法中的参数(简单类型)名称一致,就可以直接获取到
就是直接在控制器类的方法内直接写上需要接受的参数即可框架会自动进行类型转换
2.方法的参数:pojo类型(也是直接作为方法参数接受)
只要保证表单提交的名字值与持久化类的属性名一致,就可以封装数据
集合数据的封装格式见下面代码
3.@RequestParam:请求参数绑定,名称与参数名不一致时需要进一步绑定
属性:值,名称可以指定页面表单中的名字值
要求:是否必须的,假的,不必要的(可有可无),真的:必须有该参数
默认值:默认值,如果页面传参了,则使用页面传参的值,如果没有指定,则使用默认值
公共字符串测试参数2(@请求参数(用户名)字符串名称){//用户名封装到名字里
4.特殊情况:(自定义类型转换器)要转换类型是日期类型
1)自定义类型转换类
/**
* 自定义类型转换器
* 将字符串格式转换为日期格式
* 1.实现接口转换器s,T
* S:源类型t:目标类型
*/
公共类StringToDateConverter转换器实现转换器字符串,日期{
/**
* 类型转换方法
* @param源源类型
* @返回目标类型
*/
@覆盖
公共日期转换(字符串源){
//sdf可以将日期转换为指定格式字符串也可以将指定格式字符串转换为日期
简单日期格式SDF=新简单日期格式( yyyy/MM/DD );
日期日期=空
尝试{
日期=SDF。解析(源);
} catch (ParseException e) {
e。printstacktrace();
}
返回日期;
}
}
2.在springmvc.xml文件中配置类型转换工厂
!-配置类型转换工厂-
bean id=conversionService
属性名="转换器"
设置
!-框架自己转换不了的类型会到这里来找类转换-
豆子/豆子
/设置
/属性
/bean
3.在注解驱动中引入类型转换工厂(还是spring-mvc.xml)
!-注解驱动:关联类型转换工厂-
mvc:批注驱动的转换-service=转换服务/MVC:批注驱动的八、编码过滤器(重点)解决中文乱码邮政请求web.xml里配置下学习笔记一提供的编码处理过滤器即可
!-编码过滤器-
过滤器
过滤器名称字符编码/过滤器名称
!- springmvc框架内置的乱码处理类配置一下即可-
过滤级组织。spring框架。网络。过滤器。字符编码过滤器/过滤器类
!-配置初始化参数指定编码格式-
初始化参数
参数名称编码/param-name
参数值utf-8/参数值
/init-param
/过滤器
过滤映射
过滤器名称字符编码/过滤器名称
!-拦截所有请求:不包含静态资源-
全球资源定位器(Uniform Resource Locator)模式/* /url模式
/filter-mapping get请求得到请求方式:
托马卡特对得到和邮政请求处理方式是不同的,获取请求的编码问题,要改雄猫的server.xml
配置文件,如下:
连接器连接超时=20000 端口=8080 协议=HTTP/1.1 重定向端口=8443/
改为:
连接器连接超时= 20000 port= 8080 protocol= HTTP/1.1 edirectPort= 8443 useBodyEncodingForURI= true /七八代码演示总理
xmlpom.xml依赖项
属国
groupId组织。spring框架/groupId
工件id spring-上下文/工件id
版本5.0.2 .发布/版本
/依赖关系
属国
groupId组织。spring框架/groupId
工件id spring-web MVC/工件id
版本5.0.2 .发布/版本
/依赖关系
属国
groupId javax.servlet /groupId
工件id servlet-API/工件id
版本2.5/版本
提供的范围/范围
/依赖关系
属国
groupId javax.servlet /groupId
artifactId jsp-api /artifactId
版本2.0/版本
提供的范围/范围
/依赖关系
!龙目岛
属国
groupId组织。lombok/groupId项目
artifactId lombok /artifactId
版本1 .18 .4/版本
/依赖关系
/dependencies web.xml!DOCTYPE web应用程序公共
-//太阳微系统公司//DTD Web应用程序2.3//EN
http://爪哇。星期日com/dtd/we B- app _ 2 _ 3。 dtd
元素内
显示名称原型创建的网应用程序/显示名称
!-编码过滤器-
过滤器
过滤器名称字符编码/过滤器名称
!- springmvc框架内置的乱码处理类配置一下即可-
过滤级组织。spring框架。网络。过滤器。字符编码过滤器/过滤器类
!-配置初始化参数指定编码格式拦截的是邮政请求-
初始化参数
参数名称编码/param-name
参数值utf-8/参数值
/init-param
!-指定请求编码格式和响应编码格式了解,一般不用-
初始化参数
param-name强制编码/param-name
参数值真/参数值
/init-param
/过滤器
过滤映射
过滤器名称字符编码/过滤器名称
!-拦截所有请求:不包含静态资源-
全球资源定位器(Uniform Resource Locator)模式/* /url模式
/过滤器-映射
小型应用程序
小型应用程序名称调度程序Servlet /servlet名称
servlet类组织。spring框架。网络。servlet。调度程序servlet/servlet类
初始化参数
参数名称上下文配置位置/param-name
参数值类路径:spring-mvc.xml /param-value
/init-param
!-配置雄猫启动顺序-
启动时加载1/启动时加载
/servlet
小型应用程序映射
小型应用程序名称调度程序Servlet /servlet名称
全球资源定位器(Uniform Resource Locator)模式//url模式
/servlet-映射
/web-app spring-mvc.xml?可扩展标记语言版本=1.0 编码=UTF八号?
豆子xmlns= http://www。spring框架。组织/架构/bean
xmlns:xsi= http://。w3。 org/2001/XML架构-实例
xmlns:context= http://www。spring框架。组织/架构/上下文
xmlns:MVC= http://。spring框架。组织/架构/MVC
xsi:架构位置= http://www。spring框架。http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www。spring框架。组织/模式/上下文/spring-context。xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
!-扫描包-
上下文:组件扫描基础包= cn。ahpu /上下文:组件扫描
!-视图解析器-
豆
property name= prefix value=/we b-INF//property
属性名称=后缀值=。JSP /属性
/bean
!-配置类型转换工厂-
bean id=conversionService
属性名="转换器"
设置
!-框架自己转换不了的类型会到这里来找类转换-
豆子/豆子
/设置
/属性
/bean
!-注解驱动关联类型转换工厂-
mvc:批注驱动的转换-service=转换服务/MVC:批注驱动的
/豆子domainRole.java
@数据
公共类角色{
私有整数id;
私有字符串角色名
}User.java
@数据
公共类用户{
私有整数id;
私有字符串用户名;
私人性格性;
私有整数年龄;
个人分发名单字符串列表;
私人角色角色;
个人分发名单角色角色列表
私有映射字符串、对象映射;
//注解pom.xml内加上龙目岛包
}controllerUserController.java
@控制器
@RequestMapping(/user )
公共类用户控制器{
//1.简单类型参数的获取直接写成方法参数即可
@ request mapping(value=/test param ,method=RequestMethod .帖子)
公共字符串测试参数(字符串用户名,整数年龄,字符性别){
//直接在方法内写参数就能接受了哈哈
System.out.println(用户名);
System.out.println(年龄);
System.out.println(性);
返回”显示”;
}
//2.pojo类型参数封装前端名字值和持久化类的属性名一致即可也能直接写成方法参数
@请求映射(value=/save user ,method=RequestMethod .帖子)
公共字符串saveUser(用户用户){
//javabean类型参数也可以直接写成方法参数强
System.out.println(用户);
返回”显示”;
}
//3.参数绑定复杂情况前端名字与控制器方法参数名不同需要进一步进行绑定
@请求映射(值=/测试参数2 ,方法=请求方法.帖子)
公共字符串测试参数2(@ request param(value= username ,required=false,defaultValue=hza )字符串名称){//用户名封装到名字里
System.out.println(名称);
返回”显示”;
}
//4.更特殊自定义类型转换器
@RequestMapping(/testDate )
公共字符串测试日期(生日日期){
System.out.println(生日);
返回”显示”;
}
}转换器特殊类型自己转换StringToDateConverter.java
/**
* @作者寒面银枪
* @create 2020-04-26 14:47
*
* 自定义类型转换器
* 将字符串格式转换为日期格式
* 1.实现接口转换器s,T
* S:源类型t:目标类型
*/
公共类StringToDateConverter转换器实现转换器字符串,日期{
/**
* 类型转换方法
* @param源源类型
* @返回目标类型
*/
@覆盖
公共日期转换(字符串源){
//sdf可以将日期转换为指定格式字符串也可以将指定格式字符串转换为日期
简单日期格式SDF=新建简单日期格式( yyyy-MM-DD );
日期日期=空
尝试{
日期=SDF。解析(源);
} catch (ParseException e) {
e。printstacktrace();
}
返回日期;
}
}JSPindex.jsp
% -
由智能理念创建。
用户:管理员
日期:2020年四月26日
时间:13:30
要更改此模板,请使用文件设置文件模板。
- %
%@页is alignored= false content type= text/html;charset=UTF-8 语言=java %
超文本标记语言
头
标题标题/标题
/头
身体
简单参数:br
表单操作= $ { pagecontext。请求。上下文路径}/用户/测试参数方法=post
姓名:input type= text name= username br/
年龄:input type=text name=age br/
性别:input type=text name=sex br/
输入类型=提交值=提交
/表单
整点
持久化类参数集合集合嵌套:br
表单操作= $ { pagecontext。请求。上下文路径}/用户/保存用户方法=post
姓名:input type= text name= username br/
年龄:input type=text name=age br/
性别:input type=text name=sex br/
目录集合参数:input type= text name= list[0] %-原来前端可以指定数组类型参数单个元素的顺序- %
input type= text name= list[1] br/
用户内有另一个jaavBean:角色也可以直接写埃尔表达式
id:输入类型=text name=role.id
rolename:输入类型= text name= role。角色名 br/
用户内有角色列表:br/
[0] id:输入类型=text name=roleList[0].id rolename:input type= text name= roleList[0].角色名英国铁路公司
[1]id:input type= text name=角色列表[1].id rolename:input type= text name= roleList[1].角色名英国铁路公司
% - 直接写name=map[key]数组形式即可- %
地图集合:input type= text name= map[one] input type= text name= map[two] input type= text name= map[XXX]
输入类型=提交值=提交
/表单
整点
参数绑定特殊情况前端名字与后端参数名不一致:br
表单操作= $ { pagecontext。请求。上下文路径}/用户/测试参数2 方法=post
输入类型=text name=username br
输入类型=提交值=提交
/表单
整点
更特殊情况:参数类型为日期类型:br
表单操作= $ { pagecontext。请求。上下文路径}/用户/测试日期方法=post
输入类型=日期名称=生日英国铁路公司
输入类型=提交值=提交
/表单
/body
/html show.jsp
%@页is alignored= false content type= text/html;charset=UTF-8 语言=java %
超文本标记语言
头
标题标题/标题
/头
身体
跳转成功
/body
/html小结1.学习笔记一第一天
学习笔记一的介绍:实现手动音量调节设计模式的轻量级开源的表现层框架
学习笔记一的入门
1) 引入依赖
spring-context.jar,spring-webmvc.jar,servlet-api.jar,jsp-api.jar
2) 配置文件spring-mvc.xml
扫描包,创建类对象
视图解析器:前缀和后缀
注解驱动:加载了处理映射器,处理适配器,可以引入自定义类型转换器
3) web.xml
前端控制器:DispactherServlet:配置一个参数:contextConfiglocation=类路径:spring-MVC。可扩展置标语言
编码过滤器:字符编码过滤器:配置一个参数:编码=utf-8
4) 自定义控制器
测试控制器
类:@控制器,创建类型对象@RequestMapping(/path ):映射类的路径
方法:@RequestMapping(/path ):映射方法的路径
5) 页面
@RequestMapping
@RequestParam:
传参:简单类型:参数名必须与表单名字一致
持久化类类:属性名必须与表单名字一致
集合类型
自定义类型转换器
1)实现了转换器S,T接口的实现类。
2)定义converter类型的工厂:ConversionServiceFactoryBean,并注入到Set集合中。
3)在注释驱动中引入类型转换工厂
编码过滤器
web.xml:
版权归作者所有:原创作品来自博主武大宝安,转载授权请联系作者,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。