Java面试题(8)

39.jsp和servlet有什么区别

1. jsp经过编译后就变成了servlet,因为jsp的本质就是servlet。jvm只能识别java的类,不能识别jsp 的代码,web容器及那个jsp的编码编译成jvm能够识别的Java类

2. jsp更擅长表现于页面显示,servlet更擅长于逻辑控制。

3. servlet中没有内置对象,jsp中的内置对象都是必须通过HttpServletRequest对象, HttpServletResponse对象以及HttpServlet对象得到。

4. jsp是servlet的一种简化,使用jsp只需要完成需要输出到客户端的内容,jsp中的java脚本如何镶 嵌到一个类中,由jsp容器完成。而servlet则是个完整的java类,这个类的service方法用于生成对 客户端的响应。

40.jsp有那些内置对象,作用分别是什么

1. request:封装客户端的请求,其中包含来自 GET 或 POST 请求的参数;

2. response:封装服务器对客户端的响应;

3. pageContext:通过该对象可以获取其他对象;

4. session:封装用户会话的对象;

5. application:封装服务器运行环境的对象;

6. out:输出服务器响应的输出流对象;

7. config:Web 应用的配置对象;

8. page:JSP 页面本身(相当于 Java 程序中的 this);

9. exception:封装页面抛出异常的对象。

(1)什么是内置对象

内置对象就是响应用户的请求,由服务器自动创建的能够接受并传递用户请求参数和接受并传递服务器 设定的属性

41.说一下jsp的四种作用域

1. page:代表一个页面相关的对象和属性,page域

2. request:代表与web客户端发出的一个请求相关的对象和属性,请求域

3. session:代表与某个用户与服务器建立的一次会话相关的对象和属性,会话域

4. application:代表与整个web应用程序相关的对象和属性,上下文

(1)session与cookie有什么区别

1. session数据保存在服务端,用户在当前会话中的web页面之间跳转时,存储在session对象中的变 量不会丢失。cookie数据保存在客户端。

2. session会保存在服务器上,当服务器关闭就会消失,cookie是保存在客户端的硬盘且有默认最大 容量。

3. cookie不是很安全,可以通过遗留的cookie获取你相关信息。

(2)说一下session的工作原理

session是一个存在服务器上的而类似于一个散列表格的文件,里面存储我们需要的信息,在需要的时 候可以通过键值对取出来。

(3)如果客户端禁止cookie,session还能使用吗 不能。cookie与session一般认为是两个独立的东西,session采用的是在服务器端保持状态的方案,而 cookie采用的是在客户端保持状态的方案。但为什么禁用cookie后就不能得到session了呢?因为 session使用SessionID来确定当前对话所对应的服务器session,而sessionID是用过cookie来传递的, 禁用cookie相当于失去了sessionID,也就得不到Session了。

42.如何避免sql注入

1. PreparedStatement(预编译sql),参数化查询方式,避免sql拼接

2. 使用正则表达式过滤传入的参数(校验数据格式)

3. 字符串过滤

4. jsp中调用该函数检查是否包含非法字符

5. 严格限制用户连接数据库的权限(后手,能够最大限度减少sql注入后的危害)

(1)什么是sql注入

sql注入是web开发中最常见的一种安全漏洞,可以利用它从数据库获取敏感信息,利用数据库的特性执 行一系列恶意操作,甚至获取相关权限。

43.get和post的区别

get请求的数据会附在url之后(就是把数据放置在http协议头中),以?分割url和传输数据,参数之间 使用&相连。get请求提交的数据大小有限制。安全性差(提交的数据显示在url上,可以被查看)。可 以直接使用浏览器地址栏进行访问。 post请求的数据传递通过表单来实现,传递的数据大小理论上没有限制,适合传递对象信息。安全性 高。不能使用地址栏直接访问。

44.http中重定向和请求转发的区别

1. 转发是服务器行为,而重定向是客户端行为。

2. 转发只有一次请求,且浏览器地址不会改变,访问的是本身的web资源,传输的数据不会丢失; 3. 重定向是两次请求,且浏览器地址发生变化,可以访问自身之外的资源,但是传输的数据会丢失。

Add:HttpServlet容器响应Web客户请求流程 如下:

1. Web客户向Servlet容器发出Http请求;

2. Servlet容器解析Web客户的Http请求;

3. Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;

4. Servlet容器创建一个HttpResponse对象;

5. Servlet容器调用HttpServlet的service方法,这个方法中会根据request的Method来判断具体是执 行doGet还是doPost,把HttpRequest和HttpResponse对象作为service方法的参数传给 HttpServlet对象;

6. HttpServlet 调用HttpRequest的有关方法,获取HTTP请求信息;

7. HttpServlet 调用HttpResponse的有关方法,生成响应数据;

8. Servlet容器把 HttpServlet 的响应结果传给Web客户。doGet()或doPost()是创建 HttpServlet 时需要覆盖的方法 . 

45.说一说Java异常

Java异常是一个描述在代码段中发生异常的对象,当发生异常情况时,一个代表该异常的对象被创建并 且在导致该异常的方法中被抛出,而该方法可以选择自己处理异常或者传递该异常。 异常被分为两大类,分别是错误Error和异常Exception(运行时异常、非运行异常) (1)throw与throws的区别 两者都是java中的关键字。前者用于抛出异常,后者用于声明异常(声明但不处理,向上抛,最终到 main,在不处理由虚拟机自动处理) (2)错误和异常的区别 错误是不能够被程序处理的错误;异常是能够被程序处理或者捕获的异常,又分为运行异常和非运行异 常,或者检查异常和不受检异常。

46.final、finally、finalize有什么区别

1. final与finally时java中的关键字,而finalize是一个方法。

2. final可以修饰类、方法、变量。表示最终类、不可重写方法、声明常量

3. finally一般与try-catch一起使用,在处理异常时,finally表示必须要执行的内容(无论是否出现异 常),通常用来存放一些关闭资源的代码。

4. finalize属于Object类,一般由垃圾回收器来调用,当调用system的gc()方法时,由垃圾回收器调 用finalize()方法,

回收垃圾

(1)try-catch-finally中那一部分可以省略 catch可以省略 try:适合处理运行时异常 try-catch:适合处理运行时异常+普通异常 try-catch-finally:适合处理运行时异常+普通异常+扫尾处理

(2)try-catch-finally中,如果catch中return了,finally还会执行吗 会执行,并且在return前执行 

你可能感兴趣的:(java,java,开发语言)