Servlet基础
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
Servlet 是服务 HTTP 请求并实现 javax.servlet.Servlet 接口的 Java 类。Web 应用程序开发人员通常编写 Servlet 来扩展 javax.servlet.http.HttpServlet,并实现 Servlet 接口的抽象类专门用来处理 HTTP 请求。
Servlet生命周期
Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:
1.Servlet 通过调用 init () 方法进行初始化。
2.Servlet 调用 service() 方法来处理客户端的请求。service()方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。所以,您不用对 service() 方法做任何动作,您只需要根据来自客户端的请求类型来重载 doGet() 或 doPost() 即可。
3.Servlet 通过调用 destroy() 方法终止(结束)。
4.最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
Servlet表单数据
浏览器使用两种方法可将信息传递到 Web 服务器,分别为 GET 方法和 POST 方法。
- get方法
GET 方法向页面请求发送已编码的用户信息。页面和已编码的信息中间用 ? 字符分隔,如下所示:
http://www.test.com/hello?key1=value1&key2=value2
GET 方法有大小限制:请求字符串中最多只能有 1024 个字符。
- post方法
另一个向后台程序传递信息的比较可靠的方法是 POST 方法。POST 方法打包信息的方式与 GET 方法基本相同,但是 POST 方法不是把信息作为 URL 中 ? 字符后的文本字符串进行发送,而是把这些信息作为一个单独的消息。消息以标准输出的形式传到后台程序,您可以解析和使用这些标准输出。
使用serlvet读取表单数据
- getParameter(),可以调用 request.getParameter() 方法来获取表单参数的值。
- getParameterValues(),如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。
- getParameterNames(),如果您想要得到当前请求中的所有参数的完整列表,则调用该方法。
Servlet客户端HTTP请求
- 读取HTTP头的方法
下面的方法可用在 Servlet 程序中读取 HTTP 头。这些方法通过 HttpServletRequest 对象可用。具体的方法参见
方法 | 描述 |
---|---|
Cookie[] getCookies() | 返回一个数组,包含客户端发送该请求的所有的 Cookie 对象。 |
Enumeration getAttributeNames() | 返回一个枚举,包含提供给该请求可用的属性名称。 |
Enumeration getHeaderNames() | 返回一个枚举,包含在该请求中包含的所有的头名。 |
HttpSession getSession() | 返回与该请求关联的当前 session 会话,或者如果请求没有 session 会话,则创建一个。 |
HttpSession getSession(boolean create) | 返回与该请求关联的当前 HttpSession,或者如果没有当前会话,且创建是真的,则返回一个新的 session 会话。 |
Servlet服务器HTTP响应
当一个 Web 服务器响应一个 HTTP 请求时,响应通常包括一个状态行、一些响应报头、一个空行和文档。一个典型的响应如下所示:
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
状态行包括 HTTP 版本(在本例中为 HTTP/1.1)、一个状态码(在本例中为 200)和一个对应于状态码的短消息(在本例中为 OK)。
- 设置HTTP响应报头的方法
下面的方法可用于在 Servlet 程序中设置 HTTP 响应报头。这些方法通过 HttpServletResponse 对象可用。
Servlet HTTP状态码
HTTP 请求和 HTTP 响应消息的格式是类似的,结构如下:
1.初始状态行 + 回车换行符(回车+换行)
2.零个或多个标题行+回车换行符
3.一个空白行,即回车换行符
4.一个可选的消息主体,比如文件、查询数据或查询输出
- 设置HTTP状态码的方法
下面的方法可用于在 Servlet 程序中设置 HTTP 状态码。这些方法通过 HttpServletResponse 对象可用。
方法 | 对象 |
---|---|
public void setStatus(int statusCode) | 该方法设置一个任意的状态码。setStatus 方法接受一个 int(状态码)作为参数。 |
public void sendRedirect(String url) | 该方法生成一个 302 响应,连同一个带有新文档 URL 的 Location 头。 |
public void sendError(int code, String message) | 该方法发送一个状态码(通常为 404),连同一个在 HTML 文档内部自动格式化并发送到客户端的短消息。 |