J2EE面试题(一)

1.  浏览器jsp,html之间的关系

》JSP与Java Servlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览

》在大多数Browser/Server结构的Web应用中,浏览器直接通过HTML或者JSP的形式与用户交互,响应用户的请求
》JSP在服务器上执行,并将执行结果输出到客户端浏览器,我们可以说基本上与浏览器无关


2. 自定义标签要继承哪个类

这个类可以继承TagSupport或者BodyTagSupport,两者的差别是前者适用于没有主体的标签,而后者适用于有主体的标签。如果选择继承TagSupport,可以实现doStartTag和doEndTag两个方法实现Tag的功能,如果选择继承BodyTagSupport,可以实现doAfterBody这个方法。


3. 过滤器Filter的作用及配置

过滤器是一个对象,可以传输请求或修改响应。它可以在请求到达Servlet/JSP之前对其进行预处理,而且能够在响应离开Servlet/JSP之后对其进行后处理。所以如果你有几个Servlet/JSP需要执行同样的数据转换或页面处理的话,你就可以写一个过滤器类,然后在部署描述文件(web.xml)中把该过滤器与对应的Servlet/JSP联系起来。你可以一个过滤器以作用于一个或一组servlet,零个或多个过滤器能过滤一个或多个servlet。一个过滤器实现java.servlet.Filter接口并定义它的三个方法:
》void init(FilterConfig config) throws ServletException:在过滤器执行service前被调用,以设置过滤器的配置对象。

》void destroy();在过滤器执行service后被调用。

》void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,ServletException;


4. forward,与redirect 的区别?有哪些方式实现
forward是把另一个页面加载到本页面,不改变浏览器的路径,redirect是跳转到另一个页面,会改变浏览器的路径
重定向:   response.sendRedirect(“重定向的路径”)
转发:     request.getRequestDispatcher(“转发路径”).forward(request, response);


5. 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文件执行时发生的错误和异常


6. 如果用JSP开发一个聊天程序,不用数据库存储聊天纪录,请问聊天记录最好存储在()中。

Application


7. doPost,doGet的区别?

在使用表单提交数据到服务器的时候有两张方式可共选择,一个是post,一个是get。可在

中的method属性中指定提交的方式。如:,如果不指定method属性,则会默认该属性为”get”方式。

我们直接去访问一个资源,也是get请求(比如直接访问Servlet)。

点击超级链接等等,也是get请求。


那么,Get和post都能够提交数据,那么他们有什么不同呢?
不同点一:
通过get方式提交的数据有大小的限制,通常在2048字节左右。也就是说如果提交的数据很大,用get方法就可需要小心;而post方式没有数据大小的限制,理论上传送多少数据都可以。不过大小限制也不一定是2K,也可能是8K,这个不同的浏览器不一样。


不同点二:
通过get传递数据,实际上是将传递的数据按照”key,value”的方式跟在URL的后面来达到传送的目的的;而post传递数据是通过http请求的附件进行的,在URL中并没有明文显示。


8. jsp乱码如何解决,几种解决方案。

分下面几种情况来解决:
一、JSP页面显示乱码如何解决
二、表单提交中文时出现乱码如何解决
三、数据库连接时出现乱码如何解决


9. 页面间对象传递的方法
request,session,application,cookie 等


10. 我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
text = new String( text.getBytes(“iso8859-1″),”GBK”);
首先以”iso8859-1″解码为byte数组,再用”GBK”重构字符串


11. 简单介绍一下servlet
servlet容器:
负责处理客户请求、把请求传送给servlet并把结果返回给客户。不同程序的容器实际实现可能有所变化,但容器与servlet之间的接口是由servletAPI定义好的,这个接口定义了servlet容器在servlet上要调用的方法及传递给servlet的对象类。

servlet的生命周期:
servlet容器创建servlet的一个实例
容器调用该实例的init()方法
如果容器对该servlet有请求,则调用此实例的service()方法
容器在销毁本实例前调用它的destroy()方法
销毁并标记该实例以供作为垃圾收集
一旦请求了一个servlet,就没有办法阻止容器执行一个完整的生命周期。

容器在servlet首次被调用时创建它的一个实例,并保持该实例在内存中,让它对所有的请求进行处理。容器可以决定在任何时候把这个实例从内存中移走。在典型的模型中,容器为每个servlet创建一个单独的实例,容器并不会每接到一个请求就创建一个新线程,而是使用一个线程池来动态的将线程分配给到来的请求,但是这从servlet的观点来看,效果和为每个请求创建一个新线程的效果相同。


12. BS与CS的联系与区别
C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。
B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互。

C/S 与 B/S 区别: 

1.硬件环境不同: 

C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.
  B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行 

2.对安全要求不同 
  C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息.
  B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。
3.对程序架构不同 
  C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑.
  B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟. 
4.软件重用不同 
  C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好.
  B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子 
5.系统维护不同  
  C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统
  B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级. 
6.处理问题不同 
  C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统
  B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小. 
7.用户接口不同 
  C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高
  B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本. 
8.信息流不同 
  C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低
  B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化, 更像交易中心。


13. JSP与SERVLET的区别
JSP先编译成SERVLET然后再编译成CLASS文件  
JSP—–SERVLET—–JAVA文件—CLASS
JSP主要做视图层,SERVLET主要做控制层


14. JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面。


15. 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 的子类


16. 四种会话跟踪技术
会话跟踪是为了跟踪用户于service之间的多次交互. 
》cookie 也就是我们常见的在C盘/文件夹下有一个COOKIE目录 
》session 比Cookie安全.不可见.但占用srevice资源 
》url重写.这是在用户的IE禁止Cookie的时候采用的方法。因为不管是Cookie还是 session 都要借助

》隐藏域


17. <%…%>和<%!…%>的区别
<% … %> 用于在JSP页面中嵌入Java脚本
<%! … %> 用于在JSP页面中申明变量或方法,可以在该页面中的<% … %>脚本中调用,声明的变量相当于Servlet中的定义的成员变量。


18. 简单说明下你对servlet的认识及其Servlet的基本架构、生命周期
HttpServlet类是一个抽象类,可以从该类派生出一个子类来实现一HttpServlet,接受来自Web站点的请求(该请求来自访问该Web站点的客户浏览器),并将处理后的响应结果发回Web站点(Web站点再将响应结果发送给客户浏览器),在HttpServlet的子类中,必须至少重载下表中的其中一种方法。


方法名doGet
        如果Servlet支持Http GET请求,用于Http GET请求 。
方法名doPost
       如果Servlet支持Http POST请求,用于Http POST请求 

方法名doPut

如果Servlet支持Http PUT请求,用于Http PUT请求 
方法名doDelete
         如果Servlet支持Http DELETE请求,用于Http DELETE请求 
init和destroy
          如果需要管理Servlet生命周期内所持有资源,可以重载这两个方法

通常,不重载service方法,对于上表中的每一种HTTP请求,service方法通过分派它们到相应的Handler线程(doXXX方法)来处理这些标准的HTTP请求。

同样地,通常也不重载doOptions和doTrace方法,service方法通过分派它们到doTrace和doOptions来支持HTTP1.1 TRACE和OPTIONS。

Servlet通常运行在多线程的服务器中,因此,所编写的Servlet代码必须能够处理并行请求和对数据资源的同步访问。共享资源包括内存中的数据(例如:实例或类变量)和外部对象(例如:文件、数据库连接或网络连接)。

Protected void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException

从Service方法授并处理HTTP GET请求。GET方法允许客户读取来自Web服务器的信息,客户通过传递一个带URL的查询字符串可以告诉服务器它需什么信息。

重载支持GET请求的doGet方法还将自动支持HTTP HEAD请求,HEAD请求也是一个GET请求,它得到的返回响应中只有一个请求头(header)字段,而没有响应信息的内容。

如果重载方法,应该从该请求读数据,在响应中设置整个headers,访问PrintWriter或输出流对象,最后写响应数据。当设置headers时,应确保包含content type和encoding。如果使用PrintWriter对象返回响应,在存取PrintWriter对象之前必须设置content type。

Servlet引擎必须在写响应数据之前写headers,因为在写数据之后headers随时都可能被刷新。


19. 简单描述下数据连接池的工作机制是什么?
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被 使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超 过最大连接数量时,这些请求将被加入到等待队列中。

数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素: 
1) 最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;

2) 最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。

3) 如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。


20. JSP乱码如何解决,给出三种以上的对应解决方案,并给出对应的程序案例;
》JSP页面显示乱码
<%@ page contentType=”text/html; charset=gb2312″%>
》表单提交中文时出现乱码
request.seCharacterEncoding(“gb2312″)对请求进行统一编码
》数据库连接出现乱码
要涉及中文的地方全部是乱码,解决办法:在数据库的数据库URL中加上useUnicode=true&characterEncoding=GBK就OK了。
》通过过滤器完成
》在server.xml中的设置编码格式

你可能感兴趣的:(J2EE面试)