Servlet

来源:互联网 发布:淘宝怎么申请退保证金 编辑:程序博客网 时间:2024/05/23 20:56

1、Servlet 执行以下主要任务:
读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。

2、Servlet环境的搭建:
安装Tomcat 在eclipse中添加Servers,创建web项目后在buildpath 中Add library 添加Server Runtime即可使用HttpServlet和Servlet, 也可以直接导入Tomcat安装目录下的lib目录里的jsp-api.jar 、servlet-api.jar

3、Servlet 生命周期
构造 servlet,然后使用 init 方法将其初始化。
处理来自客户端的对 service 方法的所有调用。
从服务中取出 servlet,然后使用 destroy 方法销毁它,最后进行垃圾回收并终止它。

4、HttpServlet类:
HttpServlet中的方法如下:
doGet,如果 servlet 支持 HTTP GET 请求
doPost,用于 HTTP POST 请求
doPut,用于 HTTP PUT 请求
doDelete,用于 HTTP DELETE 请求
init 和 destroy,用于管理 servlet 的生命周期内保存的资源
getServletInfo,servlet 使用它提供有关其自身的信息

5、doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException 详解:
由服务器调用(通过 service 方法),以允许 servlet 处理 GET 请求。
重写此方法以支持 GET 请求,也就自动支持了 HTTP HEAD 请求。HEAD 请求是一个返回响应中没有正文、只有请求头字段的 GET 请求。

重写此方法时,读取请求数据、写入响应头、获取响应的编写者或输出流对象,最后,写入响应数据。最好包括内容类型和编码。使用 PrintWriter 对象返回响应时,在访问 PrintWriter 对象之前设置内容类型。

提交响应前,servlet 容器必须写入响应头,因为在 HTTP 中响应头必须在响应正文之前发送。

如有可能,应设置 Content-Length 头(使用 javax.servlet.ServletResponse#setContentLength 方法),以允许 servlet 容器使用持久连接向客户端返回响应,从而改进性能。如果响应缓冲区能够容纳整个响应,则自动设置内容长度。

使用 HTTP 1.1 存储块编码时(这意味着响应具有 Transfer-Encoding 头),不要设置 Content-Length 头。

GET 方法应该是安全的,也就是说,没有需要用户负责的任何副作用。例如,大多数形式查询没有副作用。如果某个客户端请求用于更改存储数据,则该请求应该使用某个其他 HTTP 方法。

GET 方法还应该是幂等(在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同)的,这意味着可以安全地重复使用它。有时使某个方法是安全的也会使其成为幂等的。例如,重复查询既是安全的,又是幂等的,但在线购买某个产品或修改数据则既不是安全的又不是幂等的。

如果不正确地格式化请求,则 doGet 将返回一条 HTTP “Bad Request” 消息。

6、doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException:
由服务器调用(通过 service 方法),以允许 servlet 处理 POST 请求。 HTTP POST 方法允许客户端一次将不限长度的数据发送到 Web 服务器,这在发送诸如信用卡号之类的信息时很有用。
重写此方法时,读取请求数据、写入响应头、获取响应的编写者或输出流对象,最后,写入响应数据。最好包括内容类型和编码。使用 PrintWriter 对象返回响应时,在访问 PrintWriter 对象之前设置内容类型。

提交响应前,servlet 容器必须写入响应头,因为在 HTTP 中响应头必须在响应正文之前发送。

如有可能,应设置 Content-Length 头(使用 javax.servlet.ServletResponse#setContentLength 方法),以允许 servlet 容器使用持久连接向客户端返回响应,从而改进性能。如果响应缓冲区能够容纳整个响应,则自动设置内容长度。

使用 HTTP 1.1 存储块编码时(这意味着响应具有 Transfer-Encoding 头),不要设置 Content-Length 头。

此方法不需要是安全的或幂等的。通过 POST 请求的操作可能产生用户需要负责的副作用,例如,更新存储数据或在线购买商品。

如果不正确地格式化 HTTP POST 请求,则 doPost 返回一条 HTTP “Bad Request” 消息。

原创粉丝点击