当前位置: 首页>前端>正文

Java最新面试宝典 SpringMVC面试题)

Java最新面试宝典 SpringMVC面试题

  • 前言
  • 1、什么是SpringMVC?
  • 2、SpringMVC 的优点?
  • 3、Spring MVC配置步骤?
  • 4、SpringMVC工作原理了解吗?
  • 5、Spring MVC 核心组件的功能?
  • 6、B/S 系统标准的三层架构是什么?
  • 7、@Controller 注解有什么用?
  • 8、@RequestMapping 注解有什么用?
  • 9、@RestController 和 @Controller 有什么区别?
  • 10、@RequestMapping 和 @GetMapping 注解的不同之处在哪里?
  • 11、@RequestParam 和 @PathVariable 两个注解的区别?
  • 12、返回 JSON 格式使用什么注解?
  • 13、SpringMVC 拦截器与过滤器的区别?
  • 14、怎么控制过滤器和拦截器的执行顺序?
  • 15、SpringMVC 中如何解决请求中⽂乱码问题?
  • 16、怎么把ModelMap⾥⾯的数据放⼊Session⾥⾯
  • 17、SpringMVC 和 Struts2 的异同?
  • 18、SpringMVC 怎么样重定向和转发的?
  • 19、SpringMvc里面拦截器是怎么写的?
  • 20、HandlerInterceptor接口是什么?
  • 总结

前言

最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新。

如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!

1、什么是SpringMVC?

Spring MVC是一个基于Java的实现了MVC设计模式的轻量级Web框架,通过把Model,View,Controller分离,把复杂的web层分成逻辑清晰的3部分,减少了出错,方便开发人员之间的配合。

2、SpringMVC 的优点?

(1)可以支持各种视图技术,包括Jsp、Thymeleaf、Freemarker等;
(2)与Spring框架集成(包括IOC容器、AOP等);
(3)有清晰的角色分配:前端控制器,处理器映射器,处理器适配器,视图解析器。
(4)支持各种请求资源的映射策略。

3、Spring MVC配置步骤?

1)、搭建Spring MVC 环境需要使用的jar包;
2)、web.xml配置前端控制器以及SpringMVC.xml的路径:

< !--前端控制器配置(DispatcherServlet)-->
<servlet>
        <servlet-name>SpringMVC </servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:SpringMVC .xml</param-value>
        </init-param>
   <!--自动动配置要放在<init-param>配置后,否则会报错-->
        <load-on-startup>1</load-on-startup>
</servlet>
<!--配置控制器访问,配置的值为/ ,表示所有访问都会进入此前端控制器(.jsp访问地址除外)-->
  <servlet-mapping>
        <servlet-name>SpringMVC </servlet-name>
        <url-pattern>/</url-pattern>
  </servlet-mapping>

3)、在SpringMVC.xml的配置文件中:

<!-- 配置spring注解扫描-->
 <context:component-scan base-package="Controller"></context:component-scan>
<!-- 配置SpringMVC 注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--配置视图解析器: -->
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <!--前缀配置-->
      <property name="prefix" value="/"></property>
      <!--后缀配置-->
      <property name="suffix" value=".jsp"></property>
 </bean>
<!--配置静态资源:配置需要放行的静态资源地址,不需要解析该请求地址-->
<!-- mapping="":配置静态资源的请求路径
    location="":配置静态资源所在的路径,使用*通配符,一个*表示该路径下的资源,两个**表示该路径下的所有资源文件(包含子文件中的资源文件)
 -->
    <mvc:resources mapping="/js/" location="/js/**"></mvc:resources>
    <mvc:resources mapping="/css/" location="/css/**"></mvc:resources>
    <mvc:resources mapping="/images/" location="/images/**"></mvc:resources>

4、SpringMVC工作原理了解吗?

原理如下图所示:
Java最新面试宝典 SpringMVC面试题),在这里插入图片描述,第1张
1)、客户端(浏览器)发送请求,直接请求到 DispatcherServlet;
2)、前端控制器调用处理器映射器HandlerMapping,处理器映射器根据请求URL信息解析返回一个处理器执行链,包含处理器(handler)和拦截器(interceptors);
3)、前端控制器调用处理器适配器HandlerAdapter,处理器适配器根据Handler来调用真正的处理器Controller,并处理相应的业务逻辑;
4)、处理完业务逻辑后,会返回一个ModelAndView对象(Model是封装的数据对象);
6)、然后前端控制器调用视图解析器ViewResolver,视图解析器根据View名称查找到具体的页面地址,并返回一个View 视图对象;
7)、然后前端控制器对视图进行渲染,最后通过页面展示给客户端。

5、Spring MVC 核心组件的功能?

  • 前端控制器DispatcherServlet :
    DispatcherServlet 是 Spring MVC 的入口函数。负责接收客户端请求,响应结果给客户端,相当于转发器。有了 DispatcherServlet ,可以大大减少其它组件之间的耦合度。
    DispatcherServlet 是整个流程控制的中心,由它来调用其它组件处理用户的请求。
  • 处理器映射器HandlerMapping :
    HandlerMapping 负责根据用户请求(URL),找到合适的 HandlerExecutionChain 处理器执行链,包含处理器(handler)和拦截器们(interceptors)
  • 处理器适配器HandlerAdapter:
    按照特定规则(HandlerAdapter 要求的规则)去执行 Handler,通过 HandlerAdapter 对处理器进行执行。因为处理器 handler 的类型是 Object 类型,需要有一个调用者来实现 handler 是怎么被执行。所以这里需要一个处理器适配器,由它去执行处理器。
  • 处理器 Handler:(需要工程师开发)
    Handler 是在 DispatcherServlet 的控制下,Handler 对具体的用户请求进行处理。由于 Handler 涉及到具体的用户业务请求,所以一般情况下需要工程师根据业务需求来开发 Handler。
  • 视图解析器 View Resolver:
    进行视图解析,首先,根据逻辑视图名解析成物理视图名(即具体的页面地址),再生成 View 视图对象。
  • MultipartResolver 内容类型( Content-Type )为 multipart/* 的请求的解析器,⽤于上传请求,通过将普通的请求包装成 MultipartHttpServletRequest 来实现。
    MultipartHttpServletRequest 可以通过 getFile() ⽅法 直接获得⽂件。
    如果上传多个⽂件,还可以调⽤ getFileMap()⽅法得到Map<FileName,File>这样的结构,MultipartResolver 的作⽤就是封装普通的请求,使其拥有⽂件上传的功能。

6、B/S 系统标准的三层架构是什么?

B/S系统标准的三层架构分别是:表现层、业务层、持久层。

    1. 表现层 :
      常说的web 层:它负责接收客户端请求,响应结果给客户端。
      MVC 是表现层的设计模型,和其他层没有关系。
  • 2.业务层 :
    常说的 service 层:它负责业务逻辑处理,如果要对数据持久化需要保证事务⼀致性。(也就是我们说的,事务应该放到业务层来控制)
  • 3.持久层 :
    常说的 DAO层:负责数据持久化,就是和数据库交互,对数据库表进⾏增删改查的。

7、@Controller 注解有什么用?

@Controller 注解标记一个类为 Spring的控制器,Spring会扫描到该注解的类,然后扫描这个类下面带有 @RequestMapping 注解的方法,根据注解信息,为这个方法生成一个对应的处理器对象。
等价于实现了 Spring MVC提供的 Controller 或者 HttpRequestHandler 接口

8、@RequestMapping 注解有什么用?

@RequestMapping 注解,配置HTTP 请求方法,URL等信息,这样才能将请求和方法进行映射。这个注解可以作用于类上面,也可以作用于方法上面,在类上面一般是配置这个控制器的 URL前缀。

9、@RestController 和 @Controller 有什么区别?

@RestController 注解,在 @Controller 基础上,增加了 @ResponseBody 注解,更加适合目前前后端分离的架构下,提供 Restful API ,返回例如 JSON 数据格式。当然,返回什么样的数据格式,根据客户端的 ACCEPT 请求头来决定。

10、@RequestMapping 和 @GetMapping 注解的不同之处在哪里?

1、@RequestMapping:可用在类和方法上;@GetMapping 仅可用在方法上
2、@RequestMapping:可支持 GET、POST、PUT、DELETE 等请求方法;
@GetMapping 只支持GET 请求方法,目的是为了提高清晰度。

11、@RequestParam 和 @PathVariable 两个注解的区别?

区别在于一个是用?,一个是用/
@RequestParam 是从request里面获取参数值(user?id=123);
而 @PathVariable 是从URI后缀获取参数(user/123)。

12、返回 JSON 格式使用什么注解?

可以使用 @ResponseBody 注解,或者使用包含 @ResponseBody 注解的 @RestController 注解。

13、SpringMVC 拦截器与过滤器的区别?

①拦截器是基于java的反射机制的,比如动态代理,过滤器是依赖于servlet容器,基于函数回调;   
②拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用;
③拦截器可以获取IOC容器中的各个bean,过滤器就不行。
触发时机:
1.过滤器是在请求进入容器后,但请求进入servlet之前进行处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。
2. 拦截器的配置⼀般在的SpringMVC配置⽂件中,使⽤Interceptor标签
总结:过滤器Filter包裹住servlet,servlet包裹住拦截器Interceptor
Java最新面试宝典 SpringMVC面试题),在这里插入图片描述,第2张

14、怎么控制过滤器和拦截器的执行顺序?

过滤器Filter用@Order注解控制执行顺序,通过@Order控制过滤器的级别,值越小级别越高越先执行。
拦截器Interceptor默认的执行顺序,就是它的注册顺序,也可以通过@Order注解控制,值越小越先执行。

15、SpringMVC 中如何解决请求中⽂乱码问题?

解决post请求乱码问题:

  • 1、在doPost方法首行添加request.setCharacterEncoding(“utf-8”);
  • 2、在web.xml中配置⼀个CharacterEncodingFilter过滤器,并设置编码为utf-8;
    解决get请求乱码问题:
    在Tomcat中的server.xml文件指定URIEncoding=”UTF-8”。
    (< Connector port=“8080” protocol=“HTTP/1.1” redirectPort=“8443” connectionTimeout=“20000” URIEncoding=“UTF-8”/>)

16、怎么把ModelMap⾥⾯的数据放⼊Session⾥⾯

默认情况下SpringMVC将模型中的数据存储到request域中,当⼀个请求结束后,数据就失效了。如果要跨页⾯使⽤。那么需要使⽤到session。
可以在类上⾯加上@SessionAttributes注解,⾥⾯包含的字符串就是要放⼊session⾥⾯的key。
@SessionAttributes(value = { “key” })

17、SpringMVC 和 Struts2 的异同?

  • 1)、入口不同
    Spring MVC 的入门是一个 Servlet 控制器。
    Struts2 入门是一个 Filter 过滤器。
  • 2)、安全问题
    Spring MVC默认为单例,是非线程安全的。
    Struts2 是多例,是线程安全的。

18、SpringMVC 怎么样重定向和转发的?

  • 转发:在返回值前面加"forward:“,如"forward:user.do?name=hello”
  • 重定向:在返回值前面加"redirect:“,如"redirect:http://www.baidu.com”。

19、SpringMvc里面拦截器是怎么写的?

有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器即可。

20、HandlerInterceptor接口是什么?

我们可以配置多个拦截器,每个拦截器中都有三个方法。下面将总结多个拦截器中的方法执行规律。
1、preHandle:Controller方法处理请求前执行,根据拦截器定义的顺序,正向执行。
2、postHandle:Controller方法处理请求后执行,根据拦截器定义的顺序,逆向执行。需要所有的preHandle方法都返回true时才会调用。
3、afterCompletion:View视图渲染后处理方法:根据拦截器定义的顺序,逆向执行。preHandle返回true就会调用。

总结

都已经看到这里啦,赶紧收藏起来,祝您工作顺心,生活愉快!


https://www.xamrdz.com/web/2d61849037.html

相关文章: