1、SpringMVC是什么?
SpringMVC是一种web层的MVC框架,包括:模型层(Model)、控制层(Controller)、View(视图层)。提供了前端路由映射、视图解析等功能,让 Java Web 开发变得更加简单。
2、SpringMVC的执行流程
- 客户端发送请求至前端控制器(DispatcherServlet)。
- 前端控制器通过查询 HandlerMapping,找到处理对应请求的控制器Controller。
- 处理器Controller进行业务逻辑处理后,会返回一个 ModelAndView 对象。
- 前端控制器将获取的 ModelAndView 对象传给视图解析器(ViewResolver),解析出真正的视图对象(view)。
- 前端控制器获取到解析好的页面数据,将解析好的页面返回给客户端。
3、 POJO 和 JavaBean 有什么区别?
- POJO(Plain Ordinary Java Object)普通 Java 类,具有 getter/setter 方法的普通类都就可以称作 POJO。
- JavaBean 是 Java 语言中的一种可重用组件,JavaBean 的构造函数和行为必须符合特定的约定:这个类必须有一个公共的缺省构造函数;这个类的属性使用 getter/setter 来访问,其他方法遵从标准命名规范;这个类应是可序列化的。
- 简而言之,当一个 POJO 可序列化,有一个无参的构造函数,它就是一个JavaBean。
4、常见的Http状态码
常见的状态码 200 : 请求成功。一般用于GET与POST请求。 202 : 请求已接受,但是未处理。 301 : 请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。 302 : 与301类似,资源只是临时被移动。客户端应继续使用原有URI。 400 : 客户端请求的语法错误,服务器无法理解。 401 : 请求要求用户的身份认证。 403 : 服务器理解请求客户端的请求,但是拒绝执行此请求。 404 : 服务器无法根据客户端的请求找到资源(网页)。 501 : 服务器不支持请求的功能,无法完成请求。 505 : 服务器不支持请求的HTTP协议的版本,无法完成处理。
5、forward 和 redirect
- forward 表示请求转发,请求转发是服务器的行为;redirect 表示重定向,重定向是客户端行为。
- forward 转发页面和转发到的页面可以共享 request 里面的数据;redirect不能共享数据;
- forward 是服务器请求资源,服务器直接访问把请求的资源转发给浏览器,浏览器根本不知道服务器的内容是从哪来的,因此它的地址栏还是原来的;redirect 是服务端发送一个状态码告诉浏览器重新请求新的地址,因此地址栏显示的是新的 URL。
6、SpringMVC 的常用注解有哪些?
- @Controller:用于标记某个类为控制器;
- @ResponseBody:见下
- @RestController:相当于 @Controller 加 @ResponseBody 的组合效果;
- @Component:标识为 Spring 的组件;
- @Configuration:用于定义配置类;
- @RequestMapping:用于映射请求地址的注解;
- @Autowired:自动装配对象(根据对象的类型去容器中拿);
- @Resources:自动装配对象(根据声明的对象名去容器中拿);
- @RequestHeader:可以把 Request 请求的 header 值绑定到方法的参数上。
7、@ResponseBody
@ResponseBody并不是以json返回。不加@ResponseBody,是将方法返回的值作为视图名称,并自动匹配视图去显示,而加上@ResponseBody就仅仅是将方法返回值当作内容直接返回到客户端,并且会自适应响应头的content-type,返回的字符串符合json,那么content-type就是application/json,如果是普通字符串,就是text/plain,但是加上注解属性produces=application/json,那么不管内容是什么格式,响应头的content-type就一直是application/json,不再去做自适应,至于内容是不是json都不重要了。
8、拦截器的使用场景有哪些?
- 日志记录:可用于记录请求日志,便于信息监控和信息统计;
- 权限检查:可用于用户登录状态的检查;
- 统一安全处理:可用于统一的安全效验或参数的加密 / 解密等。
9、SpringMVC 有几种获取 request 的方式?
- 从请求参数中获取 在方法参数中定义 HttpServletRequest request
- 通过 RequestContextHolder 上下文获取 request 对象
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttribute
s)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest();
- 通过自动注入的方式
@Autowired
private HttpServletRequest request;