HttpServlet实现类中HttpServletRequest接口
// HttpServletResponse 接口 也叫响应对象
// 负责将doGet/doPost方法的执行结果写入到响应体交给浏览器
// 可以将数据以二进制形式写入到响应体
// 可以设置响应头中content-type属性,控制浏览器使用对应编译器将响应体的数据编译成对应文字、命令
// 可以设置响应头中location属性,将一个请求地址赋值给location,控制浏览器向指定服务器发送请求
/** 如何使用响应对象发送数据?
* HttpServletResponse resp 响应对象
* * PrintWriter out = resp.getWriter() 通过响应对象getWriter方法获取输出流
* * out.write(******) 使用输出流将数据写入响应体
* * 字符串可以直接输出在输出流中,
* * int输出出错
* * out.write方法可以写字符、字符串、ASCII码
* * 输出int时,放入的是ASCII码
* * out.print() 在实际使用中,使用out.print()
* * 不用关闭输出流
* */
/** 如何设置响应包 编译格式 字符格式?
* 浏览器接收到响应包后,根据响应头的content-type属性 进行编译处理
* * 默认content-type = “text” 文本编译
* * 想要修改content-type,必须在得到输出流前对其属性重新赋值
* * HttpServletResponse response 响应对象
* * response.setContentType("application/json"); application和json格式
* * 修改字符格式
* * response.setCharacterEncoding("UTF-8");
* * 或者
* * 在修改编译格式时改response.setContentType("application/json;charset=utf-8");
* */
/** 如何使浏览器接收到响应包后,去浏览指定服务器
* HttpServletResponse response 响应对象
* * response.sendRedirect("******"); 传入字符串(服务器地址)
* * sendRedirect方法远程控制浏览器请求行为(请求地址,请求方式,请求参数)
* * 如果是带参数的,则传入的字符串为“http://www.baidu.com?username=name”
* */
HttpServlet实现类中HttpServletRequest接口
// HttpServletRequest 接口
// 负责在doGet/doPost方法运行时,读取http请求协议包中的信息
// 也叫 请求对象
// 可以读取HTTP中协议包中的 请求行 的信息
// 可以读取保存在请求协议包中 请求头 或 请求体 中请求参数信息
// 可以代替浏览器向服务器申请资源文件调用
/** HttpServletRequest req;
* * 通过请求对象 获取 请求行 中 url 信息 请求服务器地址
* * String URL =req.getRequestURL().toString();
* * 通过请求对象 获取 请求行 中 Method 信息 请求模式 Get/Post
* * String Method =req.getMethod().toString();
* * 获取 uri 资源文件精准定位地址
* * 在请求行中没有这个 这个是URL中截取的字符串
* * 格式 “/网站名/资源文件名”
* * uri用于让服务器对被访问资源进行定位
* * String URI =req.getRequestURI();
* */
/** 通过请求对象获得 请求头 中 所有请求参数名 并读取指定参数名
* 请求头 中的参数是携带在访问地址中,例如“http://www.baidu.com?username=name”
* * Enumeration paramNames = req.getParameterNames();
* * // 将所有请求参数名保存到一个枚举对象进行返回
* * while(paramNames.hasMoreElements())
* * {
* * String paramName = (String)paramNames.nextElement();
* * // 获取参数名
* * String data = req.getParameter(paramName);
* * // 获取参数名
* * }
* */
Get Post方法区别和使用
/** 对于Get和Post 请求参数位置不同
* Get 的参数在请求头中,Post 的参数在请求体中
* * 在请求中添加参数 类似于在表单中<input type="***" name="***">
* * Get 的参数
* * 知道参数名name,获取参数值
* * String data = req.getParameter("name");
* * Post 的参数
* * 知道参数名name,获取参数值
* * String data = req.getParameter("name");
* * 在头和体里面,获取参数方式相同
* * 使用Get 发送 中文内容 正常
* * 使用Post 发送 中文内容 错误
* * 原因
* * 浏览器以GET方式发送请求,请求参数保存在[请求头]
* * 在Http请求协议包到达Http服务器之后,第一件事就是进行解码
* * 请求头二进制内容由Tomcat负责解码,Tomcat9 .0默认使用[utf-8] 字符集,可以解释一切国家文字
* * 浏览器以POST方式发送请求,请求参数保存在[请求体],
* * 在Http请求协议包到达Http服务器之后,第一件事就是进行解码
* * 请求体二进制内容由当前请求对象(request)负责解码。request默认使用[IS0-8859-1]字符集
* * 解决方法
* * 在Post请求方式下,在读取请求体内容之前,应该通知请求对象使用utf-8字符集对请求体内容进行一次重新解码
* * req.setCharacterEncoding("utf-8");
* */
// 针对Get请求,客户端获取数据
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
// 针对Post请求,客户端上传数据
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp);
}