JavaWeb-Servlet整理2

本文详细介绍了JavaWeb中Servlet处理HTTP状态码、Cookie和Session的概念、工作原理、操作方法及代码示例。HTTP状态码用于指示请求的处理结果;Cookie是客户端存储用户信息的文本文件,用于会话保持;Session是存储在服务器端的用户跟踪信息,提供了跨页面请求识别用户和存储信息的方式。文章还提到了Servlet中文件上传的处理方式。
摘要由CSDN通过智能技术生成

5. Http状态码

5.1 HTTP 状态码列表

以下是可能从 Web 服务器返回的 HTTP 状态码和相关的信息列表:

代码 消息 描述
100 Continue 只有请求的一部分已经被服务器接收,但只要它没有被拒绝,客户端应继续该请求。
101 Switching Protocols 服务器切换协议。
200 OK 请求成功。
201 Created 该请求是完整的,并创建一个新的资源。
202 Accepted 该请求被接受处理,但是该处理是不完整的。
204 No Content 无内容
206 Partial Content 局部请求
301 Moved Permanently 所请求的页面已经转移到一个新的 URL,永久重定向
302 Found 所请求的页面已经临时转移到一个新的 URL。
303 See Other 所请求的页面可以在另一个不同的 URL 下被找到。
307 Temporary Redirect 所请求的页面已经临时转移到一个新的 URL,临时重定向
400 Bad Request 服务器不理解请求。
401 Unauthorized 所请求的页面需要用户名和密码。
402 Payment Required 您还不能使用该代码。
403 Forbidden 禁止访问所请求的页面。
404 Not Found 服务器无法找到所请求的页面。.
405 Method NotAllowed 在请求中指定的方法是不允许的。
408 Request Timeout 请求需要的时间比服务器能够等待的时间长,超时。
413 Request Entity Too Large 服务器不接受该请求,因为请求实体过大。
414 Request-url Too Long 服务器不接受该请求,因为 URL 太长。当您转换一个 “post” 请求为一个带有长的查询信息的 “get” 请求时发生。
500 Internal Server Error 未完成的请求。服务器遇到了一个意外的情况。
502 Bad Gateway 未完成的请求。服务器从上游服务器收到无效响应。
503 Service Unavailable 未完成的请求。服务器暂时超载或死机。
504 Gateway Timeout 网关超时。
505 HTTP Version Not Supported 服务器不支持"HTTP协议"版本。

5.2 设置 HTTP 状态代码的方法

下面的方法可用于在 Servlet 程序中设置 HTTP 状态码。这些方法通过 HttpServletResponse 对象可用。

方法 描述
public void setStatus ( int statusCode ) 该方法设置一个任意的状态码。setStatus 方法接受一个int(状态码)作为参数。如果您的反应包含了一个特殊的状态码和文档,请确保在使用 PrintWriter 实际返回任何内容之前调用 setStatus。
public void sendRedirect(String url) 该方法生成一个 302 响应,连同一个带有新文档 URL 的Location 头。
public void sendError(int code, String message) 该方法发送一个状态码(通常为 404),连同一个在 HTML 文档内部自动格式化并发送到客户端的短消息。

5.3 代码示例

核心方法1-返回404错误

// 导入必需的 java 库
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
// 扩展 HttpServlet 类
public class HelloServlet extends HttpServlet {
   
	// 处理 GET 方法请求的方法
	public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
   
		// 设置错误代码和原因
		response.sendError(404, "Not Found!!!" );
	}
	// 处理 POST 方法请求的方法
	public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
   
		doGet(request, response);
	}
}

核心方法2-重定向

// 导入必需的 java 库
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
// 扩展 HttpServlet 类
public class HelloServlet extends HttpServlet {
   
	// 处理 GET 方法请求的方法
	public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
   
		// 设置错误代码和原因
		response.sendRedirect("https://www.baidu.com");
}
	// 处理 POST 方法请求的方法
	public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
   
		doGet(request, response);
	}
}

6. Servlet Cookies

6.1 cookie概念回顾

定义: Cookies 是存储在客户端计算机上的文本文件,并保留了用户的各种跟踪信息
作用: 会话保持,如完成用户的登录与状态保持

6.2 cookie工作原理

  • 客户端向服务器发起登录请求
  • 服务器脚本向浏览器发送一组 Cookies。例如:姓名、年龄或识别号码等。
  • 浏览器将这些信息存储在本地计算机上,以备将来使用。
  • 当下一次浏览器向 Web 服务器发送任何请求时,浏览器会把这些 Cookies 信息发送到服务器,服务器将使用这些信息来识别用户。

6.3 cookie构成

Cookies 通常设置在 HTTP 头信息中。设置 Cookie 的http请求,会向 Servlet 会发送如下的头信息:

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9
Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT; path=/; domain=bit.com
Connection: close
Content-Type: text/html

  • Set-Cookie 头包含了一个名称值对、一个 GMT 日期、一个路径和一个域。名称和值会被 URL 编码。
  • expires 字段是一个指令,告诉浏览器在给定的时间和日期之后过期(“忘记”)该 Cookie。
  • 如果浏览器被配置为存储 Cookies,它将会保留此信息直到到期日期。

如果用户的浏览器指向任何匹配该 Cookie 的路径和域的页面,它会重新发送 Cookie 到服务器。浏览器的头信息可能如下所示:

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, /
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz

Servlet 就能够通过请求方法 request.getCookies() 访问 Cookie,该方法将返回一个 Cookie 对象的数组。

6.4 Servlet 操作cookie方法

以下是在 Servlet 中操作 Cookies 时可使用的有用的方法列表。

方法 描述
public void setDomain(String pattern) 该方法设置 cookie 适用的域,例如 w3cschool.cn。
public String getDomain() 该方法获取 cookie 适用的域,例如 w3cschool.cn。
public void setMaxAge(int expiry) 该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。
public int getMaxAge() 该方法返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示cookie 将持续下去,直到浏览器关闭。
public String getName() 该方法返回 cookie 的名称。名称在创建后不能改变。
public void setValue(String newValue) 该方法设置与 cookie 关联的值。
public String getValue() 该方法获取与 cookie 关联的值。
public void setPath(String uri) 该方法设置 cookie 适用的路径。如果您不指定路径,与当前页面相同目录下的(包括子目录下的)所有 URL 都会返回 cookie。
public String getPath() 该方法获取 cookie 适用的路径。

6.5 代码示例

代码示例1-提交表单,设置cookie
index.html内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <!--设置编码格式-->
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值