Servlet的简介

Servlet

  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,它实现了Servlet和ServletConfig接口。继承自 GenericServlet的Servlet应该要覆盖service()方法。最后,为了开发一个能用在网页上服务于使用HTTP协议请求的 Servlet,你的Servlet必须要继承自HttpServlet。这里有Servlet的例子。

  95.解释下Servlet的生命周期。

  对每一个客户端的请求,Servlet引擎载入Servlet,调用它的init()方法,完成Servlet的初始化。然后,Servlet对象 通过为每一个请求单独调用service()方法来处理所有随后来自客户端的请求,最后,调用Servlet(译者注:这里应该是Servlet而不是 server)的destroy()方法把Servlet删除掉。

  96.doGet()方法和doPost()方法有什么区别?

  doGet:GET方法会把名值对追加在请求的URL后面。因为URL对字符数目有限制,进而限制了用在客户端请求的参数值的数目。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。

  doPOST:POST方法通过把请求参数值放在请求体中来克服GET方法的限制,因此,可以发送的参数的数目是没有限制的。最后,通过POST请求传递的敏感信息对外部客户端是不可见的。

  97.什么是Web应用程序?

  Web应用程序是对Web或者是应用服务器的动态扩展。有两种类型的Web应用:面向表现的和面向服务的。面向表现的Web应用程序会产生包含了很 多种标记语言和动态内容的交互的web页面作为对请求的响应。而面向服务的Web应用实现了Web服务的端点(endpoint)。一般来说,一个Web 应用可以看成是一组安装在服务器URL名称空间的特定子集下面的Servlet的集合。

  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()要慢。

  106.什么是URL编码和URL解码?

  URL编码是负责把URL里面的空格和其他的特殊字符替换成对应的十六进制表示,反之就是解码。

  JSP

  107.什么是JSP页面?

  JSP页面是一种包含了静态数据和JSP元素两种类型的文本的文本文档。静态数据可以用任何基于文本的格式来表示,比如:HTML或者XML。JSP是一种混合了静态内容和动态产生的内容的技术。这里看下JSP的例子。

  108.JSP请求是如何被处理的?

  浏览器首先要请求一个以.jsp扩展名结尾的页面,发起JSP请求,然后,Web服务器读取这个请求,使用JSP编译器把JSP页面转化成一个 Servlet类。需要注意的是,只有当第一次请求页面或者是JSP文件发生改变的时候JSP文件才会被编译,然后服务器调用servlet类,处理浏览 器的请求。一旦请求执行结束,servlet会把响应发送给客户端。这里看下如何在JSP中获取请求参数。

  109.JSP有什么优点?

  下面列出了使用JSP的优点:

  JSP页面是被动态编译成Servlet的,因此,开发者可以很容易的更新展现代码。

  JSP页面可以被预编译。

  JSP页面可以很容易的和静态模板结合,包括:HTML或者XML,也可以很容易的和产生动态内容的代码结合起来。

  开发者可以提供让页面设计者以类XML格式来访问的自定义的JSP标签库。

  开发者可以在组件层做逻辑上的改变,而不需要编辑单独使用了应用层逻辑的页面。

  110.什么是JSP指令(Directive)?JSP中有哪些不同类型的指令?

  Directive是当JSP页面被编译成Servlet的时候,JSP引擎要处理的指令。Directive用来设置页面级别的指令,从外部文件 插入数据,指定自定义的标签库。Directive是定义在 <%@ 和 %>之间的。下面列出了不同类型的Directive:

  包含指令(Include directive):用来包含文件和合并文件内容到当前的页面。

  页面指令(Page directive):用来定义JSP页面中特定的属性,比如错误页面和缓冲区。

  Taglib指令: 用来声明页面中使用的自定义的标签库。

  111.什么是JSP动作(JSP action)?

  JSP动作以XML语法的结构来控制Servlet引擎的行为。当JSP页面被请求的时候,JSP动作会被执行。它们可以被动态的插入到文件中,重用JavaBean组件,转发用户到其他的页面,或者是给Java插件产生HTML代码。下面列出了可用的动作:

  jsp:include-当JSP页面被请求的时候包含一个文件。

  jsp:useBean-找出或者是初始化Javabean。

  jsp:setProperty-设置JavaBean的属性。

  jsp:getProperty-获取JavaBean的属性。

  jsp:forward-把请求转发到新的页面。

  jsp:plugin-产生特定浏览器的代码。

  112.什么是Scriptlets?

  JSP技术中,scriptlet是嵌入在JSP页面中的一段Java代码。scriptlet是位于标签内部的所有的东西,在标签与标签之间,用户可以添加任意有效的scriplet。

  113.声明(Decalaration)在哪里?

  声明跟Java中的变量声明很相似,它用来声明随后要被表达式或者scriptlet使用的变量。添加的声明必须要用开始和结束标签包起来。

  114.什么是表达式(Expression)?

  【列表很长,可以分上、中、下发布】

  JSP表达式是Web服务器把脚本语言表达式的值转化成一个String对象,插入到返回给客户端的数据流中。表达式是在<%=和%>这两个标签之间定义的。

  115.隐含对象是什么意思?有哪些隐含对象?

  JSP隐含对象是页面中的一些Java对象,JSP容器让这些Java对象可以为开发者所使用。开发者不用明确的声明就可以直接使用他们。JSP隐含对象也叫做预定义变量。下面列出了JSP页面中的隐含对象:

  application

  page

  request

  response

  session

  exception

  out

  config

  pageContext

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值