2、jsp,springmvc相关面试问题

1、会话开启/结束的标志

开启:开启浏览器进行访问
关闭:关闭浏览器结束访问

2、servlet的生命周期

(1)加载和实例化

当Servlet容器启动或客户端发送一个请求时,Servlet容器会查找内存中是否存在该Servlet实例,若存在,则直接读取该实例响应请求;如果不存在,就创建一个Servlet实例。

(2) 初始化

实例化后,Servlet容器将调用Servlet的init()方法进行初始化(一些准备工作或资源预加载工作)。

(3)服务

初始化后,Servlet处于能响应请求的就绪状态。当接收到客户端请求时,调用service()的方法处理客户端请求,HttpServlet的service()方法会根据不同的请求 转调不同的doXxx()方法。

(4)销毁

当Servlet容器关闭时,Servlet实例也随时销毁。其间,Servlet容器会调用Servlet 的destroy()方法去判断该Servlet是否应当被释放(或回收资源)。

3、get和post的请求的区别

  1. get请求的数据会在地址栏中显示,而post请求提交的数据存放在HTTP请求的请求体中,所以post请求更加安全
  2. get请求上传的数据不能大于2kb,而post请求对于传输的数据理论上来说是没有限制的

4、JSP四大作用域

4个JSP内置对象的作用域分别为:application、session、request、page

  • application 在所有应用程序中有效
  • session 在当前会话中有效
  • request 在当前请求中有效
  • page 在当前页面有效

5、JSP的运行原理和运行过程

JSP就是一个Servlet。

1、JSP运行原理

当第一次访问jsp页面时,会向一个servlet容器(tomcat等)发出请求,servlet容器先要把 jsp页面转化为servlet源代码(.java),再编译成.class 文件进行编译。当再次访问jsp页面时,跳过翻译和编译的过程 直接调用

2、JSP运行过程

  1. 客户端发出请求
  2. web容器将jsp请求转化为servlet源代码(.java)
  3. web容器将转化为servlet的源代码进行编译(.class)
  4. web容器加载编译后的代码并执行
  5. 将执行结果响应给客户端

执行流程图

2、jsp,springmvc相关面试问题

总结:JSP执行过程

  1. 首先,客户端发出请求(request),请求访问JSP网页
  2. 接着,JSP Container将要访问的.JSP文件 转译成Servlet的源代码(.java文件)
  3. 然后,将产生的Servlet的源代码(.java文件)经过编译,生成.class文件,并加载到内存执行
  4. 最后把结果响应(response )给客户端

执行JSP网页文件时,需要经过两个时期:转译时期(TranslationTime)和请求时期(RequestTime)。

  • 转译时期:JSP转译成Servlet类(.class文件)。

  • 请求时期:Servlet类(.class文件)执行后,响应结果至客户端。

转译期间主要做了两件事情:

  • 将JSP网页转译为Servlet源代码(.java),此段称为转译时期(Translation time);

  • 将Servlet源代码(.java)编译成Servlet类(.class),此阶段称为编译时期(Compilation time)。

6、静态包含和动态包含的区别

语法:

静态包含:<%@ include file=""%>
动态包含:<jsp: include page=""%>

区别:

  1. 动态包含用的元素是page,而且有两种形式。静态包含用的是file,只有一种形式。
  2. 静态包含发生在:JSP---->java文件阶段。动态包含发生在:执行class文件阶段。动态加入。
  3. 静态包含:只生成一个java文件,动态包含:生成多个class文件。

7、转发和重定向的区别

  1. 重定向访问服务器两次转发只访问服务器一次
  2. 重定向可以看见目标页面的url,转发只能看见第一次访问的页面url,以后的工作都是由服务器来做的
  3. 转发可携带数据,重定向可以访问自己web应用以外的资源

8、前端控制器的执行流程

2、jsp,springmvc相关面试问题

  1. 客户端发送请求到前端控制器DispatcherServlet
  2. DispatcherServlet前端控制器收到请求去调用(HandlerMapping)处理器映射器
  3. HandlerMapping处理器映射器找到具体的处理器(可以根据xml配置,注解进行查找),生成处理器对象及处理器拦截器一并返回给前端控制器
  4. 端控制器DispatcherServlet调用HandlerAdapter处理器适配器,HandlerAdapter经过适配调用具体的处理器(Controller)
  5. Controller控制器执行完成后返回ModelAndView,处理器适配器将controller执行结果ModelAndView返回给前端控制器
  6. 前端控制器将ModelAndView传给ViewReslover视图解析器
  7. ViewReslover解析之后返回具体view
  8. 前端控制器根据view进行渲染视图,并返回给客户端

9、springmvc中的注解

@Controller:

  • @Controller注解是@Component注解在控制层的具体应用。
  • 在普通类上使用@Controller,spring组件扫描时,即会创建一个控制器实例。

@RequestMapping:请求映射路径

@RequestParam:

  • 绑定请求参数到控制器的方法参数。
  • 当http请求中的参数,与控制器中的映射方法参数名不一致时,必须使用@RequestParam进行转换

@PathVariabl从URL中提取变量