(5)HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
(6)Controller执行完成返回ModelAndView。
(7)HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
(8)DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
(9)ViewReslover解析后返回具体View。
(10)DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。DispatcherServlet响应用户。
4、SpringMVC组件解析
(1)前端控制器:DispatcherServlet
用户请求到达前端控制器,它就相当于 MVC 模式中的 C,DispatcherServlet 是整个流程控制的中心,由
它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。
(2)处理器映射器:HandlerMapping
HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的
映射方式,例如:配置文件方式,实现接口方式,注解方式等。
(3)处理器适配器:HandlerAdapter
通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理
器进行执行。
(4)处理器:Handler
它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由
Handler 对具体的用户请求进行处理。
(5)视图解析器:View Resolver [rɪ’zɒlvə]
View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。
(6)视图:View
SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等。最常用的视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面
===================================================================================
1、引入相关依赖
junit
junit
4.11
test
org.springframework
spring-core
4.3.2.RELEASE
org.springframework
spring-context
4.3.2.RELEASE
org.springframework
spring-context-support
4.3.2.RELEASE
org.springframework
spring-jdbc
4.3.2.RELEASE
org.springframework
spring-aop
4.3.2.RELEASE
org.springframework
spring-beans
4.3.2.RELEASE
org.springframework
spring-expression
4.3.2.RELEASE
org.springframework
spring-aspects
4.3.2.RELEASE
org.springframework
spring-tx
4.3.2.RELEASE
org.springframework
spring-web
4.3.2.RELEASE
org.springframework
spring-webmvc
4.3.2.RELEASE
javax.servlet
servlet-api
2.5
provided
2、编写springmvc配置文件(applicationContext.xml)
<context:component-scan base-package=“com.tjcu”></context:component-scan>
3、配置springmvc的核心Servlet
mvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:applicationContext.xml
mvc
/
-
注意 :
这里还要加载spring配置,通过在servlet写initparam标签,还是contextConfigLocation属性,value用来加载springmvc配置文件
-
Servlet默认单例,在第一个请求的时候创建,如果不想要写
<init-param>
,可以把配置文件放在Web-INF
下,并命名为mvc-servlet.xml
4、创建控制器
//负责控制层组件对象创建
@Controller(“userController”)
//类上的控制器映射器,相当于Struts2中的namespace
@RequestMapping(“user”)
public class UserController{
//方法上的控制器映射器,相当于Struts中的name
@RequestMapping(“queryAll”)
public String queryAll(){
System.out.println(“查询到了很多数据”);
//解析结果:前缀+返回值+后缀
return “index”;
}
-
@Controller
: 该注解用来类上标识这是一个控制器组件类并创建这个类实例 -
@RequestMapping
:
修饰范围: 用在方法或者类上
注解作用: 用来指定类以及类中方法的请求路径
注解详解:
用在类上相当于struts2中namespace在访问类中方法必须先加入这个路径
用在方法上相当于action标签的name属性用来表示访问这个方法的路径
5.部署项目,启动项目测试
访问路径: http://localhost:8080/SpringMvc/user/queryAll
6、SpringMVC的开发步骤总结
①导入SpringMVC相关坐标(spring,servlet-api,spring-mvc等)
②配置SpringMVC核心控制器DispathcerServlet
③创建Controller类和视图页面
④使用注解配置Controller类中业务方法的映射地址
⑤配置SpringMVC核心文件 springmvc.xml(三大核心组件)
⑥客户端发起请求测试
===================================================================================
1、跳转方式
说明:跳转有两种=方式,一种forward ,一种**redirect ** [ˌriːdəˈrekt ]。
(1)Servlet跳转方式【底层】
#forward跳转,
一次请求,地址栏不变,可以使用request作用域传递数据,
#redirect跳转多次,
地址栏改变,不能使用作用域
(2)Struts2中的跳转方式(区分跳转的目标资源类型)
#Action—>jsp
forward[默认] type=“dispatcher”
redirect type=“redirect”
#Action—>Action
forward type=“chain”
redirect type=“redirectAction”
(3)springmvc跳转方式
1.Controller 跳转到JSP
forward跳转到页面: 默认就是forward跳转
语法:return “业务逻辑名”
例子:return “showUer”---->/showUser.jsp
redirect跳转到页面:使用SpringMVC提供rediret:关键字进行重定向页面跳转
语法:return “redirect:/index.jsp”
注意:使用redirect跳转页面不会经过视图解析器
2.Controller跳转到Controller
forward跳转到Controller:
使用SpringMvc提供的关键字forward
语法:forward:/跳转类上@requestMapping的值/跳转类中方法@RequestMapping的值
例子:return “forward:test:/”;
redirect跳转到Controller:使用SpringMvc提供的关键字redirect
语法:redirect:/跳转类上@requestMapping的值/跳转类中方法@RequestMapping的值
forward
跳转到页面(.jsp
)示意图:
redirect
跳转到页面(.jsp
)示意图:
forward方法:
Controller层跳转到另外一个控制层(controller
)示意图:
- 如果跳本类的一个控制器(
controller
)方法示意图:
redirect方法
: Controller层跳转到另外一个控制层(controller
)示意图:
2、跳转方法总结
===================================================================================
接收参数语法说明:springmvc中使用控制器方法参数来收集客户端的请求参数,因此在接收请求参数时直接在需要控制器方法声明即可,springmvc可以自动根据指定类型完成类型的转换操作
1、接收零散类型的参数
如:八种基本类型+String+日期类型
Controller
中的业务方法的参数名称要与请求参数的name一致,参数值会自动映射匹配。并且能自动做类型
转换;
- 自动的类型转换是指从String向其他类型 的转换
(1)前端传递参数
#get方式传递参数
http://localhost:8080/SpringMvc/user/register?
name=王恒杰&password=234&sex=true&birthday=1999/12/03&salary=20000
#post方式传递参数
姓名:
密码:
性别:
生日:
工资:
(2)后台Controller接收数据
//负责控制层组件对象创建
@Controller(“userController”)
//类上的控制器映射器,相当于Struts2中的namespace
@RequestMapping(“user”)
public class UserController {
@RequestMapping(“register”)
public String register(String name, String password, Boolean sex, Date birthday, Double salary) {
System.out.println(“注册成功”);
System.out.println(“姓名” + name);
System.out.println(“密码” + password);
System.out.println(“性别” + sex);
System.out.println(“生日” + birthday);
System.out.println(“工资” + salary);
return “index”;
}
注意:springmvc在接收日期类型参数时日期格式必须为yyyy/MM/dd HH:mm:ss
2、接收对象类型参数
(1)前端传递参数
姓名:
密码:
性别:
生日:
工资:
- 注意:
在接收对象类型参数时和struts2接收不同,springmvc直接根据传递参数名与对象中属性名一致自动封装对象
(2)后台Controller接收数据
- 实体类
public class User implements Serializable {
private static final Long serialVersionUID=1L;
private String name;
private String password;
private String sex;
private String birthday;
private String Salary;
- 控制器中接收前端数据
//负责控制层组件对象创建
@Controller(“userController”)
//类上的控制器映射器,相当于Struts2中的namespace
@RequestMapping(“user”)
public class UserController{
@RequestMapping(“register”)
public String register(User user){
System.out.println(“注册成功”);
System.out.println(“姓名”+user.getName());
System.out.println(“密码”+user.getPassword());
System.out.println(“性别”+user.getSex());
System.out.println(“生日”+user.getBirthday());
System.out.println(“工资”+user.getSalary());
return “redirect:/index.jsp”;
}
3、接收数组类型参数
(1)前端传递参数
(2)后台Controller接收数据
//负责控制层组件对象创建
@Controller(“userController”)
//类上的控制器映射器,相当于Struts2中的namespace
@RequestMapping(“user”)
public class UserController{
@RequestMapping(“register”)
public String register(User user, String[] hobby){
System.out.println(“注册成功”);
System.out.println(“姓名:”+user.getName());
System.out.println(“密码:”+user.getPassword());
System.out.println(“性别:”+user.getSex());
System.out.println(“生日:”+user.getBirthday());
System.out.println(“工资:”+user.getSalary());
System.out.println(“爱好:”);
for (String s : hobby) {
System.out.println(s);
}
return “redirect:/index.jsp”;
}
4、SpringMVC接收参数中文乱码解决方案
(1)在使用post方式接收请求参数时出现中文乱码接收数据问题解决
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
charset
/*
(2)在使用set方式中文乱码问题
改tomcat的server.xml
配置文件大概在50多行加上URIEncoding="UTF-8"
1.针对于GET方式中文乱码解决方案:
<Connector connectionTimeout=“20000”
port=“8080”
protocol=“HTTP/1.1”
redirectPort=“8443” URIEncoding=“UTF-8”/>
- 成功设置之后,接收到的数据就不会乱码了!
5、接收集合类型参数
说明:springmvc不支持直接将接收集合声明为控制器方法参数进行接收,
如果要接收集合类型参数必须使用对象封装要接收接收类型才可以
(1)前端传递参数
姓名:
密码:
性别:
生日:
工资:
爱好:
吃饭:
睡觉:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
写在最后
可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。
上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源
me=“hobby” value=“吃饭”>
睡觉:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-v45MhRVs-1712036531486)]
[外链图片转存中…(img-NFvRDrjz-1712036531487)]
[外链图片转存中…(img-oRu1rwBT-1712036531487)]
[外链图片转存中…(img-fEzKBrs0-1712036531487)]
[外链图片转存中…(img-V3Eb1nb6-1712036531488)]
[外链图片转存中…(img-7vHzdsHn-1712036531488)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-EWo14GDQ-1712036531488)]
写在最后
可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。
[外链图片转存中…(img-Ow7GDGeP-1712036531489)]
[外链图片转存中…(img-D71Jpdt4-1712036531489)]
上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源