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的请求的区别
- get请求的数据会在地址栏中显示,而post请求提交的数据存放在HTTP请求的请求体中,所以post请求更加安全
- 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运行过程
- 客户端发出请求
- web容器将jsp请求转化为servlet源代码(.java)
- web容器将转化为servlet的源代码进行编译(.class)
- web容器加载编译后的代码并执行
- 将执行结果响应给客户端
执行流程图
总结:JSP执行过程
- 首先,客户端发出请求(request),请求访问JSP网页
- 接着,JSP Container将要访问的.JSP文件 转译成Servlet的源代码(.java文件)
- 然后,将产生的Servlet的源代码(.java文件)经过编译,生成.class文件,并加载到内存执行
- 最后把结果响应(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=""%>
区别:
- 动态包含用的元素是page,而且有两种形式。静态包含用的是file,只有一种形式。
- 静态包含发生在:JSP---->java文件阶段。动态包含发生在:执行class文件阶段。动态加入。
- 静态包含:只生成一个java文件,动态包含:生成多个class文件。
7、转发和重定向的区别
- 重定向访问服务器两次,转发只访问服务器一次
- 重定向可以看见目标页面的url,转发只能看见第一次访问的页面url,以后的工作都是由服务器来做的
- 转发可携带数据,重定向可以访问自己web应用以外的资源
8、前端控制器的执行流程
- 客户端发送请求到前端控制器DispatcherServlet
- DispatcherServlet前端控制器收到请求去调用(HandlerMapping)处理器映射器
- HandlerMapping处理器映射器找到具体的处理器(可以根据xml配置,注解进行查找),生成处理器对象及处理器拦截器一并返回给前端控制器
- 端控制器DispatcherServlet调用HandlerAdapter处理器适配器,HandlerAdapter经过适配调用具体的处理器(Controller)
- Controller控制器执行完成后返回ModelAndView,处理器适配器将controller执行结果ModelAndView返回给前端控制器
- 前端控制器将ModelAndView传给ViewReslover视图解析器
- ViewReslover解析之后返回具体view
- 前端控制器根据view进行渲染视图,并返回给客户端
9、springmvc中的注解
@Controller:
- @Controller注解是@Component注解在控制层的具体应用。
- 在普通类上使用@Controller,spring组件扫描时,即会创建一个控制器实例。
@RequestMapping:请求映射路径
@RequestParam:
- 绑定请求参数到控制器的方法参数。
- 当http请求中的参数,与控制器中的映射方法参数名不一致时,必须使用@RequestParam进行转换
@PathVariabl从URL中提取变量