Servlet的存在就是要为客户服务。servlet的任务是得到一个客户的请求,在发回一个响应。请求可能很简单,比如:请给我一个欢迎页面;也可能很复杂,比如:为我的购物车结账。这个请求携带着一些重要的参数,你的Servlet代码必须知道怎么找到和使用这个请求。响应也带着一些信息,浏览器需要这些信息来显示一个页面(或下载数据),你的Servlet代码必须知道怎么发送这些信息。或者不发送.....你的Servlet也可以把请求传递给其他人(另一个页面、Servlet、JSP)。
Servlet在整个Web应用中的作用非同小可,我们需要对它有全面的了解。首先,我们先看 一下Servlet的生命周期:
ServletConfig对象:
1、每个servlet都有一个ServletCongfig对象 (Config是配置的意思)
2、用于向servlet传递部署是信息(例如数据库或企业bean查找名),而你不想把这个信息硬编码写到servlet中
3、用于访问servletContext
4、参数在部署描述文件中
ServletContext对象:
1、每个Web应用都有一个ServletContext对象 (叫AppContext更合适,因为每个Web应用只有一个)
2、用于访问Web应用参数(也在部署描述文件中配置)
3、相当于一个应用公告栏,可以在这里放置消息(称为属性),应用的其他部分可以访问这些消息
4、用于得到服务器信息,包括容器名和容器版本,以及所支持API的版本
幂等是很好的。这说明你可以一遍一遍反复做同一件事,而不会有预料不到的副作用。Get方法是幂等的,因为它只是为了得到数据,它不会改变服务器上的任何内容;POST不是幂等的,POST提交的数据可能用于不可逆转的事物。所以使用doPost()方法是要注意。
我们能从请求对象中得到什么呢?
1、得到参数。用getParameter()方法得到单个参数和getParameterValues()得到一个数组,即全部参数。返回值总是String。
2、客户的平台和浏览器信息
String client=request.getHeader("User-Agent");
3、与请求相关的cookie
Cookie [] cookies = request.getCookies();
4、与客户相关的session
Httpsession session = request.getSession();
5、请求的输入流 (得到的流只包含HTTP请求的体而不包含首部)
InputStream input=request.getInputStream();
6、请求的HTTP方法
String Method = request.getMethod();
响应要返回给客户。这是浏览器得到、解析并呈现给用户的东西。一般地,我们会使用响应得到一个输出流(通常是一个Writer),并使用这个流写出HTML(或其他类型的内容),返回给客户。
服务器是可以客户发送文件的,不过得有这行代码,并且这代码要先写 :response.setContentType("applicatio/jar");这行代码是干嘛的呢?这是告诉浏览器你要发回的是什么,这样浏览器才能有正确的 “举止” :比如启动一个“辅助”应用,如PDF阅读器或视频播放器;也可能向用户呈现HTML;或者把响应的字节保存为一个下载文件等。
对于输出,我们有两个选择:字符还是字节。ServletOutputStream用于输出字节,PrintWriter用于输出字符数据。
重定向。我们可以选择让别人来为我们处理响应,把请求重定向到一个完全不同的URL,或者可以把请求分派给Web应用的另一个组件(通常是一个JSP)。
重定向需要用到 :request.sendRedirect("http://www.orilly.com") ,注意要使用相对URLs。
与重定向不同的是 请求分派。重定向是让客户端来完成工作,而请求分派是要求服务器来指定某某完成任务。所以说,重定向=客户,请求分派=服务器。