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启动流程&运行流程-解决乱码问题的方案】就先学习到这里,更多的内容持续创作更新中。

相关文章
|
6月前
|
前端开发 Java 应用服务中间件
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)
|
XML Java 数据库连接
【spring源码系列-03】xml配置文件启动spring时refresh的前置工作
【spring源码系列-03】xml配置文件启动spring时refresh的前置工作
117 0
|
Java
如何在SpringBoot启动过程中,进行自定义操作?
如何在SpringBoot启动过程中,进行自定义操作?
68 0
|
7月前
|
XML Java 应用服务中间件
SpringBoot配置外部Tomcat项目启动流程源码分析(长文)
SpringBoot配置外部Tomcat项目启动流程源码分析(长文)
569 0
|
Java 应用服务中间件
关于SpringMVC运行项目时出现404错误
404错误一般是没找到对应的资源,这时候你就应该去找资源有没有缺失,或者资源放错位置了,再或者读取资源出现错误。500错误是服务器错误, 一般是你的逻辑代码可能出现了问题。401错误一般为没有相应的权限。400错误是请求错误,检查一下请求的格式有没有问题。405错误一般就是前后端get和post方法不一致造成的。
234 0
|
Java
SpringBoot项目启动过程中做数据资源初始化的方式
SpringBoot项目启动过程中做数据资源初始化的方式
509 0
|
Java Spring 容器
SpringBoot 启动时自动执行代码的几种方式
SpringBoot 启动时自动执行代码的几种方式
SpringBoot 启动时自动执行代码的几种方式
|
Java 应用服务中间件 Spring
《SpringBoot启动流程四》:图文带你debug源码分析SpringApplication运行阶段和运行后阶段
《SpringBoot启动流程四》:图文带你debug源码分析SpringApplication运行阶段和运行后阶段
264 0
《SpringBoot启动流程四》:图文带你debug源码分析SpringApplication运行阶段和运行后阶段
|
监控 安全 Java
《SpringBoot启动流程三》:两万+字图文带你debug源码分析SpringApplication准备阶段(含配置文件加载时机、日志系统初始化时机)
《SpringBoot启动流程三》:两万+字图文带你debug源码分析SpringApplication准备阶段(含配置文件加载时机、日志系统初始化时机)
328 0
《SpringBoot启动流程三》:两万+字图文带你debug源码分析SpringApplication准备阶段(含配置文件加载时机、日志系统初始化时机)
springboot测试中主程序中能加载bean测试中无法加载bean
如遇到springboot版本的问题导致bean类无法注入到项目中,可能是注解和springboot版本不匹配导致启动类启动时扫描不到相应的bean类
springboot测试中主程序中能加载bean测试中无法加载bean