JavaWeb面试宝典


一、 简述 Java ee 标准的 web-app 的目录结构。 WEB-ROOT WEB-INF 1. classes 2. web.xml 3. lib 二、 简述 servlet 开发过程 从 httpservlet 继承, 重写 doget / doPost 方法。 在 web.xml 中配置 servlet 标签和 servlet-mapping 标签。 三、 简述 servlet 的声明周期 Web 容器加载 servelt。 实例化(每个 servlet 只有一个对象) 。 初始化(调用 init 方法,只一遍) 。 当用户请求过来时,调用 service 方法,然后决定是调用 doGet 或者 doPost 方法。 卸载前调用 destroy 方法。 四、 /开头的 URI 表示的含义 当URI由客户端进行解析,该/表示从当前服务器的根路径开始,比如http://127.0.0.1:8080/ 由客户端解析的包括:
、response.sendRedirect(URL) 方法中的参数。 当URI由服务端进行解析,该/表示从当前应用的根路径开始,比如http://127.0.0.1:8080/hr Web.xml 中路径 Request.getRequestDispatcher(URL)方法中的参数。 五、 乱码解决方案 乱码原因:web 容器默认的编码方式为 ISO-8859-1,该字符集不支持中文,所以中文会产生乱码。 如下为不同场合的解决方案: 场合:页面本身有中文的时候 解决方案:servlet 中:resp.setContentType("text/html;charset=UTF-8"); Jsp 中: <%@ page contentType="text/html;charset=UTF-8"%> 注意:一定要写在 PrintWriter out = resp.getWriter();之前 场合:解决 get 方式提交乱码问题: 解决方案:修改 server.xml URIEncoding="UTF-8" 注意:尽量避免使用 get 方式提交。 场合:解决 post 方式提交内容的乱码 解决方案:request.setCharacterEncoding("UTF-8"); 注意:一定要写在存取第一个参数之前, 不要调用 response.setCharacterEncoding("UTF-8"); 场合:,url 地址包含中文参数 解决方案:<%request.setCharacterEncoding("UTF-8");%> 六、 Cookie 和 session 的区别 Cookie session 存储在客户端 存储在服务器端 两种类型 两种实现方式 有声明周期 依赖于 cookie 无声明周期 url 重写 典型应用: 典型应用: 3 个月不用再登陆 用户登陆 购物车 (http://www.china-pub.com/) 购物车也可以用 session 实现 不可靠,而且有时 cookie 禁止不掉。 可靠 七、 静态包含<%@include>和动态包含的区别 <%@ include file="date.jsp" %>静态包含 动态包含 include 编译指令是在 JSP 程序的转换时期就将 file 属 性所指定的程序内容嵌入,然后再编译执行; 而 include 指令在转换时期是不会被编译的,只有在客户端请求时期 如果被执行到才会被动态的编译载入 只生成一个 class 文件 生成多个 class 文件 Include 指令不能带参数 动作可以 同一个 request 对象 不同的 request 对象,可以取得包含它的页面的参数,并添加了自己 的参数 常用 不常用 八、 请求转发和重定向的区别 Sendredirect(重定向) Forward(请求转发) 是不同的请求对象 虽然是不同的请求对象,但是,可以取到上一个页面的内 容 send 后的语句会继续执行,除非 return forward 后的语句不会继续发送给客户端 速度慢 速度快 需要到客户端的往返,可以转到任何页面 服务器内部的资源跳转 地址栏有变化 地址栏没有变化 可以传参数,直接写在 url 后面 可以传参数 /代表的是 http://127.0.0.1/ /代表的是 http://127.0.0.1/test <%response.sendRedirect("/test/ServletToJSP");%> this.getServletContext().getRequestDispatcher ("/servlet_jsp/ServletUseJsp.jsp").forward(req,resp) 常用 常用 九、 Web 应用的四种存储范围 Page:存储的属性在当前页面内可以使用 Request: 存储的属性在当前请求范围内可以使用 Session: 存储的属性在当前会话内可以使用 Application: 存储的属性在当前应用内可以使用 十、 应用服务器有那些? BEA WebLogic Server IBM WebSphere Application Server Oracle9i Application Server jBoss Tomcat 等 十一、 JSP 的 9 个内置对象及方法。 Request:表示 HttpServletRequest 对象,它包含了有关浏览器请求的信息,并且提供了几个 用于获取 cookie, header, 和 session 数据的有用的方法。 Response:表示 HttpServletResponse 对象,并提供了几个用于设置送回 浏览器的响应的方法 (如 cookies,头信息等)。 Out:对象是 javax.jsp.JspWriter 的一个实例,并提供了几个方法使你能用于向浏览器回送输 出结果。 pageContext:表示一个 javax.servlet.jsp.PageContext 对象。它是用于方便存取各种范围的 名字空间、servlet 相关的对象的 API,并且包装了通用的 servlet 相关功能的方法。 session:表示一个请求的 javax.servlet.http.HttpSession 对象。Session 可以存贮用户的状 态信息。 applicaton:表示一个 javax.servle.ServletContext 对象。这有助于查找有关 servlet 引擎 和 servlet 环境的信息。 config:表示一个 javax.servlet.ServletConfig 对象。该对象用于存取 servlet 实例的初始 化参数。 page:表示从该页面产生的一个 this 引用。 exception:表示当发生异常时的异常对象。 十二、 JSP 的常用指令 Page 指令:定义 JSP 页面的引擎信息,常用属性包括: i. Language: ii. contextType: iii. session: iv. buffer v. autoFlush: vi. isThreadSafe: vii. info: viii. errorPage: ix. isErrorPage: x. pageEncoding: xi. import: Include 指令: <%@include file="filename"%> Taglib 指令:<%@taglib prefix="c" uri=""%> 十三、 什么情况下调用 servlet 中的 doGet()和 doPost()方法 当以 get 方式发请求时调用 doGet 方法,以 post 方式发请求时调用 doPost 方法。 十四、 如何现实 servlet 的单线程模式 <%@ page isThreadSafe="false"%> 十五、 JSP 和 Servlet 有哪些相同点和不同点,他们之间的联系是什么? JSP 是 Servlet 技术的扩展,本质上是 Servlet 的简易方式,更强调应用的外表表达。JSP 编译 后是"类 servlet"。Servlet和 JSP 最主要的不同点在于,Servlet的应用逻辑是在 Java 文件中, 并且完全从表示层中的 HTML 里分离开来。而 JSP 的情况是 Java 和 HTML 可以组合成一个扩展名 为.jsp 的文件。JSP 侧重于视图,Servlet 主要用于控制逻辑。 十六、 描述四种会话跟踪技术。 Page:是代表与一个页面相关的对象,一个页面由一个编译好的 Java servlet 类表示。 request:是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页 面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系) session:是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可 以也经常会跨越多个客户机请求 application:是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用 程序,包括多个页面、请求和会话的一个全局作用域。 十七、 Request 对象的主要方法: setAttribute(String name,Object):设置名字为 name 的 request 的属性值 getAttribute(String name):返回由 name 指定的属性值。 getAttributeNames():返回 request 对象所有属性的名字集合,结果是一个枚举的实例。 getCookies():返回客户端的所有 Cookie 对象,结果是一个 Cookie 数组。 getCharacterEncoding():返回请求中的字符编码方式。 getContentLength():返回请求的 Body 的长度。 getHeader(String name):获得 HTTP 协议定义的文件头信息。 getHeaders(String name):返回指定名字的 request Header 的所有值,结果是一个枚举的实 例。 getHeaderNames():返回所以 request Header 的名字,结果是一个枚举的实例。 getInputStream():返回请求的输入流,用于获得请求中的数据。 getMethod():获得客户端向服务器端传送数据的方法。 getParameter(String name):获得客户端传送给服务器端的有 name 指定的参数值。 getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例。 getParameterValues(String name):获得有 name 指定的参数的所有值。 getProtocol():获取客户端向服务器端传送数据所依据的协议名称。 getQueryString():获得查询字符串。 getRequestURI():获取发出请求字符串的客户端地址。 getRemoteAddr():获取客户端的 IP 地址。 getRemoteHost():获取客户端的名字。 getSession([Boolean create]):返回和请求相关 Session。 getServerName():获取服务器的名字。 getServletPath():获取客户端所请求的脚本文件的路径。 getServerPort():获取服务器的端口号。 removeAttribute(String name):删除请求中的一个属性。 十八、 J2EE 是技术还是平台还是框架? J2EE 本身是一个标准,一个为企业分布式应用的开发提供的标准平台。 J2EE 也是一个框架,包括 JDBC、JNDI、RMI、JMS、EJB、JTA 等技术。 十九、 我们在 web 应用开发过程中经常遇到输出某种编码的字符,如 iso8859-1 等,如何输出一个某 种编码的字符串? Public String translate (String str) { String tempStr = ""; try { tempStr = new String(str.getBytes("ISO-8859-1"), "GBK"); tempStr = tempStr.trim(); } catch (Exception e) { System.err.println(e.getMessage()); } return tempStr; } 二十、 XML 文档定义有几种形式?它们之间有何本质区别?解析 XML 文档有哪几种方式? 两种形式 dtd 和 schema 本质区别:schema 本身是 xml 的,可以被XML 解析器解析(这也是从 DTD 上发展 schema 的根本目 的) 解析方式有 DOM,SAX,STAX 等。 i. 其中 DOM 解析:处理大型文件时其性能下降的非常厉害。这个问题是由DOM 的树结构所造成 的,这种结构占用的内存较多,而且 DOM 必须在解析文件之前把整个文档装入内存,适合对 XML 的随机访问 ii. SAX:不现于 DOM,SAX 是事件驱动型的 XML 解析方式。它顺序读取 XML 文件,不需要一次全 部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发 一个事件,用户通过在其回调事件中写入处理代码来处理 XML 文件,适合对 XML 的顺序访 问。 iii. STAX:Streaming API for XML (StAX) 二十一、 j2ee 常用的设计模式?说明工厂模式。 Java 中的 23 种设计模式: i. Factory(工厂模式),Builder(建造模式), Factory Method(工厂方法模式), Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式),Adapter (适配器模式), Bridge(桥梁模式), Composite(合成模式),Decorator(装 饰模式), Flyweight(享元模式), Proxy(代理模式),Command(命令模 式), Interpreter(解释器模式), Visitor(访问者模式),Iterator(迭代子模 式), Mediator(调停者模式), Memento(备忘录模式),Observer(观察者模式), State (状态模式), Strategy(策略模式),Template Method(模板方法模式), Chain Of Responsibleity(责任链模式) ii. 工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的 数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同 的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类 的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据 条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必 考虑到底返回的是哪一个子类的实例。 二十二、 请对以下在 J2EE 中常用的名词进行解释(或简单描述) web 容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使 JSP,SERVLET 直接更 容器中的环境变量接口交互,不必关注其它系统问题。主要有 WEB 服务器来实现。例如: TOMCAT,WEBLOGIC,WEBSPHERE 等。该容器提供的接口严格遵守J2EE 规范中的 WEB APPLICATION 标 准。我们把遵守以上标准的 WEB 服务器就叫做 J2EE 中的 WEB 容器。 EJB 容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件 EJB 各种管理功能。只要满足 J2EE 规范的 EJB 放入该容器,马上就会被容器进行高效率的管理。并 且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。 JNDI:(Java Naming & Directory Interface)JAVA 命名目录服务。主要提供的功能是:提供 一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分 布式应用程序的功能。 JMS:(Java Message Service)JAVA 消息服务。主要实现各个应用程序之间的通讯。包括点对 点和广播。 JTA:(Java Transaction API)JAVA 事务服务。提供各种分布式事务服务。应用程序只需调用 其提供的接口即可。 JAF:(Java Action FrameWork)JAVA 安全认证框架。提供一些安全控制方面的框架。让开发 者通过各种部署和自定义实现自己的个性安全控制策略。 RMI/IIOP:(Remote Method Invocation /internet 对象请求中介协议)他们主要用于通过远程 调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地 计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI 是 JAVA 特有的。 二十三、 MVC 的各个部分都有哪些技术来实现?如何实现? MVC 是 Model-View-Controller 的简写。"Model" 代表的是应用的业务逻辑(通过 JavaBean, EJB 组件实现), "View" 是应用的表示面(由 JSP 页面产生),"Controller" 是提供应用的 处理过程控制(一般是一个 Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分 成不同的组件实现。这些组件可以进行交互和重用。 二十四、 J2EE 是什么? J2EE 是 Sun 公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base) 的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能 划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次 包括客户层(clietn tier)组件,web 层和组件,Business 层和组件,企业信息系统(EIS)层。 二十五、 jsp 有哪些动作?作用分别是什么? JSP 共有以下 6 种基本动作 ,分别是: i. jsp:include:在页面被请求的时候引入一个文件。 ii. jsp:useBean:寻找或者实例化一个 JavaBean。 iii. sp:setProperty:设置 JavaBean 的属性。 iv. jsp:getProperty:输出某个 JavaBean 的属性。 v. jsp:forward:把请求转到一个新的页面。 vi. jsp:plugin:根据浏览器类型为 Java 插件生成 OBJECT 或 EMBED 标记。 二十六、 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 区别: i. 硬件环境不同: C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过 专门服务器提供连接和数据交换服务.B/S 建立在广域网之上的, 不必是专门的网络硬件 环境,例与电话上网, 租用设备. 信息自己管理. 有比 C/S 更强的适应范围, 一般只要有 操作系统和浏览器就行 ii. 对安全要求不同 :C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高 度机密的信息系统采用 C/S 结构适宜. 可以通过 B/S 发布部分可公开信息.B/S 建立在广 域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。 iii. 对程序架构不同:C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度 可以较少考虑.B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000 等, 全面支持网络的构件搭建的系统. SUN 和 IBM 推的 JavaBean 构件技术 等,使 B/S 更加成熟. iv. 软件重用不同 :C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在 B/S 要求下的 构件的重用性好.B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就 入买来的餐桌可以再利用,而不是做在墙上的石头桌子 v. 系统维护不同 :C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升 级难. 可能是再做一个全新的系统,而 B/S 构件组成,方面构件个别的更换,实现系统的无 缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级. vi. 处理问题不同 :C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操 作系统相关. 应该都是相同的系统,B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是 C/S 无法作到的. 与操作系统平台关系最小. vii. 用户接口不同 :C/S 多是建立的 Window 平台上,表现方法有限,对程序员普遍要求较高, B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低, 减低开发成本. viii. 信息流不同 :C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低, B/S 信 息流向可变化, B-B B-C B-G 等信息、流向的变化, 更像交易中心。 ix. 二十七、 说出数据连接池的工作机制是什么? J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序 需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接, 池驱动程序就新建一定数量的连接,新建连接的数量由配置参数决定。当使用的池连接调用完 成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。 二十八、 描述标签的使用? 标签创建或反序列化一个 bean 并将之与脚本变量相关。语法如下: i. ii. 或 这里name、scope 定义如下: 1、id 属性:在 id 属性中指定名字用作制定范围内 bean 对象数姓名的标识符,在 jsp 页面内声明为一个 java 脚本变量。因为该值是一个脚本变量,大小写敏感,必须符合对标识符的 java 命名规则。该值用在行为的 name 属性中指出行为应用中可 能的 bean。 2、scope 属性:scope 指定 bean 存在的名空间。它与 PageContext 对象获得 的范围相同。 二十九、 描述 request 与 response 对象? request 表示 HttpServletRequest 对象。它包含了有关浏览器请求的信息,并且提供了几个 用于获取 cookie, header, 和 session 数据的有用的方法。 response 表示 HttpServletResponse 对象,并提供了几个用于设置送回浏览器的响应的方法 (如 cookies,头信息等)。 三十、 谈谈连接数据库的几种方法? 连接数据库的方法: i. 通过 odbc 连接。 ii. 通过 jdbc 连接。jdbc 的连接分为直接连结和池连接。 三十一、 谈谈 JSP Model I 与 JSP Model II 的区别? model1 中 JSP 页面负责跳转 而 model2 中“客户端从不直接向 jsp 页面发送请求”,model2 通常被成为 Model-View-Controller(MVC)!!!!而不是 mvc 分成 model1 和 model2。 三十二、 请问 il8n,L10n 各是什么意思? 答:i18n 是"国际化"的简称,l10n 是"本地化"的简称。事实上,它们应用范围上有着非常大的 不同:前者着重于在系统库上提供一种多国语言的支持机制;后者则着重于应用程序支持各国 家地区语言习惯上的具体实现。 三十三、 简述自定义标签的步骤? 1.开发标签实现类。 2.编写标签描述,这个描述通常是以.tld 结尾的文件。 3.在 jsp 中使用 taglib 指令载入标签库文件。 三十四、 什么是 JSTL,并解释 JSTL 中如下标签的含义: JSTL 是一个不断完善的开放源代码的 JSP 标签库。 在一个包括一系列对象Collection中迭代计算它的BodyContent,或者重复迭代 固定的次数。 三十五、 Tomcat 与 WebLogic sever 的异同点是什么? 相同点:它们对 jsp 的解释没有多少差别。 不同点:tomcat 只能处理小应用,不支持 EJB。自己用完全可以,大应用及大访问量支持吃力。 Weblogic 支持 EJB 及各种中间件服务,可以支持企业级的应用。 三十六、 请问可滚动结果集与不可滚动结果集的区别是什么(或双向滚动结果集与单向结果集的区别)? 能够使光标在结果集中移动编辑结果集,并且能把编辑的结果返回数据库,这样的结果集是可 移动结果集。不可编辑的结果集,是不可滚动的结果集。 Jsp 方面 三十七、 写出 JDBC 进行数据库操作的 7 个步骤。 1.加载 JDBC 驱动程序 2.定义 URL 3.建立连接 4.建立 statement 对象 5.执行操作 6.处理结果集 7.关闭连接 三十八、 Oracle 中 thin 方式与 oci 方式连接数据库的区别。 Thin称为瘦客户端连接方式。thin只要求classpath中包含jdbc驱动的jar包就可以,不用安装 客户端。Oci称为胖客户端连接方式。oci需要安装oracle的客户端,以部署实现oci的Native Code. thin 类型使用网络协议构建数据库引擎,驱动程序利用 java 套接字来直接与数据库通讯,是最 直接最纯粹的 java 方法。Oci 类型的驱动程序是标准的 API 驱动程序,各个数据库厂家提供了 数据库访问的标准的 C 和 C++方法,驱动程序中包含了它们的 java 代码,所以不是一个纯 java 的方法。 从效率上看,由于 oci 需要安装和配置数据库,所以执行速度高于 thin。 从稳定性上看,thin要好于oci,毕竟java的垃圾自动收集要强于Native Code。 从可移植性上看,由于oci的实现并非纯java, 因此移植或者用于Applet都要受到限制。 三十九、 get 与 post 的区别。 get 请求由 doget()方法处理,post 请求由 dopost()方法处理。 get 请求处理对服务器状态无影响,post 请求处理改变服务器的状态。 get 请求适合小批量数据,post 请求适合大批量数据。 get 允许请求被标记,显示在 URL 地址里,post 请求数据在 URL 地址栏里不可见。 get 请求由于在地址栏里有 request 的内容,所以安全性不好,post 请求数据在 URL 地址栏里 不可见,所以安全性比较好。 四十、 Cookie 与 session 的区别。 cookie 是一小段文本文件,数据存放在客户端,session 数据放在服务器上,放在内存中。 cookie 会限制文件的大小,单个 cookie 在客户端的限制是 3K,session 则没有限制。 cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗,考虑到安全应当 使用 session。 cookie 使用时需要设置最大时效,超出时效将不再可用,session 数据存放在服务器上,只要 网页不关闭,服务器不重启 session 将一直有效。 cookie 通过保存在客户端的相应的文本文件来确定是否为自己所需的内容,session 依赖于 cookie 存在通过 JsessionId 判断是否为同一机器。 cookie 适合保存用户个人设置,爱好等等需要保留的内容,session 适合做客户的身份验证等 等安全性高的内容。 四十一、 Jsp 与 servlet 的区别。 jsp 可以基于编程方式书写 html 页面,以 html 为主,servlet 在 java 代码中嵌入 html 语句, 以 java 代码为主。 jsp 是在 html 中嵌入 java 代码,servlet 是在 java 代码中嵌入 html。 jsp 用在表示层,servlet 用在逻辑层。 jsp 是从.jsp.java.class执行,servlet 是直接执行的。 四十二、 什么是 javaBean 组件。 定义有存取方法的属性。 无参数构造方法。 private 属性。 四十三、 写一段 Jdbc 连 Oracle 的程序,并实现数据查询. 请参考课件案例。
还剩11页未读

继续阅读

pdf贡献者

461726521

贡献于2014-09-12

下载需要 3 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf