Servlet简要

Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

Servlet 可以使用 javax.servlet 和 javax.servlet.http 包创建

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。

· Servlet 通过调用 init () 方法进行初始化。init 方法被设计成只调用一次。

· Servlet 调用 service() 方法来处理客户端的请求。doGet() 和 doPost() 方法是每次服务请求中最常用的方法。

· Servlet 通过调用 destroy() 方法终止(结束)。destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。

GET 方法

GET 方法向页面请求发送已编码的用户信息。页面和已编码的信息中间用 ? 字符分隔,如下所示:

http://www.test.com/hello?key1=value1&key2=value2

GET 方法是默认的从浏览器向 Web 服务器传递信息的方法,它会产生一个很长的字符串,出现在浏览器的地址栏中。如果您要向服务器传递的是密码或其他的敏感信息,请不要使用 GET 方法。GET 方法有大小限制:请求字符串中最多只能有 1024 个字符。

POST 方法

另一个向后台程序传递信息的比较安全的方法是 POST 方法。

把这些信息作为一个单独的消息。消息以标准输出的形式传到后台程序,您可以解析和使用这些标准输出。

使用 Servlet 读取表单数据

Servlet 处理表单数据,这些数据会根据不同的情况使用不同的方法自动解析:

getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值。

getParameterValues():如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。

getParameterNames():如果您想要得到当前请求中的所有参数的完整列表,则调用该方法。

读取 HTTP 头的方法

下面的方法可用在 Servlet 程序中读取 HTTP 头。这些方法通过 HttpServletRequest对象可用。

Cookie[] getCookies()
返回一个数组,包含客户端发送该请求的所有的 Cookie 对象。

HttpSession getSession()
返回与该请求关联的当前 session 会话,或者如果请求没有 session 会话,则创建一个。

Object getAttribute(String name)
以对象形式返回已命名属性的值,如果没有给定名称的属性存在,则返回 null。

String getContextPath()
返回指示请求上下文的请求 URI 部分。
String getParameter(String name)
以字符串形式返回请求参数的值,或者如果参数不存在则返回 null。

Servlet 服务器 HTTP 响应

当一个 Web 服务器响应一个 HTTP 请求时,响应通常包括一个状态行、一些响应报头、一个空行和文档。

void addCookie(Cookie cookie)
把指定的 cookie 添加到响应。

void sendRedirect(String location)
使用指定的重定向位置 URL 发送临时重定向响应到客户端。

void setCharacterEncoding(String charset)
设置被发送到客户端的响应的字符编码(MIME 字符集)例如,UTF-8。

 

 

 

报错信息:

400

Bad Request

服务器不理解请求。

404

Not Found

服务器无法找到所请求的页面。.

405

Method Not Allowed

在请求中指定的方法是不允许的。

500

Internal Server Error

未完成的请求。服务器遇到了一个意外的情况。

 

 

Cookie 剖析

Cookie 通常设置在 HTTP 头信息中。

public void setMaxAge(int expiry)
该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。

public String getName()
该方法返回 cookie 的名称。名称在创建后不能改变。

public void setValue(String newValue)
该方法设置与 cookie 关联的值。

public String getValue()
该方法获取与 cookie 关联的值。

public String getPath()
该方法获取 cookie 适用的路径。

通过 Servlet 设置 Cookie 包括三个步骤:

(1) 创建一个 Cookie 对象:您可以调用带有 cookie 名称和 cookie 值的 Cookie 构造函数,cookie 名称和 cookie 值都是字符串。

Cookie cookie = new Cookie("key","value");

请记住,无论是名字还是值,都不应该包含空格或以下任何字符:

[ ] ( ) = , " / ? @ : ;

(2) 设置最大生存周期:您可以使用 setMaxAge 方法来指定 cookie 能够保持有效的时间(以秒为单位)。下面将设置一个最长有效期为 24 小时的 cookie。

cookie.setMaxAge(60*60*24);

(3) 发送 Cookie 到 HTTP 响应头:您可以使用 response.addCookie 来添加 HTTP 响应头中的 Cookie,如下所示:

response.addCookie(cookie);

HttpSession 对象

Servlet 提供了 HttpSession 接口,该接口提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式。

Servlet 容器使用这个接口来创建一个 HTTP 客户端和 HTTP 服务器之间的 session 会话。会话持续一个指定的时间段,跨多个连接或页面请求。

您会通过调用 HttpServletRequest 的公共方法 getSession() 来获取 HttpSession 对象,如下所示:

HttpSession session = request.getSession();

你需要在向客户端发送任何文档内容之前调用 request.getSession()。

 

public Object getAttribute(String name)
该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null。

public void setAttribute(String name, Object value) 
该方法使用指定的名称绑定一个对象到该 session 会话。

public long getCreationTime()
该方法返回该 session 会话被创建的时间

public void removeAttribute(String name)
该方法将从该 session 会话移除指定名称的对象。

Servlet 文件上传

创建一个文件上传表单

表单 method 属性应该设置为 POST 方法,不能使用 GET 方法。

表单 enctype 属性应该设置为 multipart/form-data.

表单 action 属性应该设置为在后端服务器上处理文件上传的 Servlet 文件。

提供的两个依赖包: commons-io-x.x.jar 和commons-fileupload.x.x.jar 

Servlet 网页重定向

重定向请求到另一个网页的最简单的方式是使用 response 对象的 sendRedirect() 方法

Servlet 自动刷新页面

java Servlet 提供了一个机制,使得网页会在给定的时间间隔自动刷新。

刷新网页的最简单的方式是使用响应对象的方法 setIntHeader()。以下是这种方法的定义:

public void setIntHeader(String header, int headerValue)