javaweb面试题

说出Servlet的生命周期,并说出Servlet和CGI的区别?

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

jsp的四大作用域

page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面
request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)
session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求
application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域

Get请求和post请求的区别

Form 中的 get 和 post 方法,在数据传输过程中分别对应了 HTTP 协议中的 GET 和 POST 方法。二者主要区别如下:
1)Get 是用来从服务器上获得数据,而 Post 是用来向服务器上传递数据;
2)Get 将表单中数据按照 variable=value 的形式,添加到 action 所指向的 URL 后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post 是将表单中的数据放在 form 的数据体中,按照变量和值相对应的方式,传递到 action所指向 URL;
3)Get 是不安全的,因为在传输过程,数据被放在请求的 URL 中;Post 的 所有操作对用户来说都是不可见的;
4)Get 传输的数据量小,这主要是因为受 URL 长度限制;而 Post 可以传输 大量的数据,所以在上传文件只能使用 Post;
5)Get 限制 Form 表单的数据集必须为 ASCII 字符,而 Post 支持整个 ISO10646 字符集;
6)Get 是 Form 的默认方法。

 Session和cookie的区别

(1)cookie数据存放在客户的浏览器上,session数据放在服务器上。
(2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
(4)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
(5)可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

forward 和 redirect 的区别?

forward 是容器中控制权的转向,是服务器请求资源,服务器直接访问目标 地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器, 浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来 的地址。 redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请 求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以 session,request 参数都可以获取,并且从浏览器的地址栏中可以看到跳转后的 链接地址。前者更加高效,在前者可以满足需要时,尽量使用 forward()方 法 , 并且,这样也有助于隐藏实际的链接;在有些情况下,比如,需要跳转到一个其 它服务器上的资源,则必须使用 sendRedirect()方法。

JSP 中动态 INCLUDE 与静态 INCLUDE 的区别?

动态 INCLUDE 用 jsp:include 动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并 且可以带参数;静态 INCLUDE 用 include 伪码实现,它不会检查所含文件的变化, 适用于包含静态页面<%@ include file="included.htm" %> 

说出数据连接池的工作机制是什么? 

J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的 池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其 表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连 接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表 记为空闲,其他调用就可以使用这个连接。 

 

什么是 ORM?

对象关系映射(Object—Relational Mapping,简称 ORM)是一种为了解决 面向对象与面向关系数据库存在的互不匹配的现象的技术;简单的说,ORM 是通 过使用描述对象和数据库之间映射的元数据,将 java 程序中的对象自动持久化 到关系数据库中;本质上就是将数据从一种形式转换到另外一种形式。

Hibernate 有哪 5 个核心接口? 

Configuration 接口:配置 Hibernate,根据其启动 hibernate,创建 SessionFactory 对象;
SessionFactory 接口:初始化 Hibernate,充当数据存储源的代理,创建 session 对象,sessionFactory 是线程安全的,意味着它的同一个实例可以被应 用的多个线程共享,是重量级、二级缓存;
Session 接口:负责保存、更新、删除、加载和查询对象,是线程不安全的 , 避免多个线程共享同一个 session,是轻量级、一级缓存;
Transaction 接口:管理事务;
Query 和 Criteria 接口:执行数据库的查询。

关于 hibernate1)在 hibernate 中,在配置文件呈标题一对多,多对多的标签是什么;2)Hibernate 的二级缓存是什么;3)Hibernate 是如何处理事务的;

1)一对多的标签为<one-to-many> ;多对多的标签为<many-to-many>;
2)sessionFactory 的缓存为 hibernate 的二级缓存;
3)Hibernate 的事务实际上是底层的 JDBC Transaction 的封装或者是 JTA Transaction 的封装;默认情况下使用 JDBCTransaction。

Hibernate 的应用(Hibernate 的结构)?

//首先获得 SessionFactory 的对象
SessionFactory sessionFactory = new Configuration().configure(). buildSessionFactory();
//然后获得 session 的对象
Session session = sessionFactory.openSession();
//其次获得 Transaction 的对象
Transaction tx = session.beginTransaction();
//执行相关的数据库操作:增,删,改,查 session.save(user); //增加, user 是 User 类的对象 session.delete(user); //删除 session.update(user); //更新
Query query = session.createQuery(“from User”); //查询 List list = query.list();
//提交事务
tx.commit();
//如果有异常,我们还要作事务的回滚,恢复到操作之前
tx.rollback();
//最后还要关闭 session,释放资源
session.close();

什么是重量级?什么是轻量级?

轻量级是指它的创建和销毁不需要消耗太多的资源,意味着可以在程序中经 常创建和销毁 session 的对象;重量级意味不能随意的创建和销毁它的实例,会 占用很多的资源。 

Java 中访问数据库的步骤?Statement 和 PreparedStatement 之间的区别?

Java 中访问数据库的步骤如下:
1)注册驱动;
2)建立连接;
3)创建 Statement;
4)执行 sql 语句;
5)处理结果集(若 sql 语句为查询语句);
6)关闭连接。
PreparedStatement 被创建时即指定了 SQL 语句,通常用于执行多次结构相 同的 SQL 语句。

JDBC,Hibernate 分页怎样实现

方法分别为:
1) Hibernate 的分页:
Query query = session.createQuery("from Student"); query.setFirstResult(firstResult);//设置每页开始的记录号 query.setMaxResults(resultNumber);//设置每页显示的记录数 Collection students = query.list();
2) JDBC 的分页:根据不同的数据库采用不同的 sql 分页语句
例如: Oracle 中的 sql 语句为: "SELECT * FROM (SELECT a.*, rownum r FROM TB_STUDENT) WHERE r between 2 and 10" 查询从记录号 2 到记录号 10 之间的 所有记录

XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?

a: 两种形式 dtd  schema
b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的)
c:有DOM,SAX,STAX等  具体是
DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问 。
SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问 。
STAX:Streaming API for XML (StAX)

 MVC的各个部分都有那些技术来实现?如何实现?

 MVC是Model-View-Controller的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。 

jsp有哪些动作?作用分别是什么? 

JSP共有以下6种基本动作 jsp:include:在页面被请求的时候引入一个文件。 jsp:useBean:寻找或者实例化一个JavaBean。 jsp:setProperty:设置JavaBean的属性。 jsp:getProperty:输出某个JavaBean的属性。 jsp:forward:把请求转到一个新的页面。 jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值