吊打面试官之|吊打面试官之 Java基础必备(背)120问 之 [91-105]

91.什么是Servlet? Servlet是用来处理客户端请求并产生动态网页内容的Java类。Servlet主要是用来处理或者是存储HTML表单提交的数据,产生动态内容,在无状态的HTTP协议下管理状态信息。
92.说一下Servlet的体系结构。 所有的Servlet都必须要实现的核心的接口是javax.servlet.Servlet。每一个Servlet都必须要直接或者是间接实现这个接口,或者是继承javax.servlet.GenericServlet或者javax.servlet.http.HTTPServlet。最后,Servlet使用多线程可以并行的为多个请求服务。
93.Applet和Servlet有什么区别? Applet是运行在客户端主机的浏览器上的客户端Java程序。而Servlet是运行在web服务器上的服务端的组件。applet可以使用用户界面类,而Servlet没有用户界面,相反,Servlet是等待客户端的HTTP请求,然后为请求产生响应。
94.GenericServlet和HttpServlet有什么区别? GenericServlet类实现了Servlet和ServletConfig接口。实现了除了service()之外的其他方法,在创建Servlet对象时,可以继承GenericServlet类来简化程序的代码,但需要实现service()方法。
HttpServlet类继承了GeneriServlet类,为实际开发中大多数用Servlet处理 HTTP请求的应用灵活的方法。
95.解释下Servlet的生命周期。 对每一个客户端的请求,Servlet引擎载入Servlet,调用它的init()方法,完成Servlet的初始化。然后,Servlet对象通过为每一个请求单独调用service()方法来处理所有随后来自客户端的请求,最后,调用Servlet(译者注:这里应该是Servlet而不是server)的destroy()方法把Servlet删除掉。
96.doGet()方法和doPost()方法有什么区别? doGet:GET方法会把名值对追加在请求的URL后面。因为URL对字符数目有限制,进而限制了用在客户端请求的参数值的数目。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。
doPOST:POST方法通过把请求参数值放在请求体中来克服GET方法的限制,因此,可以发送的参数的数目是没有限制的。最后,通过POST请求传递的敏感信息对外部客户端是不可见的。
doGet:路径传参。效率高,安全性差
doPOST:实体传参。效率低,安全性好
97.什么是Web应用程序? Web应用程序是对Web或者是应用服务器的动态扩展。有两种类型的Web应用:面向表现的和面向服务的。面向表现的Web应用程序会产生包含了很多种标记语言和动态内容的交互的web页面作为对请求的响应。而面向服务的Web应用实现了Web服务的端点(endpoint)。一般来说,一个Web应用可以看成是一组安装在服务器URL名称空间的特定子集下面的Servlet的集合。
web应用程序就是一种可以通过web进行访问的应用程序,简单的说就是可以直接通过浏览器进行访问的应用程序。基于典型的B/S模式的应用程序,核心是对数据库的相关操作和处理
98.什么是服务端包含(Server Side Include)? 服务端包含(SSI)是一种简单的解释型服务端脚本语言,大多数时候仅用在Web上,用servlet标签嵌入进来。SSI最常用的场景把一个或多个文件包含到Web服务器的一个Web页面中。当浏览器访问Web页面的时候,Web服务器会用对应的servlet产生的文本来替换Web页面中的servlet标签。
99.什么是Servlet链(Servlet Chaining)? Servlet链是把一个Servlet的输出发送给另一个Servlet的方法。第二个Servlet的输出可以发送给第三个Servlet,依次类推。链条上最后一个Servlet负责把响应发送给客户端。
100.如何知道是哪一个客户端的机器正在请求你的Servlet? ServletRequest类可以找出客户端机器的IP地址或者是主机名。getRemoteAddr()方法获取客户端主机的IP地址,getRemoteHost()可以获取主机名。
101.HTTP响应的结构是怎么样的? HTTP响应由三个部分组成:
状态码(Status Code):描述了响应的状态。可以用来检查是否成功的完成了请求。请求失败的情况下,状态码可用来找出失败的原因。如果Servlet没有返回状态码,默认会返回成功的状态码HttpServletResponse.SC_OK。
HTTP头部(HTTP Header):它们包含了更多关于响应的信息。比如:头部可以指定认为响应过期的过期日期,或者是指定用来给用户安全的传输实体内容的编码格式。如何在Serlet中检索HTTP的头部看这里。
主体(Body):它包含了响应的内容。它可以包含HTML代码,图片,等等。主体是由传输在HTTP消息中紧跟在头部后面的数据字节组成的。
102.什么是cookie?session和cookie有什么区别? cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个Web服务器存储cookie。以后浏览器在给特定的Web服务器发请求的时候,同时会发送所有为该服务器存储的cookie。下面列出了session和cookie的区别:
无论客户端浏览器做怎么样的设置,session都应该能正常工作。客户端可以选择禁用cookie,但是,session仍然是能够工作的,因为客户端无法禁用服务端的session。
在存储的数据量方面session和cookies也是不一样的。session能够存储任意的Java对象,cookie只能存储String类型的对象。
103.浏览器和Servlet通信使用的是什么协议? 浏览器和Servlet通信使用的是HTTP协议。
104.什么是HTTP隧道? HTTP隧道是一种利用HTTP或者是HTTPS把多种网络协议封装起来进行通信的技术。因此,HTTP协议扮演了一个打通用于通信的网络协议的管道的包装器的角色。把其他协议的请求掩盖成HTTP的请求就是HTTP隧道。
105.sendRedirect()和forward()方法有什么区别? sendRedirect()方法会创建一个新的请求,而forward()方法只是把请求转发到一个新的目标上。重定向(redirect)以后,之前请求作用域范围以内的对象就失效了,因为会产生一个新的请求,而转发(forwarding)以后,之前请求作用域范围以内的对象还是能访问的。一般认为sendRedirect()比forward()要慢。
URL重定向的特点:
1):浏览器地址栏路径发送变化
2):只发送了两个请求.
3):因为是不同的请求,所以不能共享请求中的数据.
4):可以跨域访问资源.
5):不可以访问WEB-INF中的资源.
请求转发的特点:
1):浏览器地址栏路径没变
2):只发送了一个请求.
3):共享同一个请求,在请求敏感词享数据.
4):只能访问当前应用中的资源,不能跨域跳转.
5):可以访问WEB-INF中的资源.
【吊打面试官之|吊打面试官之 Java基础必备(背)120问 之 [91-105]】请求转发和URL重定向的选择?
1:若需要共享请求中的数据,只能使用请求转发.
2:若需要访问WEB-INF中的资源,只能使用请求转发.
3:若需要跨域访问,只能使用URL重定向.
4:请求转发可能造成表单的重复提交问题.
5:其他时候,任选.
转发:客户端只发送一次请求,地址栏不变,转发能够传递数据,转发也是一个域对象
重定向:客户端发送两次请求,地址栏发生改变,不能传递数据,可以跳转到其它应用上

    推荐阅读