Java面试宝典之Java Web篇20题

4个月前 (11-27 22:25)阅读5回复0
lrj
lrj
  • 管理员
  • 注册排名2
  • 经验值146780
  • 级别管理员
  • 主题29356
  • 回复0
楼主

  1.session和cookie的区别?

  session是存储在办事器端,cookie是存储在客户端的,所以平安来讲session的平安性要比cookie高,然后我们获取session里的信息是通过存放在会话cookie里的sessionid获取的。又因为session是存放在办事器的内存中,所以session里的工具不竭增加会形成办事器的承担,所以会把很重要的信息存储在session中,而把一些次要工具存储在客户端的cookie里,然后cookie切当的说分为两大类分为会话cookie和耐久化cookie,会话cookie切当的说是,存放在客户端阅读器的内存中,所以说他的生命周期和阅读器是一致的,阅读器关了会话cookie也就消逝了,然而耐久化cookie是存放在客户端硬盘中,而耐久化cookie的生命周期就是我们在设置cookie时候设置的阿谁保留时间,然后我们考虑一问题当阅读器封闭时session会不会丧失,从上面论述阐发session的信息是通过会话cookie的sessionid获取的,当阅读器封闭的时候会话cookie消逝所以我们的sessionid也就消逝了,但是session的信息还存在办事器端,那时我们只是查不到所谓的session但它并非不存在。那么,session在什么情状下丧失,就是在办事器封闭的时候,或者是session过时(默认时间是30分钟),再或者挪用了invalidate()的或者是我们想要session中的某一条数据消逝挪用session.removeAttribute()办法,然后session在什么时候被创建呢,切当的说是通过挪用getsession()来创建,那就是session与cookie的区别.

  2、session和cookie联络?

  session是通过cookie来工做的session和cookie之间是通过$_COOKIE['PHPSESSID']来联络的,通过$_COOKIE['PHPSESSID']能够晓得session的id,从而获取到其他的信息。

  在购物网站中凡是将用户加进购物车的商品联通session_id笔录到数据库中,当用户再次拜候是,通过sessionid就能够查找到用户前次加进购物车的商品。因为sessionid是独一的,笔录到数据库中就能够根据那个查找了。

  3.servlet的生命周期?

  Servlet生命周期能够分红四个阶段:加载和实例化、初始化、办事、销毁。

  当客户第一次恳求时,起首揣度能否存在Servlet对象,若不存在,则由Web容器创建对象,然后挪用init()办法对其初始化,此初始化办法在整个Servlet生命周期中只挪用一次。

  完成Servlet对象的创建和实例化之后,Web容器会挪用Servlet对象的service()办法来处置恳求。

  当Web容器封闭或者Servlet对象要沉着器中被删除时,会主动挪用destory()办法。

  4.什么是webservice?

  从外表上看,WebService就是一个利用法式向外界表露出一个能通过Web停止挪用的API,也就是说能用编程的办法通过Web来挪用那个利用法式。我们把挪用那个WebService的利用法式喊做客户端,而把供给那个WebService的利用法式喊做办事端。从深条理看,WebService是成立可互操做的散布式利用法式的新平台,是一个平台,是一套原则。它定义了利用法式若何在Web上实现互操做性,你能够用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们能够通过Web service原则对那些办事停止查询和拜候。

  5.jsp和servlet的区别、配合点、各自利用的范畴?

  JSP是Servlet手艺的扩展,素质上就是Servlet的简易体例。JSP编译后是“类servlet”。Servlet和JSP最次要的差别点在于,Servlet的利用逻辑是在Java文件中,而且完全从表达层中的HTML里别离开来。而JSP的情状是Java和HTML能够组合成一个扩展名为.jsp的文件。JSP偏重于视图,Servlet次要用于掌握逻辑。在struts框架中,JSP位于MVC设想形式的视图层,而Servlet位于掌握层。

  6.转发(forward)和重定向(redirect)的区别?

  1、从地址栏展现来说

  forward是办事器恳求资本,办事器间接拜候目标地址的URL,把阿谁URL的响应内容读取过来,然后把那些内容再发给阅读器。阅读器底子不晓得办事器发送的内容从哪里来的,所以它的地址栏仍是本来的地址。

  redirect是办事端根据逻辑,发送一个形态码,告诉阅读重视新往恳求阿谁地址。所以地址栏展现的是新的URL。

  2、从数据共享来说

  forward:转发页面和转发到的页面能够共享request里面的数据。

  redirect:不克不及共享数据。

  3、从运用处所来说

  forward:一般用于用户登岸的时候,根据角色转发到响应的模块。

  redirect:一般用于用户登记登岸时返回主页面和跳转到其它的网站等

  4、从效率来说

  forward:高。

  redirect:低。

  7.request.getAttribute()和request.getParameter()有何区别?

  1、request.getParameter()获得是通过容器的实现来获得通过类似post,get等体例传进的数据。

  2、request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是恳求处置阶段。

  3、getAttribute是返回对象,getParameter返回字符串

  4、getAttribute()一贯是和setAttribute()一路利用的,只要先用setAttribute()设置之后,才气够通过getAttribute()来获得值,它们传递的是Object类型的数据。并且必需在统一个request对象中利用才有效。,而getParameter()是领受表单的get或者post提交过来的参数

  8.jsp静态包罗和动态包罗的区别?

  1、两者格局差别,静态包罗:%@ include file="文件" %,而动态包罗:jsp : include page = "文件" /。

  2、包罗时间差别,静态包罗是先将几个文件合并,然后再被编译,缺点就是假设含有不异的标签,会出错。动态包罗是页面被恳求时编译,将成果放在一个页面。

  3、生成的文件差别,静态包罗会生成一个包罗页面名字的servlet和class文件;而动态包罗会各自生成对应的servlet和class文件

  4、.传递参数差别,动态包罗可以传递参数,而静态包罗不克不及

  9.MVC的各个部门都有哪些手艺来实现?若何实现?

  MVC是Model-View-Controller的简写。"Model" 代表的是利用的营业逻辑(通过JavaBean,EJB组件实现), "View" 是利用的表达面(由JSP页面产生),"Controller" 是供给利用的处置过程掌握(一般是一个Servlet),通过那种设想模子把利用逻辑,处置过程和展现

  逻辑分红差别的组件实现。那些组件能够停止交互和重用。

  10.jsp有哪些内置对象?感化别离是什么?

  JSP有9个内置对象: 

  request:封拆客户端的恳求,此中包罗来自GET或POST恳求的参数; 

  response:封拆办事器对客户端的响应; 

  pageContext:通过该对象能够获取其他对象; 

  session:封拆用户会话的对象; 

  application:封拆办事器运行情况的对象; 

  out:输出办事器响应的输出流对象; 

  config:Web利用的设置装备摆设对象; 

  page:JSP页面自己(相当于Java法式中的this); 

  exception:封拆页面抛出反常的对象。

  11.办法的区别。

  1、Get是向办事器发索取数据的一种恳求,而Post是向办事器提交数据的一种恳求

  2、Get是获取信息,而不是修改信息,类似数据库查询功用一样,数据不会被修改

  3、Get恳求的参数会跟在url后停止传递,恳求的数据会附在URL之后,以?朋分URL和传输数据,参数之间以相连,%XX中的XX为该符号以16进造表达的ASCII,假设数据是英文字母/数字,原样发送,假设是空格,转换为+,假设是中文/其他字符,则间接把字符串用BASE64加密。

  4、Get传输的数据有大小限造,因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有间接关系了,差别的阅读器对URL的长度的限造是差别的。

  5、GET恳求的数据会被阅读器缓存起来,用户名和密码将明文呈现在URL上,其别人能够查到汗青阅读笔录,数据不太平安。

  在办事器端,用Request.QueryString来获取Get体例提交来的数据

  Post恳求则做为。

  6、POST表达可能修改动办事器上的资本的恳求,在办事器端,用Post体例提交的数据只能用Request.Form来获取。

  12.tomcat容器是若何创建servlet类实例?用到了什么原理?

  当容器启动时,会读取在webapps目次下所有的web利用中的web.xml文件,然后对xml文件停止解析,并读取servlet注册信息。然后,将每个利用中注册的servlet类都停止加载,并通过反射的体例实例化。(有时候也是在第一次恳求时实例化)

  在servlet注册时加上load-on-startup1/load-on-startup假设为正数,则在一起头就实例化,假设不写或为负数,则第一次恳求实例化。

  13.JDBC拜候数据库的根本步调是什么?

  第一步:Class.forName()加载数据库毗连驱动;

  第二步:DriverManager.getConnection()获取数据毗连对象;

  第三步:根据SQL获取sql会话对象,有2种体例 Statement、PreparedStatement ;

  第四步:施行SQL,施行SQL前假设有参数值就设置参数值setXXX();

  第五步:处置成果集;

  第六步:封闭成果集、封闭会话、封闭毗连。

  14.为什么要利用PreparedStatement?

  PreparedStatement接口持续Statement,PreparedStatement实例包罗已编译的SQL语句,所以其施行速度要快于Statement对象。

  做为Statement的子类, PreparedStatement 持续了Statement的所有功用。三种办法execute、 executeQuery和executeUpdate已被更改以使之不再需要参数。

  在 JDBC 利用中,大都情状下利用PreparedStatement,原因如下:

  代码的可读性和可庇护性。Statement需要不竭地拼接,而PreparedStatement不会。

  PreparedStatement尽更大可能进步性能。DB有缓存机造,不异的预编译语句再次被挪用不会再次需要编译。

  最重要的一点是极大地进步了平安性。Statement随便被SQL注进,而PreparedStatement传进的内容不会和sql 语句发作任何婚配关系。

  15.数据库毗连池的原理。为什么要利用毗连池?

  1、数据库毗连是一件费时的操做,毗连池能够使多个操做共享一个毗连。

  2、数据库毗连池的根本思惟就是为数据库毗连成立一个“缓冲池”。预先在缓冲池中放进必然数量的毗连,当需要成立数据库毗连时,只需从“缓冲池”中取出一个,利用完毕之后再放回往。我们能够通过设定毗连池更大毗连数来避免系统无尽的与数据库毗连。更为重要的是我们能够通过毗连池的治理机造监视数据库的毗连的数量、利用情状,为系统开发,测试及性能调整供给根据。

  3、利用毗连池是为了进步对数据库毗连资本的治理

  16.execute,executeQuery,executeUpdate的区别是什么?

  1、Statement的execute(String query)办法用来施行肆意的SQL查询,假设查询的成果是一个ResultSet,那个办法就返回true。假设成果不是ResultSet,好比insert或者update查询,它就会返回false。我们能够通过它的getResultSet办法来获取ResultSet,或者通过getUpdateCount()办法来获取更新的笔录条数。 

  2、Statement的executeQuery(String query)接口用来施行select查询,而且返回ResultSet。即便查询不到笔录返回的ResultSet也不会为null。我们凡是利用executeQuery来施行查询语句,如许的话假设传进来的是insert或者update语句的话,它会抛出错误信息为 “executeQuery method can not be used for update”的java.util.SQLException。 ,

  3、Statement的executeUpdate(String query)办法用来施行insert或者update/delete(DML)语句,或者 什么也不返回,关于DDL语句,返回值是int类型,假设是DML语句的话,它就是更新的条数,假设是DDL的话,就返回0。 

  只要当你不确定是什么语句的时候才应该利用execute()办法,不然应该利用executeQuery或者executeUpdate办法。

  17.JDBC的ResultSet是什么?

  在查询数据库后会返回一个ResultSet,它就像是查询成果集的一张数据表。 

  ResultSet对象庇护了一个游标,指向当前的数据行。起头的时候那个游标指向的是第一行。假设挪用了ResultSet的next()办法游标会下移一行,假设没有更多的数据了,next()办法会返回false。能够在for轮回顶用它来遍历数据集。 

  默认的ResultSet是不克不及更新的,游标也只能往下移。也就是说你只能从第一行到最初一行遍历一遍。不外也能够创建能够回滚或者可更新的ResultSet

  当生成ResultSet的Statement对象要封闭或者从头施行或是获取下一个ResultSet的时候,ResultSet对象也会主动封闭。 

  能够通过ResultSet的getter办法,传进列名或者从1起头的序号来获取列数据。

  18.什么是Servlet?

  Servlet是利用Java Servlet利用法式接口(API)及相关类和办法的Java法式,所有的Servlet都必需要实现的核心接口是javax.servlet.servlet。每一个servlet都必需要间接或者间接实现那个接口,或者持续javax.servlet.GenericServlet或javax.servlet.。

  Servlet次要用于处置客户端传来的HTTP恳求,并返回一个响应。

  19.doGet和doPost办法有什么区别?

  doGet:GET办法会把名值对逃加在恳求的URL后面。因为URL对字符数目有限造,进而限造了用在客户端恳求的参数值的数目。而且恳求中的参数值是可见的,因而,灵敏信息不克不及用那种体例传递。

  doPOST:POST办法通过把恳求参数值放在恳求体中来征服GET办法的限造,因而,能够发送的参数的数目是没有限造的。最初,通过POST恳求传递的灵敏信息对外部客户端是不成见的。

  20.JSP有哪些动做?别离是什么?

  JSP共有以下6种根本动做

  jsp:include:在页面被恳求的时候引进一个文件。

  jsp:useBean:觅觅或者实例化一个JavaBean。

  jsp:setProperty:设置JavaBean的属性。

  jsp:getProperty:输出某个JavaBean的属性。

  jsp:forward:把恳求转到一个新的页面。

  jsp:plugin:根据阅读器类型为Java插件生成OBJECT或EMBED标识表记标帜

0
回帖

Java面试宝典之Java Web篇20题 期待您的回复!

取消