Java Web Servlet 体系结构(二)

Servlet 的体系结构中的 ServletRequest 接口 & ServletResponse 接口,及其派生接口 HttpServletRequest & HttpServletResponse


ServletRequest & ServletResponse

定义向 Servlet 提供客户端请求信息的对象。

Servlet 容器创建一个 ServletRequest 对象,并将其作为参数传递给 Servlet 的服务方法。

ServletRequest 接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public interface ServletRequest {
// 属性存储相关
Object getAttribute(String var1);
Enumeration<String> getAttributeNames();
void setAttribute(String var1, Object var2);
void removeAttribute(String var1);

// 编码相关
String getCharacterEncoding();
void setCharacterEncoding(String var1) throws UnsupportedEncodingException;

// 获取请求内容的字节数
int getContentLength();
long getContentLengthLong();

// 获取请求MIME类型
String getContentType();

// 网络请求属于IO输入流,提供了获取字节输入流或字符输入流的方法
ServletInputStream getInputStream() throws IOException;
BufferedReader getReader() throws IOException;

// 获取请求参数
String getParameter(String var1);
Enumeration<String> getParameterNames();
String[] getParameterValues(String var1);
Map<String, String[]> getParameterMap();

// 主要是获取请求头的内容
String getProtocol();
String getScheme();
String getServerName();
int getServerPort();
String getRemoteAddr();
String getRemoteHost();
Locale getLocale();
Enumeration<Locale> getLocales();
boolean isSecure();

// 获取转发器
RequestDispatcher getRequestDispatcher(String var1);
}

定义一个对象来帮助 Servlet 向客户端发送响应。

Servlet 容器创建一个 ServletResponse 对象,并将其作为参数传递给 Servlet 的服务方法。

ServletResponse 接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public interface ServletResponse {
// 编码相关
String getCharacterEncoding();
void setCharacterEncoding(String var1);

// 响应类型相关
String getContentType();
void setContentType(String var1);

// 内容长度相关
void setContentLength(int var1);
void setContentLengthLong(long var1);

// 网络请求返回的响应属于IO输出流,提供了获取字节输出流或字符输出流的方法
ServletOutputStream getOutputStream() throws IOException;
PrintWriter getWriter() throws IOException;

// 由于标准的IO输出流就使用了缓冲区,所以这里对应标准输出流的一些缓冲区操作
void setBufferSize(int var1);
int getBufferSize();
void flushBuffer() throws IOException;
void resetBuffer();

// 是否已经提交了响应。
boolean isCommitted();
// 清除在缓存中的任何数据,包括状态代码和消息报头。
void reset();

void setLocale(Locale var1);
Locale getLocale();
}


HttpServletRequest & HttpServletResponse

HttpServletRequest 接口最常用的方法就是获得请求中的参数,这些参数一般是客户端表单中的数据。

同时,HttpServletRequest 接口可以获取由客户端传送的名称,也可以获取产生请求并且接收请求的服务器端主机名及IP地址,还可以获取客户端正在使用的通信协议等信息。

HttpServletRequest 接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public interface HttpServletRequest extends ServletRequest {
// 标准 HTTP 关键字
String BASIC_AUTH = "BASIC";
String FORM_AUTH = "FORM";
String CLIENT_CERT_AUTH = "CLIENT_CERT";
String DIGEST_AUTH = "DIGEST";

String getAuthType();
// 返回客户端在此次请求中发送的所有 Cookie 对象
Cookie[] getCookies();

int getIntHeader(String var1);
long getDateHeader(String var1);
// 返回名字为 var1 的请求报头的值。如果请求中没有包含指定名字的报头,这个方法返回 null 。
String getHeader(String var1);
// 应对了一个 header 多个值的情况
Enumeration<String> getHeaders(String var1);
Enumeration<String> getHeaderNames();

// 获取发送请求的方式,如 GET、POST
String getMethod();

// 返回与客户端发送的请求URL相联系的额外的路径信息
String getPathInfo();
// 将额外的路径信息转换为真实的路径
String getPathTranslated();
// 返回请求 URI 中表示请求上下文的部分,上下文路径是请求 URI 的开始部分
String getContextPath();
// 返回请求 URL 中在路径后的查询字符串。如果在 URL 中没有查询字符串,则返回 null 。
String getQueryString();

String getRemoteUser();

boolean isUserInRole(String var1);

// 返回请求URL中从主机名到查询字符串之间的部分
String getRequestURI();
StringBuffer getRequestURL();
// 返回请求URI中调用Servlet的部分
String getServletPath();

// 返回和此次请求相关联的Session,如果没有给客户端分配Session,则创建一个新的Session
HttpSession getSession();
// 返回和此次请求相关联的Session,如果没有给客户端分配Session,而create参数为true,则创建一个新的Session。如果create参数为false,而此次请求没有一个有效的HttpSession,则返回null
HttpSession getSession(boolean var1);
String getRequestedSessionId();
String changeSessionId();
boolean isRequestedSessionIdValid();
boolean isRequestedSessionIdFromCookie();
boolean isRequestedSessionIdFromURL();
}

在 Servlet 中,当服务器响应客户端的一个请求时,就要用到 HttpServletResponse 接口。

设置响应的类型可以使用 setContentType() 方法。

发送字符数据,可以使用 getWriter() 返回一个对象。

HttpServletResponse 接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public interface HttpServletResponse extends ServletResponse {
// HTTP 1xx
int SC_CONTINUE = 100;
int SC_SWITCHING_PROTOCOLS = 101;
// HTTP 2xx
int SC_OK = 200;
...
// HTTP 3xx 重定向相关
int SC_MULTIPLE_CHOICES = 300;
...
// HTTP 4xx 客户端(请求)错误
int SC_BAD_REQUEST = 400;
...
// HTTP 5xx 服务器错误
int SC_INTERNAL_SERVER_ERROR = 500;
...

// 设置 Cookie
void addCookie(Cookie var1);

// 编码
String encodeURL(String var1);
String encodeRedirectURL(String var1);

// 使用指定的状态代码发送一个错误响应到客户端
void sendError(int var1, String var2) throws IOException;
void sendError(int var1) throws IOException;

// 发送一个临时的重定向响应到客户端,让客户端访问新的URL
void sendRedirect(String var1) throws IOException;

// HTTP Header
boolean containsHeader(String var1);
void setDateHeader(String var1, long var2);
void addDateHeader(String var1, long var2);
void setIntHeader(String var1, int var2);
void addIntHeader(String var1, int var2);
void setHeader(String var1, String var2);
void addHeader(String var1, String var2);
String getHeader(String var1);
Collection<String> getHeaders(String var1);
Collection<String> getHeaderNames();

// HTTP 状态码
void setStatus(int var1);
int getStatus();

default void setTrailerFields(Supplier<Map<String, String>> supplier) {}

default Supplier<Map<String, String>> getTrailerFields() {
return null;
}
}

Java Web Servlet 体系结构(三) Java Web Servlet 体系结构(一)

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×