首页 > 代码库 > Servlet
Servlet
1. Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信
采用“请求/响应”的模式。
2. Servlet可完成如下功能:
1). 创建并返回基于客户请求的动态HTML页面。
2). 创建可嵌入到现有 HTML 页面中的部分 HTML 页面(HTML片段)。
3). 与其它服务器资源(如数据库或基于Java的应用程序)进行通信。
3. Servlet的框架是由两个Java包组成:
1). javax.servlet包:定义了所有的Servlet类都必须实现或扩展的通用接口和类。
2). javax.servlet.http 包 :定义了采用 HTTP 协议通信的HttpServlet类。
4. Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口。在Servlet接口中定义了五个方法,其中有三个方法代表了Servlet的生命周期:
1). init方法:负责初始化Servlet对象;
2). service方法:负责响应客户的请求;
3). destroy方法:当Servlet对象退出生命周期时,负责释放占用的资源。(serlvet被修改或服务器关闭)
5. 如果你的Servlet类扩展了HttpServlet类,你通常不必实现service方法,因为HttpServlet类已经实现了service方法。在HttpServlet的service方法中,首先从
HttpServletRequest对象中获取HTTP请求方式的信息,然后再根据请求方式调用相应的方法。例如:如果请求方式为GET,那么调用doGet方法;如果请求方式
为POST,那么调用doPost方法。
6. ServletRequest接口中封装了客户请求信息,如客户请求方式、参数名和参数值、客户端正在使用的协议,以及发出客户请求的远程主机信息等。ServletRequest接口
还为Servlet提供了直接以二进制方式读取客户请求数据流的ServletInputStream(一般上传文件时使用)。
7. SerlvetRequest接口的主要方法:
getAttribute 根据参数给定的属性名返回属性值
getContentType 返回客户请求数据MIME类型
getInputStream 返回以二进制方式直接读取客户请求数据的输入流
getParameter 根据给定的参数名返回参数值
getRemoteAddr 返回远程客户主机的IP地址
getRemoteHost 返回远程客户主机名
getRemotePort 返回远程客户主机的端口
8. ServletResponse 接口为Servlet提供了返回响应结果的方法。它允许Servlet设置返回数据的长度和MIME类型, 并且提供输出流ServletOutputStream(一般用于文件下载)。
9. ServletResponse 接口的主要方法:
1). getOutputStream 返回可以向客户端发送二进制数据的输出流对象ServletOutputStream
2). getWriter 返回可以向客户端发送字符数据的PrintWriter对象
3). getCharacterEncoding 返回Servlet发送的响应数据的字符编码
4). getContentType 返回Servlet发送的响应数据的MIME类型
5). setContentType 设置Servlet发送的响应数据的MIME类型
10. Serlvet实例被创建的时机:
1). 默认情况下,当Web客户第一次请求访问某个Servlet时,Web容器创建这个Servlet的实例
2). 如果设置了<servlet>元素的<load-on-startup>子元素,Servlet容器在启动Web应用时,将按照指定的顺序创建并初始化这个Servlet。
11. 当Servlet容器启动Web应用时,并为每个Web应用创建惟一的ServletContext对象。你可以把ServletContext看成是一个Web应用的服务器端组件的共享内存。在
ServletContext中可以存放共享数据,它提供了读取或设置共享数据的方法:
1). setAttribute(String name,Object object)把一个对象和一个属性名绑定,将这个对象存储在ServletContext中。
2). getAttribute(String name)根据给定的属性名返回所绑定的对象
12. Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。但是以多线程模式执行在编写代码时需要非常细致地考虑多线程的同步问题。
处理同步一般有如下两种方式:
1). 去除实例变量,使用局部变量 (推荐)
2). 使用同步代码块;
13. Cookie的英文原意是“点心”,它是用户访问Web服务器时,服务器在用户硬盘上存放的信息。服务器可以根据Cookie来跟踪用户,这对于需要区别用户的场合
(如电子商务)特别有用。
14. 一个Cookie包含一对Key/Value。下面的代码生成一个Cookie并将它写到用户的硬盘上:
Cookie theCookie=new Cookie("cookieName","cookieValue");
response.addCookie(the Cookie);
15. 比较servlet和JSP:
1). 有许多相似之处,都可以生成动态网页
2). JSP的优点是擅长于网页制作,生成动态页面,比较直观。JSP的缺点是不容易跟踪与排错。
3). Servlet是纯Java语言,擅长于处理流程和业务逻辑。Servlet的缺点是生成动态网页不直观。
16. 当两个Web组件之间为链接关系时,被链接的组件可以通过getParameter()方法来获得请求参数。当前页面向连接页面的一次请求。
17. 在下列时刻Servlet容器装载Servlet:
1). Servlet容器启动时自动装载某些Servlet
2). 在Servlet容器启动后,客户首次向 Servlet 发出请求
3). Servlet的类文件被更新后,重新装载Servlet
Servlet被装载后,Servlet容器创建一个 Servlet 实例并且调用 Servlet 的 init()方法进行初始化。在Servlet的整个生命周期中,init方法只会被调用一次。
18. 当Web应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet的新实例时,Servlet容器会先调用 Servlet的destroy方法。在destroy方法中,
可以释放Servlet所占用的资源。
19. 对于到达Servlet容器的客户请求,Servlet容器创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用 Servlet 的service方法。
service方法从ServletRequest对象获得客户请求信息、处理该请求,并通过ServletResponse对象向客户返回响应结果。
Servlet