- 什么是springmvc?
Springmvc是一个基于mvc的web框架,它是spring框架的一个模块,两者无需通过中间整合进行整合。
- Springmvc框架的执行步骤
第一步:用户发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求处理器映射器查找Handler
第三步:处理器映射器向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象,包括Model和View
第八步:前端控制器请求视图解析器去进行视图解析,根据逻辑图名解析成真正的视图(jsp)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView对象中)填充到request域
第十一步:前端控制器向用户响应结果
- Springmvc框架常用注解
@Controller
@Controller用于标记在一个类上,使用它标记的类就是一个springmvc Controller对象。分发处理器将会扫描使用了该注解的方法,并检测该方法是否使用了@RequestMapping注解。
@RequestMapping
该注解是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
@Resource和@Autowired
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是spring支持该注解的注入。
共同点:
两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。
不同点:
@Autowired是spring提供的注解。@Autowired注解是按照类型(byType)装配依赖对象,默认情况下他要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。
@Resource默认按照byName自动注入,@Resource有两个重要的属性:name和type,而spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用bytype自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。
@ModelAttribute和@SessionAttributes
代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用
@PathVariable
用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数,。
@RequestParam
主要用于在springmvc后台控制层获取参数,类似一种是request.getParameter(“name”),他有三个常用参数:defaultValue=”0”,required=false,value=“isApp”;defaultValue表示设置默认值
@ResponseBody
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
@Component
相当于通用的注解,当不知道一些类归到那个层时使用,但是不建议。
@Repository
用于注解dao层,在daoImpl类上面注解
- Springmvc怎么样设定重定向和转发的?
转发:在返回值前面加“forward:”就可以让结果转发,譬如”forward:user.do?name=method
”
重定向:在返回值前面加“redirect:”就可以让返回值重定向,譬如“redirect:http://www.baidu.com
”
-
Springmvc中的控制器的注解一般用哪个,有没有别的注解可以替代?
-
一般用@Controller注解,表示是控制层,不能用别的注解替代。
-
Springmvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?
是单例模式,所以在多线程访问的时候又线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段。
- @RequestMapping注解用在类上面有什么作用?
是一个用来处理请求地址映射的注解,可以用于类或方法上。用于类上,表示类中所有响应请求的方法都是以该地址作为父路径。
- 如果前台有很多参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?
直接在方法中声明这个对象,springmvc就自动会把属性赋值到这个对象里面。
-
Springmvc中有个类把视图和数据都合并的一起的,叫什么?叫做ModelAndView。
-
当一个方法向AJAX返回特殊对象,譬如Object,List等,需要做什么处理?
要加上@ResponseBody注解。
- Sprigmvc的异常处理
可以将异常抛给Spring框架,有Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器添视图页面即可。
==========================================================================
Springmvc的优点
(1)Spring MVC中提供一个DispatcherServlet, 无需额外开发。
(2)springMVC中使用基于xml的配置文件,可以编辑,无需重新编译应用程序。
(3)springMVC实例化控制器,并根据用户输入来构造bean.
(4)springMVC可以自动绑定用户输入,并正确的转换数据类型。例如,springMVC能自动解析字 符串,并设置float或decimal类型的属性。
(5)springMVC可以检验用户输入,若校验不通过,则重定向回输入表单。输入校验是可选的, 支持编码方式以及声明。关于这一点,springMVC内置了常见的校验器。
(6)springMVC是spring框架的一部分。可以利用spring提供的其它能力。
(7)springMVC支持国际化和本地化,支持根据用户区域显示多国语言。
(8)springMVC支持多种视图技术,最常见的JSP技术以及其它技术包括Velocity和FreeMarker
-
清晰的角色划分:控制器(controller)、验证器(validator)、命令对象(command obect)、表单对象(form object)、模型对象(model object)、Servlet分发器(DispatcherServlet)、处理器映射(handler mapping)、试图解析器(view resoler)等等。每一个角色都可以由一个专门的对象来实现。
-
强大而直接的配置方式:将框架类和应用程序类都能作为JavaBean配置,支持跨多个context的引用,例如,在web控制器中对业务对象和验证器validator)的引用。
-
可适配、非侵入:可以根据不同的应用场景,选择何事的控制器子类(simple型、command型、from型、wizard型、multi-action型或者自定义),而不是一个单一控制器(比如Action/ActionForm)继承。
-
可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
面试题总结
其它面试题(springboot、mybatis、并发、java中高级面试总结等)
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
[外链图片转存中…(img-FWQN64We-1713573288957)]
[外链图片转存中…(img-8g1Hj90U-1713573288958)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!