POST和GET请求
1.GET请求
发出GET请求的主要方式:
(1)在浏览器输入URL按回车
(2)点击<a>超链接
(3)点击submit按钮,提交 <form method=“get”>表单GET请求特点:
会将请求数据添加到请求URL地址的后面,只能提交少量的数据、不安全
2.POST请求
发出POST请求的方法如下:
点击submit按钮,提交 <form method=“post”>
表单POST请求的特点:
请求数据添加到HTTP协议体中,可提交大量数据、安全性好。
3.ServletRequest接口
(1)基本概念
javax.servlet.ServletRequest接口主要用于向servlet提供客户端请求信息,可以从中获取到任何 请求信息。
Servlet容器创建一个ServletRequest对象,并将其作为参数传递给Servlet的service方法。
(2)常用方法
|
方法声明 |
功能介绍 |
|
String getParameter(String name) |
以字符串形式返回请求参数的值,如果该参数不存在,则返回空值 |
|
String[] getParameterValues( String name) |
返回一个字符串对象数组,其中包含给定请求参数所具有的所有值,如果该参数不存在,则返回空值 |
|
Enumeration getParameterNames() |
返回包含此请求中包含的参数名称的字符串对象的枚举。如果请求没有参数,则方法返回空枚举 |
|
Map<String, String[]> getParameterMap() |
返回请求参数的键值对,一个键可以对应多个值 |
|
String getRemoteAddr() |
返回发送请求的客户端或最后一个代理的IP地址 |
|
int getRemotePort() |
返回发送请求的客户端或最后一个代理的端口号 |
4.HttpServletRequest接口
(1)基本概念
javax.servlet.http.HttpServletRequest接口是ServletRequest接口的子接口,主要用于提供HTTP
请求信息的功能。
不同于表单数据,在发送HTTP请求时,HTTP请求头直接由浏览器设置。
可直接通过HttpServletRequest对象提供的一系列get方法获取请求头数据。
(2)常用方法
|
方法声明 |
功能介绍 |
|
String getRequestURI() |
返回此请求的资源路径信息 |
|
StringBuffer getRequestURL() |
返回此请求的完整路径信息 |
|
String getMethod() |
返回发出此请求的HTTP方法的名称,例如GET、POST |
|
String getQueryString() |
返回路径后面请求中附带的参数 |
|
String getServletPath() |
返回此请求中调用servlet的路径部分 |
5.ServletResponse接口
(1)基本概念
javax.servlet.ServletResponse接口用于定义一个对象来帮助Servlet向客户端发送响应。Servlet容器创建ServletResponse对象,并将其作为参数传递给servlet的service方法。
(2)常用方法
|
方法声明 |
功能介绍 |
|
PrintWriter getWriter() |
返回可向客户端发送字符文本的PrintWriter对象 |
|
String getCharacterEncoding() |
获取响应内容的编码方式 |
|
void setContentType(String type) |
如果尚未提交响应,则设置发送到客户端响应的内容类型。内容类型可以包括字符编码规范,例如text/html;charset=UTF-8 |
6.HttpServletResponse接口
(1)基本概念
javax.servlet.http.HttpServletResponse接口继承ServletResponse接口,以便在发送响应时提供 特定于HTTP的功能。
(2)常用的方法
|
方法声明 |
功能介绍 |
|
void sendRedirect(String location) |
使用指定的重定向位置URL向客户端发送临时重定向响应 |
(3)使用示例
package com.lagou.demo02;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "HelloServlet4", urlPatterns = "/hello4")
public class HelloServlet4 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Post请求方式...");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Get请求方式...");
this.doPost(request, response);
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("原来使用注解可以如此潇洒...");
String method = req.getMethod();
System.out.println("获取到的请求方式为:" + method);
if ("get".equalsIgnoreCase(method)) {
doGet(req, resp);
}
if ("post".equalsIgnoreCase(method)) {
doPost(req, resp);
}
}
}
package com.lagou.demo02;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.Map;
import java.util.Random;
import java.util.Set;
public class ParameterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 6.设置请求信息中的编码方式为utf-8来解决乱码问题
request.setCharacterEncoding("utf-8");
// 1.获取指定参数名称对应的参数值并打印
String name = request.getParameter("name");
System.out.println("获取到的姓名为:" + name);
String[] hobbies = request.getParameterValues("hobby");
System.out.print("获取到的爱好有:");
for (String ts : hobbies) {
System.out.print(ts + " ");
}
System.out.println();
System.out.println("-------------------------------------------------------");
// 2.获取所有参数的名称
Enumeration<String> parameterNames = request.getParameterNames();
System.out.print("获取到的所有参数名称为:");
while (parameterNames.hasMoreElements()) {
System.out.print(parameterNames.nextElement() + " ");
}
System.out.println();
System.out.println("-------------------------------------------------------");
// 3.获取请求参数名和对应值的第二种方式
Map<String, String[]> parameterMap = request.getParameterMap();
// 使用Map集合中所有的键值对组成Set集合
Set<Map.Entry<String, String[]>> entries = parameterMap.entrySet();
// 遍历Set集合
for (Map.Entry<String, String[]> me : entries) {
System.out.print(me.getKey() + "对应的数值有:");
for (String ts : me.getValue()) {
System.out.print(ts + " ");
}
System.out.println();
}
System.out.println("-------------------------------------------------------");
// 4.获取客户端请求的其它信息
System.out.println("发送请求的客户端IP地址为:" + request.getRemoteAddr());
System.out.println("发送请求的客户端端口号为:" + request.getRemotePort());
System.out.println("请求资源的路径为:" + request.getRequestURI());
System.out.println("请求资源的完整路径为:" + request.getRequestURL());
System.out.println("请求方式为:" + request.getMethod());
System.out.println("请求的附带参数为:" + request.getQueryString());
System.out.println("请求的Servlet路径为:" + request.getServletPath());
System.out.println("-------------------------------------------------------");
// 5.向浏览器发出响应数据
// 获取响应数据的默认编码方式
String characterEncoding = response.getCharacterEncoding();
System.out.println("服务器响应数据的默认编码方式为:" + characterEncoding); // ISO-8859-1
// 设置服务器和浏览器的编码方式以及文本类型
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer = response.getWriter();
//writer.write("I Received!");
//writer.write("我接收到了!");
Random ra = new Random();
int num = ra.nextInt(100) + 1;
writer.write("<h1>" + num + "</h1>");
System.out.println("服务器发送数据成功!");
writer.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
配置文件示例:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 对于ServletContext对象的参数进行配置 -->
<context-param>
<param-name>param1</param-name>
<param-value>value1</param-value>
</context-param>
<context-param>
<param-name>param2</param-name>
<param-value>value2</param-value>
</context-param>
<servlet>
<servlet-name>ConfigServlet</servlet-name>
<servlet-class>com.lagou.demo02.ConfigServlet</servlet-class>
<!-- 实现初始化参数的配置 -->
<init-param>
<!-- 初始化参数的名称 -->
<param-name>userName</param-name>
<!-- 初始化参数的数值 -->
<param-value>admin</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ConfigServlet</servlet-name>
<url-pattern>/config</url-pattern>
</servlet-mapping>
<!-- 进行Servlet的配置 -->
<servlet>
<!-- 对Servlet起别名 习惯上就使用类名 -->
<servlet-name>HelloServlet3</servlet-name>
<!-- 指定上述别名所对应的Servlet类 -->
<servlet-class>com.lagou.demo02.HelloServlet3</servlet-class>
</servlet>
<!-- 进行Servlet的映射配置 -->
<servlet-mapping>
<servlet-name>HelloServlet3</servlet-name>
<!-- 配置浏览器的访问地址 -->
<url-pattern>/hello3</url-pattern>
</servlet-mapping>
<!-- 进行Servlet的配置 -->
<servlet>
<!-- 对Servlet起别名 习惯上就使用类名 -->
<servlet-name>HelloServlet2</servlet-name>
<!-- 指定上述别名所对应的Servlet类 -->
<servlet-class>com.lagou.demo02.HelloServlet2</servlet-class>
</servlet>
<!-- 进行Servlet的映射配置 -->
<servlet-mapping>
<servlet-name>HelloServlet2</servlet-name>
<!-- 配置浏览器的访问地址 -->
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
<!-- 进行Servlet的配置 -->
<servlet>
<!-- 对Servlet起别名 习惯上就使用类名 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 指定上述别名所对应的Servlet类 -->
<servlet-class>com.lagou.demo02.HelloServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>ParameterServlet</servlet-name>
<servlet-class>com.lagou.demo02.ParameterServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>ContextServlet</servlet-name>
<servlet-class>com.lagou.demo02.ContextServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ContextServlet</servlet-name>
<url-pattern>/context</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ParameterServlet</servlet-name>
<url-pattern>/parameter</url-pattern>
</servlet-mapping>
<!-- 进行Servlet的映射配置 -->
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<!-- 配置浏览器的访问地址 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
节选自拉钩教育JAVA系列课程
HTTP的GET与POST请求及Servlet接口解析
本文介绍了HTTP的GET和POST请求,包括它们的使用方式和特点。GET请求将数据附加到URL,适合少量且不敏感的数据;POST请求则将数据放在协议体中,更安全且能处理大量数据。同时,文章详细讲解了ServletRequest、HttpServletRequest、ServletResponse和HttpServletResponse接口在Servlet中的作用和常用方法,这些接口是处理HTTP请求和响应的关键。
201

被折叠的 条评论
为什么被折叠?



