title: 【学习之路】Servlet学习
draft: true
tags:
- 学习之路
- JavaEE
- Servlet
categories: - JavaEE
- Servlet
description: Servlet学习,学习HTTPServletRequest类和 HttpServletResponse
cover: ‘https://cdn.jsdelivr.net/gh/CodeZixuan/Blog_Images/servlet/bg.jpg‘
abbrlink: 10954
date: 2020-10-21 20:12:22
HttpServletReques类
HttpServletReques类的作用
- 每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议解析好封装到Request对象中然后传递到service方法(doGet和doPost)中,可以通过HttpServletRequest对象,获取到所有请求信息
HttpServletRequest类的常用方法
方法名 | 方法作用 |
---|---|
getRequestURI() | 获取请求资源的路径 |
getRequestURL() | 获取请求资源统一定位符(绝对路径) |
getRemoteHost() | 获取客户端的ip地址 |
getParameter() | 获取请求参数 |
getParameterValues() | 获取请求参数(多个值的时候使用) |
setAttribute(key, value) | 设置域数据 |
getAttribute(key) | 获取域数据 |
getRequestDispatcher() | 获取请求转发对象 |
getHeader() | 获取请求头 |
getMethod() | 获取请求方式(GET或POST) |
解决POST请求中文乱码问题
- 需要在获取请求参数之前调用才有效
reques.setCharacterEncoding("UTF-8");
Servlet请求转发
- 当客户端发送请求给Servlet1程序后,Servlet1程序将会查看客户端的请求参数,处理完请求参数后设置一个key值,获取地址到下一个Servlet2程序中。
- Servlet2程序获取请求参数后,查看Servlet1所设置的key值,再处理自己的业务,返回Servlet处理结果给客户端。
中间Servlet1到Servlet2程序之间的过程就叫做请求转发
- Servlet1代码
//获取请求参数
String username = request.getParameter("username");
//设置key值
request.setAttribute("key", "value");
/*
设置Servlet2的路径
请求转发必须以 "/" 开始 /代表地址为 http://ip地址/端口号/工程名/
*/
request.getRequestDispatcher("/servlet2");
//走向Servlet2程序
requestDispatcher.forward(reques, respons);
- Servlet2代码
//获取请求参数
String username = request.getParameter("username");
//查看Servle1的key
request.getAttribute("key");
//处理自己的业务
HttpServletResponse类
HttpServletResponse类的作用
- HttpServletResponse类和HttpServletRequest类一样,每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息,我们如果需要设置返回给客户端的信息都可以通过HttpServletResponse对象来进行设置
两个流的输出说明
- 字节流
getOutputStream();
常用于下载(传递二进制数据) - 字符流
getWrter(); changyongyu 回传字符串
两个流同时只能使用一个否则就会报错
进行流操作的时候出现中文乱码的解决
- 方法一:
// 设置服务器字符集为UTF-8
response.setCharacterEncoding("UTF-8");
// 设置浏览器的字符集
response.setHeader("Content-Tpye", "text/html; charset=UTF-8");
- 方法二:
//会同时设置服务器和客户端都使用相同的字符集,还设置的响应头
response.setContentType("text/html; charset=UTF-8");
此方法必须在获取流之前调用否则会没有作用
请求重定向
请求重定向介绍
- 请求重定向,是指客户端给服务器发送请求,服务器给客户端新的地址,让浏览器去新地址访问(可能之前的地址已经被废弃)
请求重定向实现方法
请求重定向第一种方案
response1
//设置响应状态码
resp.setStatus(302);
//设置响应头 说明新的地址
resp.setHeader("Location", "http://localhost:8080/servlet/response2")
response2将会执行具体的业务
- 请求重定向第二种方案
resp.sendRedirect("http://localhost:8080");
请求重定向的特点
- 浏览器地址栏会发生变化
- 两次请求
- 不共享Request中的数据
- 可以访问工程外的资源
- 不能访问WEB-INF下的资源