Java知识总结--SpringMVC篇

SpringMVC


部门内容来自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的区别


1.1.1-MVC模式

Model VIew Controller:模型视图控制器

最简单的最经典的MVC是jsp+Servlet(Controller)+javaBean(model)

描述:(控制器是核心)

  • 当控制器Servlet收到用户的请求

  • 控制器调用JavaBean完成业务

  • 完成业务后通过控制器跳转jsp页面的方式给用户反馈信息

  • jsp给用户做出响应


1.1.2-MVC框架的出现

是为了解决传统mvc模式问题而出现的框架

传统mvc的模式问题:

  1. 所有的servlet和servlet映射都要配置到web.xml中,如果项目比较大的话,web.xml的数据会过于庞大,不利于实现模块化管理。
  2. Servlet的主要功能就是接收参数,调用逻辑,跳转页面,比如其他字符编码,文件上传的功能也要写在servlet中,不能让servlet住哟啊功能而需要做处理一下特例
  3. 接收参数比较麻烦(request.getParameter),不能通过model接收,只能单个接收,接收完成后转换封装model
  4. 跳转页面方式比较单一(只有forward,redirect),并且当我的页面名称发生改变时需要修改servlet源代码

1.1.3-什么是SpringMVC

Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。


1.1.4-SpringMVC的优点

  • 可以支持多样视图技术
  • 由于同属Spring,有着更好的整合
  • 角色分配清晰:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)
  • 支持各种请求资源的映射策略

1.1.5-Spring MVC的主要组件

前端控制器 DispatcherServlet

处理器映射器HandlerMapping

处理器适配器HandlerAdapter

处理器Handler(需要自己开发)

视图解析器 ViewResolver

视图View(需要自己开发)


1.1.6-SpringMVC框架的核心

DispatcherServlet可以用于接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。


1.1.7-SpringMVC框架执行流程

步骤:

  1. 通过服务器发送请求。请求会被Spring的前端控制器DispatcherServlet拦截
  2. DispatcherServlet对请求的URL进行解析,得到请求资源标识符(url)

  3. 然后通过该url调用HandlerMapping获取该Handler配置的所有相关对象(Hanlder对象以及Hanlder对象内部的拦截器),最后以HandlerExecutionChain对象的形式返回

  4. DispatcherServlet根据获取handler,选择一个合适的HandlerAdapter,提取Request中的数据模型,填充Handler入参,开始执行Handler(Controller)

  5. Handler执行完毕后,向DispatcherServlet返回一个ModelAndView对象
  6. DispatcherServlet根据返回的ModelAndView,选择一个适合的ViewResolver(前提是已经注册到Spring容器中的ViewResolver)
  7. 通过ViewResolver结合Model和View,来渲染视图,DispatcherServlet将渲染结果返回给客户端

简单说:请求被DispatcherServlet拦截,核心控制器分析请求得到url,调用HandlerMapping获取Hanlder,选择一个合适的HandlerAdapter,提取Request中的数据模型,填充Handler入参,执行Handler,执行后向核心控制器返回一个ModelAndView对象,然后选择合适的ViewResolver来渲染视图并返回


1.1.8-SpringMVC的转发和重定向

  1. 转发:"forward:"
  2. 重定向:"redirect:"

1.1.9-SpringMvc和AJAX五种交互方式

  • 通过URL传参
  • 单值传参
  • 对象传参
  • 对象序列化传参
  • List传参

1.1.10-SpringMvc怎么和AJAX相互调用的

通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 :

  • 加入Jackson.jar
  • 在配置文件中配置json的映射
  • 在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。

1.1.11-如何解决POST请求中文乱码问题,GET的又如何处理

1:解决post请求乱码问题:

在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;

<filter>

    <filter-name>CharacterEncodingFilter</filter-name>

    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <init-param>

        <param-name>encoding</param-name>

        <param-value>utf-8</param-value>

    </init-param>

</filter>

<filter-mapping>

    <filter-name>CharacterEncodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

2:get请求中文参数出现乱码解决方法有两个:

①修改tomcat配置文件添加编码与工程编码一致,如下:

<ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

 ②另外一种方法对参数进行重新编码:

  • String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
  • ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。

1.1.12- SpringMVC异常处理

可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可。


1.1.13-SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决

单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段。


1.1.14-SpringMVC常用的注解

  • @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
  • @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。
  • @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。

1.1.15- SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代

一般用@Controller注解,也可以使用@RestController,@RestController注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。


1.1.16- 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?

可以在@RequestMapping注解里面加上method=RequestMethod.GET


1.1.17- 怎样在方法里面得到Request,或者Session

直接在方法的形参中声明request,SpringMVC就自动把request对象传入。


1.1.18- @ResponseBody和@RequestBody

  • @ResponseBody:作用在方法上,表示该方法的返回结果直接写入响应体中,如果不使用@ResponseBody,则返回值会解析为跳转路径。

  • @RequestBody:作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。


1.1.19- @RequestParam和@PathVariable

  • @RequesParam:将请求参数绑定到控制器的方法参数上,同时可以给参数一些限定,比如说指定参数的默认值,是否允许参数为空等等。

  • @PathVariable:是将Rest风格的请求中{}中的值取出来


1.1.20-拦截请求

  • 使用过滤器方式拦截请求(实现javax.servlet.Filter接口)

  • 使用SpringMVC提供的拦截器(实现HandlerInterceptor接口)

  • 利用Spring的切面(AOP)实现拦截器。


1.1.21-Struts2和SpringMVC的区别

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是用国插件的方式进行处理


//持续更新中。。。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章