JSP常见面试题.docx
《JSP常见面试题.docx》由会员分享,可在线阅读,更多相关《JSP常见面试题.docx(15页珍藏版)》请在冰豆网上搜索。
JSP常见面试题
11、什么情况下调用doGet()和doPost()?
Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。
12、servlet的生命周期
web容器加载servlet,生命周期开始。
通过调用servlet的init()方法进行servlet的初始化。
通过调用service()方法实现,根据请求的不同调用不同的do***()方法。
结束服务,web容器调用servlet的destroy()方法。
13、如何现实servlet的单线程模式
14、页面间对象传递的方法request,session,application,cookie等
15、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。
JSP编译后是"类servlet"。
Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。
而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑。
16、四种会话跟踪技术
会话作用域ServletsJSP页面描述
page否是代表与一个页面相关的对象和属性。
一个页面由一个编译好的Javaservlet类(可以带有任何的include指令,但是没有include动作)表示。
这既包括servlet又包括被编译成servlet的JSP页面
request是是代表与Web客户机发出的一个请求相关的对象和属性。
一个请求可能跨越多个页面,涉及多个Web组件(由于forward指令和include动作的关系)
session是是代表与用于某个Web客户机的一个用户体验相关的对象和属性。
一个Web会话可以也经常会跨越多个客户机请求
application是是代表与整个Web应用程序相关的对象和属性。
这实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
浏览器jsp,html之间的关系
1.JSP与JavaServlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览
2.在大多数Browser/Server结构的Web应用中,浏览器直接通过HTML或者JSP的形式与用户交互,响应用户的请求
3.JSP在服务器上执行,并将执行结果输出到客户端浏览器,我们可以说基本上与浏览器无关
自定义标签要继承哪个类
这个类可以继承TagSupport或者BodyTagSupport,两者的差别是前者适用于没有主体的标签,而后者适用于有主体的标签。
如果选择继承TagSupport,可以实现doStartTag和doEndTag两个方法实现Tag的功能,如果选择继承BodyTagSupport,可以实现doAfterBody这个方法。
过滤器Filter的作用及配置
过滤器的作用:
过滤器是一个对象,可以传输请求或修改响应。
它可以在请求到达Servlet/JSP之前对其进行预处理,而且能够在响应离开Servlet/JSP之后对其进行后处理。
所以如果你有几个Servlet/JSP需要执行同样的数据转换或页面处理的话,你就可以写一个过滤器类,然后在部署描述文件(web.xml)中把该过滤器与对应的Servlet/JSP联系起来。
你可以一个过滤器以作用于一个或一组servlet,零个或多个过滤器能过滤一个或多个servlet。
一个过滤器实现java.servlet.Filter接口并定义它的三个方法:
1.voidinit(FilterConfigconfig)throwsServletException:
在过滤器执行service前被调用,以设置过滤器的配置对象。
2voiddestroy();在过滤器执行service后被调用。
3VoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException;
forward,与redirect的区别?
有哪些方式实现
forward是把另一个页面加载到本页面,不改变浏览器的路径,redirect是跳转到另一个页面,会改变浏览器的路径
重定向:
response.sendRedirect(“重定向的路径”)
转发:
request.getRequestDispatcher(“转发路径”).forward(request,response);
jsp内置对象和作用?
有九个内置对象:
request、response、out、session、application、pageContext、config、page、exception
作用如下:
(1)HttpServletRequest类的Request对象
作用:
代表请求对象,主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。
(2)HttpServletResponse类的Respone对象
作用:
代表响应对象,主要用于向客户端发送数据
(3)JspWriter类的out对象
作用:
主要用于向客户端输出数据;
Out的基类是JspWriter
(4)HttpSession类的session对象
作用:
主要用于来分别保存每个用户信息,与请求关联的会话;
会话状态维持是Web应用开发者必须面对的问题。
(5)ServletContex类的application对象
作用:
主要用于保存用户信息,代码片段的运行环境;
它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享.
(6)PageContext类的PageContext对象
作用:
管理网页属性,为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中已命名对象的访问,它的创建和初始化都是由容器来完成的。
(7)ServletConfig类的Config对象
作用:
代码片段配置对象,表示Servlet的配置。
(8)Object类的Page(相当于this)对象
作用:
处理JSP网页,是Object类的一个实例,指的是JSP实现类的实例,即它也是JSP本身,只有在JSP页面范围之内才是合法的。
(9)Exception
作用:
处理JSP文件执行时发生的错误和异常
如果用JSP开发一个聊天程序,不用数据库存储聊天纪录,请问聊天记录最好存储在()中。
Application
doPost,doGet的区别?
1。
当你直接访问一个servlet时,调用的是doGet方法。
2。
如果你的html里面规定了method访问哪个方法,则调用该方法。
3。
get和post提交的数据量是不一样的.get好像最多只能在url后跟8K,post没这个限制
jsp乱码如何解决,几种解决方案。
?
一、JSP页面显示乱码
二、表单提交中文时出现乱码
三、数据库连接时出现乱码
页面间对象传递的方法
request,session,application,cookie等
request.setAttribute(key,value)
session.setAttribute(key,value)
application.setAttribute(key,value)
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
text=newString(text.getBytes(“iso8859-1″),”GBK”);
首先以”iso8859-1″解码为byte数组,再用”GBK”重构字符串
简单介绍一下servlet
servlet容器:
负责处理客户请求、把请求传送给servlet并把结果返回给客户。
不同程序的容器实际实现可能有所变化,但容器与servlet之间的接口是由servletAPI定义好的,这个接口定义了servlet容器在servlet上要调用的方法及传递给servlet的对象类。
servlet的生命周期:
servlet容器创建servlet的一个实例
容器调用该实例的init()方法
如果容器对该servlet有请求,则调用此实例的service()方法
容器在销毁本实例前调用它的destroy()方法
销毁并标记该实例以供作为垃圾收集
一旦请求了一个servlet,就没有办法阻止容器执行一个完整的生命周期。
容器在servlet首次被调用时创建它的一个实例,并保持该实例在内存中,让它对所有的请求进行处理。
容器可以决定在任何时候把这个实例从内存中移走。
在典型的模型中,容器为每个servlet创建一个单独的实例,容器并不会每接到一个请求就创建一个新线程,而是使用一个线程池来动态的将线程分配给到来的请求,但是这从servlet的观点来看,效果和为每个请求创建一个新线程的效果相同。
BS与CS的联系与区别。
B/S模式是指在TCP/IP的支持下,以HTTP为传输协议,客户端通过Browser访问Web服务器以及与之相连的后台数据库的技术及体系结构。
它由浏览器、Web服务器、应用服务器和数据库服务器组成。
客户端的浏览器通过URL访问Web服务器,Web服务器请求数据库服务器,并将获得的结果以HTML形式返回客户端浏览器。
c/s在系统机构上和B/S相似,不过需要在客户端安装一个客户端软件,由这个软件对服务器的数据进行读写,就像我们常用的qq,就是这种模式。
JSP与SERVLET的区别。
JSP先编译成SERVLET然后再编译成CLASS文件
JSP—–SERVLET—–JAVA文件—CLASS
jsp主要做视图层,servlet主要做控制层
JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE用jsp:
include动作实现它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面
JSP的内置对象及方法。
9大内置对象:
request,response,pagecontext,session,application,out,config,page,exception
request–HttpServletRequest的子类
response–HttpServletResponse的子类
session–HttpSession的子类
pagecontext–PageContext的子类
application–ServletContext的子类
out–JspWriter的子类
config–ServletConfig的子类
page–Object的子类
exception–Throwab的子类
四种会话跟踪技术
会话跟踪是为了跟踪用户于service之间的多次交互.
1.cookie也就是我们常见的在C盘/文件夹下有一个COOKIE目录
2.session比Cookie安全.不可见.但占用srevice资源
3.url重写.这是在用户的IE禁止Cookie的时候采用的方法。
因为不管是Cookie还是session都要借助4.隐藏域
<%…%>和<%!
…%>的区别
<%…%>用于在JSP页面中嵌入Java脚本
<%!
…%>用于在JSP页面中申明变量或方法,可以在该页面中的<%…%>脚本中调用,声明的变量相当于Servlet中的定义的成员变量。
你认为哪种分页效率最高?
JSP,MYSQL,SQL2005.
SQL2005效率高:
因为mysql的分页还是先查出所有的记录,再从起始位置开始查出所需要的记录,而SQL2005不会查所有记录,只查筛选后所需要的记录
简单说明下你对servlet的认识及其Servlet的基本架构、生命周期
HttpServlet类是一个抽象类,可以从该类派生出一个子类来实现一个HttpServlet,接受来自Web站点的请求(该请求来自访问该Web站点的客户浏览器),并将处理后的响应结果发回Web站点(Web站点再将响应结果发送给客户浏览器),在HttpServlet的子类中,必须至少重载下表中的其中一种方法。
方法名doGet
如果Servlet支持HttpGET请求,用于HttpGET请求
doPost
如果Servlet支持HttpPOST请求,用于HttpPOST请求
doPut
如果Servlet支持HttpPUT请求,用于HttpPUT请求
doDelete
如果Servlet支持HttpDELETE请求,用于HttpDELETE请求
init和destroy
如果需要管理Servlet生命周期内所持有资源,可以重载这两个方法
通常,不重载service方法,对于上表中的每一种HTTP请求,service方法通过分派它们到相应的Handler线程(doXXX方法)来处理这些标准的HTTP请求。
同样地,通常也不重载doOptions和doTrace方法,service方法通过分派它们到doTrace和doOptions来支持HTTP1.1TRACE和OPTIONS。
Servlet通常运行在多线程的服务器中,因此,所编写的Servlet代码必须能够处理并行请求和对数据资源的同步访问。
共享资源包括内存中的数据(例如:
实例或类变量)和外部对象(例如:
文件、数据库连接或网络连接)。
ProtectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,IOException
从service方法授并处理HTTPGET请求。
GET方法允许客户读取来自Web服务器的信息,客户通过传递一个带URL的查询字符串可以告诉服务器它需什么信息。
重载支持GET请求的doGet方法还将自动支持HTTPHEAD请求,HEAD请求也是一个GET请求,它得到的返回响应中只有一个请求头(header)字段,而没有响应信息的内容。
如果重载方法,应该从该请求读数据,在响应中设置整个headers,访问PrintWriter或输出流对象,最后写响应数据。
当设置headers时,应确保包含contenttype和encoding。
如果使用PrintWriter对象返回响应,在存取PrintWriter对象之前必须设置contenttype。
Servlet引擎必须在写响应数据之前写headers,因为在写数据之后headers随时都可能被刷新。
简单描述下数据连接池的工作机制是什么?
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。
无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。
连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。
数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:
1)最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;
2)最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。
3)如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。
不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。
jsp乱码如何解决,给出三种以上的对应解决方案,并给出对应的程序案例;
一、JSP页面显示乱码
<%@pagecontentType=”text/html;charset=gb2312″%>
二、表单提交中文时出现乱码
request.seCharacterEncoding(“gb2312″)对请求进行统一编码
三、数据库连接出现乱码
要涉及中文的地方全部是乱码,解决办法:
在数据库的数据库URL中加上useUnicode=true&characterEncoding=GBK就OK了。
四、通过过滤器完成
五、在server.xml中的设置编码格式