12月27号面试题分析整理
12月27号面试题分析整理
一.jsp的九大内置对象和作用
- request对象
request 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。 - response对象
response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。 - session对象
session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。 - application对象
application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。 - out 对象
out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。 - pageContext 对象
pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。 - config 对象
config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。 - page 对象
page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。 - exception 对象
exception 对象的作用是显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。
二.get和post请求的区别
–知识点1∶ GET和POST请求的区别(表单请求的方法)<form action="method="get’>
- GET请求把表单数据显示在url地址上,POST请求把表单数据放在请求体内
- GET表单数据长度有限,而POST没有限制
- GET请求 速度快些,POST相对会慢些
- GET请求一次性把数据和请求头header发送给服务器,服务器返回200,POST先把请求头header发送给服务器,服务器返回状态码100后再继续发送数据
- 假如表单中有图片、音频、视频等数据时,只能用post请求,不能用get get请求只能以字符形式发送请求,post请求既可以用字符也可以用字节
三.转发的重定向的区别(页面跳转)
- 请求转发通过request,重定向是通过response
- 请求转发的ur地址仍然显示跳转前原sp页面地址,而重定向的ur地址会显示跳转后的页面地址
- 请求转发内部转发,一次客户端请求,而重定向,客户端是2次请求
- 请求转发只能跳转本应用程序内的资源,而重定向可以跳转应用程序以外的资源
四.session的作用和原理
- 作用:实现网页之间数据传递,是一个存储在服务器端的对象集合。解决http无状态无连接的问题。
- 原理:客户端发送一个请求时,会在服务器端为该客户端创建一个session,会有一个sessionid,sessionid存放到一个cookie里,返回给客户端,当客户端再次发送请求时,这时会把sessionid传给服务端,服务端会比较sessionid
五.session的三种销毁方式
-
会话的生命周期
从浏览器打开使用session开始,一直到关闭浏览器或者手动销毁session或者session设置有效时间中止时,session结束 -
手动销毁session
session.invalidate() -
session的有效时长
使用session.setMaxInactiveInterval()方法设置一个session的有效时长。
session.setMaxInactiveInterval(10);//单位是秒,表示的是10秒钟后,session内容自动被清除
六.cookie是什么?如何使用
- cookie到底是个什么?
由客户端浏览器生成的一个文件,用于存放一些值, - cookie如何使用?
cookie不是jsp的内置对象,需要手动创建cookie对象,cookie对象的值只能支持字符串,不支持其他类型。
七.jsp四大范围
- page范围 pageContext:只能在当前页面获取到.
- request 请求转发中,原jsp页面中存入值,使用请求转发跳转到另外一个页面,在另外一个页面中可以取出该值.
- session 只要在同一个会话中,之前存入session的值,都可以获取到.
- application 只要在同一个应用程序中,之前存入的值,在所有页面都可以获取.
八.禁用cookie后,如何让session继续能使用(url重写)
- 可以使用url重写
javascript response.sendRedirect(response.encodeRedirectURL("test2.jsp")); //使用url重写的好处: url重写 假如cookie被禁用,url会重写,cookie没有被禁用,url不会被重写
九.servlet的生命周期
Servlet生命周期分为三个阶段:
- 初始化阶段 调用init()方法
初始化init().只会被执行一次,而且是最先被执行。在tomcat 启动后,第一次运行该servlet时被执行一次。后续不再执行。 - 响应客户请求阶段 调用service()方法
service() 每请求一次servlet都会调用一次doGet或doPost方法。 - 终止阶段 调用destroy()方法
销毁destroy()只会被执行一次,而且是最后被执行的。而且要是正常关闭才会有。
十.servlet常用的api
- servlet基础类: Servlet接口、ServletConfig接口、ServletContext接口(上下文,全局对象)
- servlet抽象类:GenericServlet实现了上面2个接口
- servlet类 :HttpServlet继承了上面抽象类
- servlet接口: ServletRequest、ServletResponse接口
- serlvet请求响应类:HttpServletRequest,HttpServletResponse
十一.servlet的两种映射
1、在web.xml中配置
<servlet-name>、<servlet-class>、<servlet-name>、<url-pattern>
2、通过配置通过注解的方式
@WebServlet("/DemoServlet")
注:Servlet 3.0的新特性
十二.多重映射
是指同一个Servlet,可以被映射成多个虚拟路径
客户端可以通过多个路径,实现对同一个Servlet的访问
十三.过滤器的执行过程
与配置的映射路径有关
- 一. 概念
过滤器就是在源数据和目的数据之间起过滤作用的中间组件。对Web应用来说,过滤器是一个驻留在服务器端的Web组件,它可以截取客户端和资源之间的请求与响应信息,并对这些信息进行过滤 - 二. 执行流程
当Web容器接受到一个对资源的请求时,它就会判断是否有过滤器与这个资源相关联(这是一个自动的过程)。如果有,那么容器将把请求交给过滤器进行处理。在过滤器中,你可以改变请求的内容,或者重新设置请求的报头信息,然后再将请求发送给目标资源。当目标资源对请求作出响应时候,容器同样会将响应先转发给过滤器,再过滤器中,你可以对响应的内容进行转换,然后再将响应发送到客户端。
十四.servlet的加载
<load-on-startup>n</load-on-startup>
n<0 代表tomcat启动时不加载,只有在用户访问该servlet才加载
n>=0 代表该servlet会随tomcat而加载,优先级越低,数字越大
前段时间错题整理
1.是否可以从一个 static 方法内部发出对非 static 方法的调用
不可以。
因为非 static 方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而 static 方法调用时不需要创建对象,可以直接调用。也就是说,当个 static 方法被调用时,可能还没肴创建任何实例对象;如果从出对非 static 方法的调用,那个非 Starjc 方法是关联到哪个对象上的呢?这个逻辑无法成立个 static 方内部发出对非 satic 方法的调用。
2.java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
是引用对象的地址值不能变,引用变量所指向的对象的内容是可以改变。
final变量永远指向这个对象,是一个常量指针,而不是指向常量的指针。
例如:
final StringBuffer sbu = new StringBuffer(“abc”);
在对其进行重新赋值
sbu = new StringBuffer(“”);
会出现编译错误,被final修饰的变量是不能被重新赋值的。
而,sbu.append(“d”);是可以编译通过的;
3. 静态变量和实例变量的区别?
- 在语法定义上的区别:
静态变量前要加 static 关键字,而实例变量(成员变量)前则不加。 - 在程序运行时的区别:
- 实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。
- 静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,只分配一次,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
4.触发器的概念存储过程的概念。
- 触发器:是存储在数据库中的过程,当表被修改(增、删、改)时它隐式地被激发。
- 存储过程:是数据库语言8(2l.的集合,同样也存储在数据库中,但是他是由其他应用程序来启动运行或者也可以直接运行。
5.equals和==的区别
- == 表示 判断2个变量或对象实例是否指向同一个内存空间,equals()表示 判断2个变量或对象实例所指向的内存空间的值是否相同。
- == 表示 对内存地址进行比较,equals()表示 对字符串的内容进行比较。
- == 表示引用是否相同,equals() 表示值是否相同。
- equals是Java中一个方法,==是一个操作符。
6. 什么是事务?有哪些特性?
- 事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:
- 四大特性
- 原子性:事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
- 一致性:事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
- 隔离性:由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
- 持久性:事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。