部门内容来自csdn博客:
https://blog.csdn.net/a745233700/article/details/80963758
https://blog.csdn.net/zyx1260168395/article/details/105088359
目录
SpringMVC
1.1.1-MVC模式
1.1.2-MVC框架的出现
1.1.3-什么是SpringMVC
1.1.4-SpringMVC的优点
1.1.5-Spring MVC的主要组件
1.1.6-SpringMVC框架的核心
1.1.7-SpringMVC框架执行流程
1.1.8-SpringMVC的转发和重定向
1.1.9-SpringMvc和AJAX五种交互方式
1.1.10-SpringMvc怎么和AJAX相互调用的
1.1.11-如何解决POST请求中文乱码问题,GET的又如何处理
1.1.12- SpringMVC异常处理
1.1.13-SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决
1.1.14-SpringMVC常用的注解
1.1.15- SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代
1.1.16- 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?
1.1.17- 怎样在方法里面得到Request,或者Session
1.1.18- @ResponseBody和@RequestBody
1.1.19- @RequestParam和@PathVariable
1.1.20-拦截请求
1.1.21-Struts2和SpringMVC的区别
Model VIew Controller:模型视图控制器
最简单的最经典的MVC是jsp+Servlet(Controller)+javaBean(model)
描述:(控制器是核心)
当控制器Servlet收到用户的请求
控制器调用JavaBean完成业务
完成业务后通过控制器跳转jsp页面的方式给用户反馈信息
jsp给用户做出响应
是为了解决传统mvc模式问题而出现的框架
传统mvc的模式问题:
Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
前端控制器 DispatcherServlet
处理器映射器HandlerMapping
处理器适配器HandlerAdapter
处理器Handler(需要自己开发)
视图解析器 ViewResolver
视图View(需要自己开发)
DispatcherServlet,可以用于接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。
步骤:
DispatcherServlet对请求的URL进行解析,得到请求资源标识符(url)
然后通过该url调用HandlerMapping获取该Handler配置的所有相关对象(Hanlder对象以及Hanlder对象内部的拦截器),最后以HandlerExecutionChain对象的形式返回
DispatcherServlet根据获取handler,选择一个合适的HandlerAdapter,提取Request中的数据模型,填充Handler入参,开始执行Handler(Controller)
通过ViewResolver结合Model和View,来渲染视图,DispatcherServlet将渲染结果返回给客户端
简单说:请求被DispatcherServlet拦截,核心控制器分析请求得到url,调用HandlerMapping获取Hanlder,选择一个合适的HandlerAdapter,提取Request中的数据模型,填充Handler入参,执行Handler,执行后向核心控制器返回一个ModelAndView对象,然后选择合适的ViewResolver来渲染视图并返回
通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 :
1:解决post请求乱码问题:
在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
CharacterEncodingFilter
/*
2:get请求中文参数出现乱码解决方法有两个:
①修改tomcat配置文件添加编码与工程编码一致,如下:
②另外一种方法对参数进行重新编码:
可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可。
是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段。
一般用@Controller注解,也可以使用@RestController,@RestController注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。
可以在@RequestMapping注解里面加上method=RequestMethod.GET。
直接在方法的形参中声明request,SpringMVC就自动把request对象传入。
@ResponseBody:作用在方法上,表示该方法的返回结果直接写入响应体中,如果不使用@ResponseBody,则返回值会解析为跳转路径。
@RequestBody:作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。
@
RequesParam
:将请求参数绑定到控制器的方法参数上,同时可以给参数一些限定,比如说指定参数的默认值,是否允许参数为空等等。
@
PathVariable
:是将Rest
风格的请求中{}
中的值取出来
使用过滤器方式拦截请求(实现javax.servlet.Filter
接口)
使用SpringMVC提供的拦截器(实现HandlerInterceptor
接口)
利用Spring的切面(AOP)实现拦截器。
SpringMVC的核心控制器是Servlet,而Struts2是Filter
控制器实例:SpringMVC会比Struts2快一些,SpringMVC是基于方法设计的,而Struts2是基于对象,每次发一次请求都会实例一个action,每个action都会被注入属性,而Spring更加像Servlet,只有一个实例,每次请求执行对应的方法即可
管理方式:springmvc是Spring中的模块,管理起来会更加的简单方便一些,而且提供了比较全面的注解方式进行管理,各种功能也比较全面,使用简单,而Struts需要采用xml很多的配置参数来管理
参数传递:Struts2自身提供多种参数接收,其实都使用过(ValueStack)进行传递和赋值,而SpringMVC是通过方法的参数进行接收的
学习难度:Struts学习成本高,SpringMVC比较简单
intercepter的实现机制:struts有以自己的interceptor机制,springmvc用的是独立的aop,这样导致struts的配置文件还是比springmvc大,虽然struts的配置能继承,但是个人认为,springmvc会更加的简介,开发效率更高一些。
springmvc处理ajax请求,直接通过返回数据,方法中使用注解@ResponseBody,Springmvc自动帮我们对象转换为JSON数据,而struts是用国插件的方式进行处理