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) |
void sendRedirect(String location) |
void setCharacterEncoding(String charset)
|
报错信息:
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) |
public void setAttribute(String name, Object value) |
public long getCreationTime() |
public void removeAttribute(String name) |
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)