51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

SpringMVC常见面试题整理--2021

1.Spring MVC常用的注解有哪些?=======被问+1

  1. @Controller:Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示

  2. @ResponseBody:该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。简单理解就是:返回的数据不是html标签的页面,而是其他某种格式的数据:比如JSON数据

  3. @RestController:相当于@ResponseBody + @Controller,

  4. @RequestMapping:@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

  5. @RequestBody:@RequestBody主要用来接收前端传递给后端的json字符串中的数据的;而最常用的使用请求体传参的无疑是POST请求了,所以使用@RequestBody接收数据时,一般都用POST方式进行提交

  6. @PathVariable:接收请求路径中占位符的值。比如:请求路径上有个id的变量值,可以通过@PathVariable来获取 @RequestMapping(value = "/page/{id}", method = RequestMethod.GET)

  7. @RequestParam:将请求参数绑定到你控制器的方法参数上

2.Spring MVC怎么样设定重定向和转发的?

  1. 重定向:在返回值前面加"redirect:",比如:"redirect:http://www.baidu.com"

  2. 转发:在返回值前面加"forward:",譬如"forward:/test.js"

3.Spring MVC里面拦截器是怎么写的?

  1. 有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑

  2. 以实现HandlerInterceptor接口为例:

package com.shallow.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 登陆的情况下不放行
        HttpSession session = request.getSession();
        if (session.getAttribute("userLogin") != null){
            return true;
        }

        // 判断登录页面放行
        if (request.getRequestURI().contains("goLogin")) {
            return true;
        }
        if (request.getRequestURI().contains("login")) {
            return true;
        }

        // 如果没登录就点访问首页,跳转去登录界面
        request.getRequestDispatcher("/WEB-INF/jsp/doLogin.jsp").forward(request, response);
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}
  1. 配置文件配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-3.1.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

    <!--绑定controller包,实现扫面它包下的注解-->
    <context:component-scan base-package="com.shallow.controller"/>
    <!--让springmvc不处理静态资源文件-->
    <mvc:default-servlet-handler/>
    <!--支持mvc注解驱动-->
    <mvc:annotation-driven/>
    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--处理JSON乱码-->
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8"/>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                        <property name="failOnEmptyBeans" value="false"/>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <mvc:interceptors>
        <!--拦截器-->
<!--        <mvc:interceptor>-->
<!--            <!–设置需要拦截–>-->
<!--            <mvc:mapping path="/**"/>-->
<!--            <!–设置哪些不拦截–>-->
<!--            <mvc:exclude-mapping path="/css/**"/>-->
<!--            <!–实现拦截的类–>-->
<!--            <bean class="com.shallow.interceptor.InterceptorImpl"/>-->
<!--        </mvc:interceptor>-->
        <!--登录拦截器-->
        <mvc:interceptor>
            <mvc:mapping path="/shallow/**"/>
            <bean class="com.shallow.interceptor.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
</beans>

4.什么是DispatcherServlet?

  1. Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。DispatcherServlet本质上就如其名字所展示的那样是一个Java Servlet。同时它是Spring MVC中最为核心的一块------前端控制器。它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端

  2. DispatcherServlet 在web.xml中的配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <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:spring-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--自定义过滤器配置-->
    <filter>
        <filter-name>encoding</filter-name>
        <!--你自定定义的过滤器实体类-->
        <filter-class>com.shallow.filter.EncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!--springmvc的过滤配置器-->
<!--    <filter>-->
<!--        <filter-name>encoding</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>encoding</filter-name>-->
<!--        <url-pattern>/*</url-pattern>-->
<!--    </filter-mapping>-->

</web-app>
赞(4)
未经允许不得转载:工具盒子 » SpringMVC常见面试题整理--2021