1.HttpServletRequest
主要作用是用来接受客户端发送过来的请求信息
1). 常用方法
//获取客户端发出请求时的完整URL
String strUrl = request1.getRequestURI() + " ";//加" "是为了防止空指针异常
//获取请求行中的资源名称部分(项目名称开始)
String strUrI = request1.getRequestURI() + " ";
//获取请求行中的参数部分
String strQuery = request1.getQueryString() + " ";
//获取客户端的请求方式
String strMethod = request1.getMethod() + " ";
//获取http版本号
String strPro = request1.getProtocol() + " ";
//获取webapp名字
String strCon = request1.getContextPath();
2). 获取请求头
//获取请求头的站点名
request.getHeader("host");
//获取请求头名称的枚举集合
Enumeration<String> enumerations = request.getHeaderNames();
while (enumerations.hasMoreElements()) {
String string = (String) enumerations.nextElement();
System.out.println(string);
}
3).针对请求乱码解决
POST请求:Tomcat8及以上和Tomcat7及以下版本都会乱码
GET请求:Tomcat8及以上不会乱码,Tomcat7及以下会乱码
方法一
//设置请求的编码 (只针对于POST请求有效,必须在接收所有的数据之前设定)
request.setCharacterEncoding("UTF-8");
方法二
new String(request.getParameter("参数名").getBytes("ISO-8859-1"),"UTF-8");
//无论是GET请求还是POST请求都适用。一次只能处理一个参数
方法三(推荐)
response.setContentType("text/html;charset=UTF-8");
4).获取客户端请求参数
//获取指定名称的参数(必须掌握)
req.getParameter("uname");
5)请求转发
请求转发,是一种服务器行为,当客户端请求到达后,服务器进行转发,此时会将对象进行保存,地址栏中的URL地址不会改变,得到响应后,服务器再将响应发送给客服端,从始至终只有一个请求发出
//转发到ser04
request.getRequestDispatcher("ser04").forward(request,response)
6)request作用域对象
//设置request域对象
request.setAttribute("user1");
//移除域对象
request.removeAttribute("user1");
//获取域对象的值
request.getAttribute("user1");
2.HttpServletResponse
1).常用方法
//添加指定的键值到响应头信息中
response.addHeader("name", "admin");
//获取输出字节流
response.getWriter()
//获取输出的字节流
response.getOutputStream()
2).页面刷新和自动跳转
//刷新
response.setHeader("refresh","2");
//自动定时跳转
response.setHeader("refresh","3;URL=http://www.baidu.com");
3).数据响应
//两者不能同时使用
//制衡获取字符流
PrintWriter writer = resp.getWriter();
writer.write("<h4>Hello Servlet</h4>");
//能响应一切数据
OutputStream outputStream = resp.getOutputStream();
outputStream.write("<h4>Hello MyServlet</h4>".getBytes());
4).响应图片
// 设置响应类型
resp.setContentType("image/jpeg");
// 得到项目在服务器中的真实路径
String path = req.getServletContext().getRealPath("/");
// 得到图片的存放路径
String filePath = path + "/WEB-INF/jay.jpg";
// 通过路径得到file对象
File file = new File(filePath);
// 判断文件是否存在并且是一个标准文件
if (file.exists() && file.isFile()) {
// 得到输出流
ServletOutputStream out = resp.getOutputStream();
// 得到file对象的输入流
InputStream in = new FileInputStream(file);
// 输出
byte[] car = new byte[1024];
int len = 0;
while((len = in.read(car)) != -1) {
out.write(car, 0, len);
}
// 关闭资源
out.flush(); // 刷新流
in.close();
out.close();
} else {
System.out.println("文件不存在!");
}
5).重定向
请求转发(request.getRequestDispatcher().forward()) | 重定向(response.sendRedirect()) |
---|---|
一次请求,数据在request域中共享 | 两次请求,request域中数据不共享 |
服务端行为 | 客户端行为 |
地址栏不会发生变化 | 客户端发生变化 |
地址定位到站点后 | 地址栏发生变化 |
//请求转发
req.getRequestDispatcher("index.html").forward(req, resp);
//重定向
resp.sendRedirect("index.html");