如何在 Serlvet 中获取请求信息

在我们获取信息前需要了解GET请求和POST请求是HTTP请求的两种基本方法。

GET请求

使用GET请求方式传递参数:
①. 在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为GET。
②. 如果网页中的form表单元素的 method 属性被设置为了“GET”,浏览器提交这个FORM表单时生成的HTTP请求消息的请求方式也为GET。
③. 使用GET请求方式给WEB服务器传递参数的格式

POST请求

使用 POST 方式传递参数:
①. POST 请求方式主要用于向 WEB 服务器端程序提交 FORM 表单中的数据: form 表单的 method 置为 POST
②. POST 方式将各个表单字段元素及其数据作为 HTTP 消息的实体内容发送给 WEB 服务器,传送的数据量要比使用GET方式传送的数据量大得多。

如何在 Serlvet 中获取请求信息

Servlet 的 service() 方法用于应答请求: 因为每次请求都会调用 service() 方法

1
2
3
4
5
6
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException
/* ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现.
这两个接口的实现类都是服务器给予实现的, 并在服务器调用 service 方法时传入.
*/

ServletRequest的方法

html文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="loginServlet" method="post">
user: <input type="text" name="user"/>
password:<input type="password" name="password"/>
<input type="submit" value="submit"/>
<br><br>
ceshi:
<input type="checkbox" name="ceshi" value="reading"/>Reading
<input type="checkbox" name="ceshi" value="game"/>Game
<input type="checkbox" name="ceshi" value="party"/>Party
<input type="checkbox" name="ceshi" value="sport"/>Sport
<input type="checkbox" name="ceshi" value="tv"/>TV
</form>
</body>
</html>

xml文件:

1
2
3
4
5
6
7
8
9
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>TTT.Login</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/loginServlet</url-pattern>
</servlet-mapping>

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
//获取参数名的值
String st = request.getParameter("user");
System.out.println(st);
//一个参数名对应多个参数值
String[] ceshi = request.getParameterValues("ceshi");
for(String st1 : ceshi) {
System.out.println(st1);
}
//HttpServletRequest: 是 SerlvetRequest 的子接口. 针对于 HTTP 请求所定义. 里边包含了大量获取 HTTP 请求相关的方法.
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
//获取URL
String requestURI = httpServletRequest.getRequestURI();
System.out.println(requestURI);
//获取请求方式
String method = httpServletRequest.getMethod();
System.out.println(method);
//若是一个 GET 请求, 获取请求参数对应的那个字符串, 即 ? 后的那个字符串.
String queryString = httpServletRequest.getQueryString();
System.out.println(queryString);
//获取请求的 Serlvet 的映射路径
String servletPath = httpServletRequest.getServletPath();
System.out.println(servletPath);
}

结果:

123
reading game party
/JavaWeb_Study/loginServlet
POST
null
/loginServlet

ServletResponse的方法

①getWriter(): 返回 PrintWriter 对象. 调用该对象的 print() 方法, 将把 print() 中的参数直接打印
到客户的浏览器上. getOutputStream(),一般用来输出二进制内容,例如图片。getWriter(),用来输出文本类型的内容,如HTML和纯文本。
文本输出情况下需设置编码类型,在调用response.getWriter()前,我们必须设置content type

1
response.setContentType("text/html; charset=GBK");

②设置响应的内容类型: response.setContentType(“application/msword”);
③void sendRedirect(String location): 请求的重定向. (此方法为 HttpServletResponse 中定义.)

请求的转发和重定向

本质区别: 请求的转发只发出了一次请求, 而重定向则发出了两次请求.

具体:

①. 请求的转发: 地址栏是初次发出请求的地址.
请求的重定向: 地址栏不再是初次发出的请求地址. 地址栏为最后响应的那个地址

②. 请求转发: 在最终的 Servlet 中, request 对象和中转的那个 request 是同一个对象.
请求的重定向: 在最终的 Servlet 中, request 对象和中转的那个 request 不是同一个对象.

③. 请求的转发: 只能转发给当前 WEB 应用的的资源
请求的重定向: 可以重定向到任何资源.

④. 请求的转发: / 代表的是当前 WEB 应用的根目录
请求的重定向: / 代表的是当前 WEB 站点的根目录.

原创技术分享,您的支持将鼓励我继续创作
0%