java面试题(二)

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

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

12、转发(forward)和重定向(redirect)的区别?

forward(转发):是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,因为这个跳转过程实在服务器实现的,并不是在客户端实现的所以客户端并不知道这个跳转动作,所以它的地址栏还是原来的地址.

redirect(重定向):是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

转发是服务器行为,重定向是客户端行为。

13、JSP有哪些内置对象?作用分别是什么?

SP共有以下9种基本内置组件

1、request对象 客户端请求,此请求会包含来自GET/POST请求的参数通过它才能了 解到客户的需求,然后做出响应。

2、response对象 响应客户请求的有关信息

3、session对象 它指的是客户端与服务器的一次会话,从客户端连到服务器的一个   WebApplication开始,直到客户端与服务       器断开连接为止。

4、out对象   它是JspWriter类的实例,是向客户端输出内容常用的对象

5、page对象   它是指向当前JSP页面本身,有点象类中的this指针,它是 Java.lang.Object类的实例

6、application对象 它实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭

7、exception对象 它是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。

8、pageContext对象 它提供了对JSP页面内所有的对象及名字空间的访问

9、config对象 它是在一个Servlet初始化时,JSP引擎向它传递信息用的

14、get和post请求的区别?

1.GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。

POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。

2、传输数据的大小

在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。

对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。

3、安全性

POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。

15、常用的Web容器

tomcat

类型:servlet容器和HTTP web服务器

功能:实现了一些J2EE特性包括Java Servlet、JSP页面、Java EL和websocket,还有纯java的http web server.

重要组件:

catalina是一个servlet容器

coyote是连接器

Jasper是tomcat JSP引擎,解析编译JSP称为servlet,运行时,可以检测JSP的改动并且重新编译它们。

Cluster用来管理大型应用,用来做LB

WAS(Wephere Application Server)

web应用程序服务器,是一个软件产品,扮演web应用程序服务器的角色,是一个软件框架和中间件,为基于Java的web应用程序服务。

was可以和众多web服务器配置使用,包括Apache HTTP服务器,Netscape企业服务器。微软IIS服务器,IBM HTTP Server。

JBoss web server集成了apache http server,servlet引擎,LB和tomcat本地库

Jetty web server

Java开发的web server

类型:web server 和 servlet容器

免费开源

用于Apache ActiveMQ/Alfresco/Apache Geronimo/Apache Maven/Apache Spark/Google App Engine/Eclipse/FuSE/IDempiere/Twitter‘s Streaming Api/Zimbra.

oracle weblogic Server

是一个java EE 的应用程序服务器,现在由oracle维护,是由Weblogic发展而来。

Apache http server

apache 软件基金会开发

c和xml开发

类型:web server

apache是使用最广泛的web服务器。

支持perl/python/tcl/php语言,ssl、tls,代理,URL重写,日志过滤等。

apache支持很多插件模块扩展,

支持虚拟主机,可以让一个apache部署多个web站点同时支持1W连接

反向代理(带缓存):LB(带活跃度检查)、多种负载均衡机制、容错能力(故障自动恢复)/websocket/FastCGI/SCGI/AJP和UWSGIt支持(带缓存)、动态配置

Nginx

web server,反向代理,邮件正向代理。

反向代理服务器支持TCP、UDP、HTTP、HTTPS、SMTP、POP3和IMAP协议,还有负载均衡和HTTP缓存功能。

nginx使用同步事件驱动方法来处理请求。

HTTP代理和web服务器特性

处理1W同步连接才用2.5MB内存,保持同步连接。

处理静态文件、索引文件和自动索引文件

带缓存的反向代理

带健康检查的负载均衡。

容错

TLS/SSL

websocket和HTTP1.1

FLV和MP4流

web页面访问认证

gzip压缩和解压缩

URL重写

请求处理闲置

嵌入Perl脚本

邮箱代理特性

TLS、SSL支持

STARTTLS支持

SMTP、POP3和IMAP代理

外部HTTP服务器认证

Haproxy

C语言开发,免费、开源,提供高可用负载均衡和TCP/HTTP代理。

性能:配备了双核心的Opteron或Xeon处理器的服务器通常达到每秒点击15000到40000之间,并且有麻烦饱和Linux下2 Gbit / sec的连接。

IHS(IBM Http Server)

是web服务器,基于APache服务器实现的,支持IBM的WAS应用程序服务器集成。用来做负载均衡。

16、JSP 和Servlet 有什么关系?

1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)

2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.

3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.

Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。

17、JSP中的四种作用域?

page:当前页面,也就是只要跳到别的页面就失效了

request:一次会话,简单的理解就是一次请求范围内有效

session:浏览器进程,只要当前页面没有被关闭(没有被程序强制清除),不管怎么跳转都是有效的

application:服务器,只要服务器没有重启(没有被程序强制清除),数据就有效

18、如何实现JSP或Servlet的单线程模式?

实现servlet的单线程的jsp命令是: <%@ page isThreadSafe=”false”%>

<%@ page isThreadSafe="true|false" %>

默认值为true

isThreadSafe=false模式表示它是以Singleton模式运行。

该模式implements了接口SingleThreadMode,

该模式同一时刻只有一个实例,不会出现信息同步与否的概念。

若多个用户同时访问一个这种模式的页面,

那么先访问者完全执行完该页面后,后访问者才开始执行。

19、实现会话跟踪的技术有哪些?

1).隐藏表单域:<input type="hidden">,非常适合步需要大量数据存储的会话应用。

2).URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。 见 http://blog.csdn.net/xh16319/article/details/8464055

3).Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP

响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个

Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至

在客户端计算机重启后它仍可以保留其值。 见:http://blog.csdn.net/xh16319/article/details/8464319

4).Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话

20、过滤器有哪些作用和用法?

过滤器顾名思义就是进行过滤的,可以实现代码的定向执行和预处理。

通俗点说法filter相当于加油站,request是条路,response是条路,目的地是servlet,这个加油站设在什么地方对什么数据操作可以由你来控制。

备注:过滤器可以再请求和响应之前做一部分预处理,有效的过滤掉不需要的内容,而且过滤器可以被复用,节省了大量的复用代码,提高了java的代码执行效率

Servlet 过滤器是小型的 Web 组件,它们拦截请求和响应,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。过滤器是通常封装了一些功能的 Web 组件,这些功能虽然很重要,但是对于处理客户机请求或发送响应来说不是决定性的。典型的例子包括记录关于请求和响应的数据、处理安全协议、管理会话属性, 等等。过滤器提供一种面向对象的模块化机制,用以将公共任务封装到可插入的组件中,这些组件通过一个配置文件来声明,并动态地处理。

声明式的:过滤器通过 Web 部署描述符(web.xml)中的 XML 标签来声明。这样允许添加和删除过滤器,而无需改动任何应用程序代码或 JSP 页面。

动态的:过滤器在运行时由 Servlet 容器调用来拦截和处理请求和响应。

灵活的:过滤器在 Web 处理环境中的应用很广泛,涵盖诸如日志记录和安全等许多最公共的辅助任务。过滤器还是灵活的,因为它们可用于对来自客户机的直接调用执行预处理和后期处 理,以及处理在防火墙之后的 Web 组件之间调度的请求。最后,可以将过滤器链接起来以提供必需的功能。

模块化的:通过把应用程序处理逻辑封装到单个类文件中,过滤器从而定义了可容易地从请求/响应链中添加或删除的模块化单元。

可移植的:与 Java 平台的其他许多方面一样,Servlet 过滤器是跨平台和跨容器可移植的,从而进一步支持了 Servler 过滤器的模块化和可重用本质。

可重用的:归功于过滤器实现类的模块化设计,以及声明式的过滤器配置方式,过滤器可以容易地跨越不同的项目和应用程序使用。

透明的:在请求/响应链中包括过滤器,这种设计是为了补充(而不是以任何方式替代)servlet 或 JSP 页面提供的核心处理。因而,过滤器可以根据需要添加或删除,而不会破坏 servlet 或 JSP 页面。

所以 Servlet 过滤器是通过一个配置文件来灵活声明的模块化可重用组件。过滤器动态地处理传入的请求和传出的响应,并且无需修改应用程序代码就可以透明地添加或删除它 们。最后,过滤器独立于任何平台或者 Servlet 容器,从而允许将它们容易地部署到任何相容的 J2EE 环境中。

时间: 2024-10-12 02:49:44

java面试题(二)的相关文章

Java面试题(二)

系统整理了一下有关Java的面试题,包括基础篇,javaweb篇,框架篇,数据库篇,多线程篇,并发篇,算法篇等等,陆续更新中.其他方面如前端后端等等的面试题也在整理中,都会有的. 注:文末有福利! 1.String s = new String("xyz");创建了几个StringObject?是否可以继承String类? 两个或一个都有可能,"xyz"对应一个对象,这个对象放在字符串常量缓冲区,常量"xyz"不管出现多少遍,都是缓冲区中的那一个

Java笔试题二:读程序

1 public class SopResult { 2 3 public static void main(String[] args) { 4 5 int i = 4; 6 System.out.println("The result is: " + ((i > 4) ? 9.99 : 9)); 7 } 8 9 } 读程序,输出结果:The result is: 9.0 分析可知,本程序相当于: 1 public class SopResult { 2 3 public st

经典Java面试题收集(二)

经典的Java面试题(第二部分),这部分主要是与Java Web和Web Service相关的面试题. 96.阐述Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet. 补充:Sun Microsystems公司在1996年发布Servlet技术就是为了和CGI (Comm

最常见的Java面试题及答案汇总(二)

上一篇:最常见的Java面试题及答案汇总(一) 容器 18. java 容器都有哪些? 常用容器的图录: 19. Collection 和 Collections 有什么区别? java.util.Collection 是一个集合接口(集合类的一个顶级接口).它提供了对集合对象进行基本操作的通用接口方法.Collection接口在Java 类库中有很多具体的实现.Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set. Collections

Java面试题下

这部分主要是开源Java EE框架方面的内容,包括hibernate.MyBatis.spring.Spring MVC等,由于Struts 2已经是明日黄花,在这里就不讨论Struts 2的面试题,如果需要了解相关内容,可以参考我的另一篇文章<Java面试题集(86-115)>.此外,这篇文章还对企业应用架构.大型网站架构和应用服务器优化等内容进行了简单的探讨,这些内容相信对面试会很有帮助. 126.什么是ORM?答:对象关系映射(Object-Relational Mapping,简称OR

java 基础(二)

java 基础(二)java 基础(二) 2016-2-1 by Damon 61. 编写多线程程序有几种实现方式 Java 5以前实现多线程有两种实现方法:一种是继承Thread类:另一种是实现Runnable接口.两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如果继承了Thread类就无法再继承其他类了,显然使用Runnable接口更为灵活. 补充:Java 5以后创建线程还有第三种方式:实现Callable接口,该接口中的

java面试题及答案

JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象.2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类).派

某支付公司笔试题二

题目:用java编写一段程序采用选择排序法对数组array = {25,15,42,16,12,36}进行由小到大排序. 1.选择排序法 该排序法的思想是每次从当前元素开始往后查找最小元素,将最小与当前元素进行位置互换.选择排序和冒泡排序相比优势在于交换次数减少. // 时间复杂度n(n-1)/2,即O(n^2) public static void selectSort(int[] array){ int k,tmp,len; len=array.length; for(int i=0;i<l

JAVA面试题最全集

JAVA面试题最全集 2009-01-19 15:40 3458人阅读 评论(0) 收藏 举报 java面试ejbservletstringhashmap 一.Java基础知识1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别.2.字符串的操作:  写一个方法,实现字符串的反转,如:输入abc,输出cba  写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出bbbhhtccc.3.数据类型之间的转换  如何将数值型字符转换为数字(Integer,Doubl

Java面试题及答案(基础题122道,代码题19道)

转载自:http://www.blogjava.net/fanyingjie/archive/2007/06/27/126467.aspx JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象.2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的