SpringMVC启动流程&运行流程&解决乱码问题

简介: SpringMVC启动流程&运行流程&解决乱码问题

1. Spring MVC 的优点

  1. 它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是 java 组件。并且和 Spring 提供的其他基础结构紧密集成
  2. 不依赖于 Servlet API(目标虽是如此,但是在实现的时候确实是依赖于 Servlet 的)
  3. 可以任意使用各种视图技术,而不仅仅局限于 JSP
  4. 支持各种请求资源的映射策略
  5. 易于扩展
  6. 与Spring框架集成(如IoC容器、AOP等);
  7. 清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射 (handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器 (ViewResolver)。

2.Spring MVC 运行流程

  1. Spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求 进行真正的处理工作。

  2. DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.

  3. DispatcherServlet请请求提交到目标Controller

  4. Controller进行业务逻辑处理后,会返回一个ModelAndView

  5. Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象

  6. 视图对象负责渲染返回给客户端。

3.Spring MVC 启动流程

在 web.xml 文件中给 Spring MVC 的 Servlet 配置了 load-on-startup,所以程序启动的时候会初始化 Spring MVC,在 HttpServletBean 中将配置的 contextConfigLocation 属性设置到 Servlet 中,然后在 FrameworkServlet 中创建了 WebApplicationContext, DispatcherServlet 根据 contextConfigLocation 配置的 classpath 下的 xml 文件初始化了 Spring MVC 总的组件。

4.SpringMVC 实现拦截器过程?

  1. 一种是实现接口
  2. 另外一种是继承适配器类,然后在 SpringMVC 的配置文件中配置拦截器即可
<!-- 配置 SpringMvc 的拦截器 --> 
<mvc:interceptors>       
<!-- 配置一个拦截器的 Bean 就可以了 默认是对所有请求都拦截 -->       
<bean id="myInterceptor" class="com.et.action.MyHandlerInterceptor"></bean>   

<!-- 只针对部分请求拦截 -->         
<mvc:interceptor>
<mvc:mapping path="/modelMap.do" /><bean class="com.et.action.MyHandlerInterceptorAdapter" />
</mvc:interceptor>
</mvc:interceptors>

5.SpringMVC 怎么和 AJAX 相互调用?

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

  1. 加入 Jackson.jar

  2. 在配置文件中配置 json 的映射

  3. 在接受 Ajax 方法里面可以直接返回 Object,List 等,但方法前面要加上@ResponseBody 注解

6.Spring MVC的控制器是不是单例模式,如果是,有什么问题,怎么解决?

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

7. 如何解决POST请求中文乱码问题,GET的又如何处理呢?

7.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>

7.2 解决Get请求乱码问题:

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

  1. 修改tomcat配置文件添加编码与工程编码一致,如下:
 <ConnectorURIEncoding="utf‐8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
  1. 另外一种方法对参数进行重新编码:
String userName = new String(request.getParamter("userName").getBytes(“ISO8859-1),“utf-8)

ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。

8.MVC是什么?MVC设计模式的好处有哪些?

  1. MVC是一种设计模式(设计模式就是日常开发中编写代码的一种好的方法和经验 的总结)。模型(model)-视图(view)-控制器(controller),三层架构的 设计模式。用于实现前端页面的展现与后端业务数据处理的分离。

  2. MVC设计模式的好处:

  • 分层设计,实现了业务系统各个组件之间的解耦,有利于业务系统的可扩展 性,可维护性。

  • 有利于系统的并行开发,提升开发效率。

9.SpingMvc中的控制器的注解一般用哪个,有没有别的注解可以替代?

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

好了,关于【SpringMVC启动流程&运行流程-解决乱码问题的方案】就先学习到这里,更多的内容持续创作更新中。

相关文章
|
应用服务中间件 容器
【JavaWeb】知识总结Ⅹ(HttpServletRequest, HttpServletResponse)
请求行信息:可以使用getMethod()方法获取请求方法(如GET、POST等),使用getRequestURI()方法获取请求的URI(统一资源标识符),使用getProtocol()方法获取请求使用的协议(如HTTP/1.1)。 请求头信息:可以使用getHeader(String name)方法获取指定名称的请求头的值,使用getHeaderNames()方法获取所有请求头的名称的枚举。 请求参数:可以使用getParameter(String name)方法获取指定名称的请求参数的值,使用getParameterNames()方法获取所有请求参数的名称的枚举。
|
存储 监控 安全
【RISC-V 理论篇】SBI 规范解读(下)
【RISC-V 理论篇】SBI 规范解读(下)
891 0
|
5月前
|
存储 弹性计算 数据管理
阿里云对象存储OSS收费标准:500G存储118元1年、
阿里云对象存储OSS 2025年收费标准涵盖存储、流量及请求等费用,支持按量付费与包年包月两种模式。标准型存储按量价格为0.09元/GB/月,包年包月如9元享40GB体验价。流量费仅收取公网出方向,忙时0.50元/GB,闲时0.25元/GB。此外提供多种存储类型(低频、归档等)及流量包优惠方案,未使用功能不收费。详情见阿里云OSS官网。
5063 6
|
应用服务中间件
idea 调试报错 Illegal access: this web application instance has been stopped already.
idea 调试报错 Illegal access: this web application instance has been stopped already.
374 0
|
Java Spring
Spring Boot 3系列之-启动类详解
Spring Boot启动类是构建Spring Boot应用程序的关键组成部分。它允许开发人员配置和管理应用程序的行为,同时简化了应用程序的配置和部署过程。通过深入了解Spring Boot启动类的功能和用法,开发人员可以更好地构建和管理复杂的Spring Boot应用程序。希望本文能够帮助您更好地理解和使用Spring Boot启动类。
654 4
Spring Boot 3系列之-启动类详解
|
数据可视化 Python
【python】python实现杨辉三角的三种方法
【python】python实现杨辉三角的三种方法
987 1
|
11月前
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
1303 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
10月前
|
人工智能 安全 Linux
|
11月前
|
Java Android开发 Windows
玩转安卓之配置gradle-8.2.1
为安卓开发配置Gradle 8.2.1,包括下载和解压Gradle、配置环境变量、修改配置文件以增加国内镜像,以及在Android Studio中配置Gradle和JDK的过程。
917 0
玩转安卓之配置gradle-8.2.1
|
11月前
|
小程序 搜索推荐 API
微信小程序:自定义关注公众号组件样式
尽管关注公众号组件的样式固定且不可修改,但产品经理的需求却需要个性化的定制。在这种情况下,我们需要寻找解决方案,以满足这些特殊需求,尽管这可能有点棘手。
510 0
微信小程序:自定义关注公众号组件样式