目录
request
请求报文的结构
常用方法
servlet实例
乱码问题
防盗链
response
响应报文的结构
常用方法
servlet实例
乱码问题
禁止缓存
总结
Request 对象
Response 对象
request对象是服务器对浏览器请求的封装,而response是服务器对服务器响应的封装。 request用来取出请求信息,而response则用来添加要返回给浏览器的信息。
request就是将请求报文封装而成的对象,所以通过request能获得请求文本中的所有内容,请求头、请求体、请求行 。
getRequestURL() //获取的完整的URL,即统一资源定位符
getRequestURI() //获取资源的名字,即统一资源标识符
getQueryString() //获取一个url参数部分
getRemoteAddr() //返回的是客户端的ip地址
getRemoteUser() //返回的是客户端的用户
getRemotePort() //返回的是客户端的主机的端口号
getRemoteHost() //返回的是客户端的主机地址
getCookie() //获取Cookie对象
getSession() //获取Session对象
getLocalName() //获取Web服务器主机的名字
getServletContext() //获取上下文对象的
setCharacterEncoding() //设置编码集的
getParameter() //获取前端传过来的数据
setAttribute() //将数据设置给request对象
geAttribute() //获取request对象中的数据
package com.by.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class RequestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws Exception {
doGet(request, response);
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws Exception{
//获取一个完整的url
//http://localhost:8080/01_servlet_HelloWorld_war/request1
System.out.println(request.getRequestURL());
//获取资源的名字
//比如:http://localhost:8080/day42_xkh/request1
System.out.println(request.getRequestURI());///01_servlet_HelloWorld_war/request1
//获取一个url的参数部分
//比如 http://localhost:8080/01_servlet_HelloWorld_war/request1?username=goudan
System.out.println(request.getParameter("username"));
//获取前端传送过来的数据
request.setCharacterEncoding("utf-8");//设置请求的编码集
//给request这个对象设置数据
request.setAttribute("name","狗蛋");
//获取request对象的值
request.getAttribute("name");
//获取上下文对象
ServletContext servletContext = request.getServletContext();
//转发
request.getRequestDispatcher("target.jsp").forward(request,response);
}
}
request
com.by.servlet.RequestServlet
request
/context
request.setCharacterEncoding("utf-8"); //设置request对象的解码方式
在平时的使用当中,我们会发现下载文件的时候会有一个下载地址,有的人直接将这个地址复制到其他地方,然后贴上下载,就盗取了别人的资源,这种白嫖行为我们就称之为盗链。
我们可以利用request来防范这种白嫖行为,我们只需要在下载页面做下简单的来源判断。如果不是来自本站的连接,则直接拒绝访问。
//获取请求来源
String referer = request.getHeader("referer");
//判断这个来源是否是自己认可的
if(referer.euqals(...)){
...
}else{
response.getWriter.print("休想白嫖");
}
Tomcat传给Servlet时,它还是空的对象。Servlet逻辑处理后得到结果,最终通过response.write()方法,将结果写入response内部的缓冲区。Tomcat会在servlet处理结束后,拿到response,遍历里面的信息,组装成HTTP响应发给客户端。
HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。
setHeader() //设置响应头的参数
setContentType() //设置字符编码集
getWriter() //获取字符输出流对象
addCookie() //对浏览器新增一个Cookie
sendRedirect() //重定向
package com.by.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ResponseServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws Exception{
/**************乱码问题*****/
//方式一
response.setCharacterEncoding("utf-8");//设置 HttpServletResponse使用utf-8编码
response.setHeader("Content-Type",
"text/html;charset=utf-8");//通知浏览器使用utf-8解码
//方式二
response.setContentType("text/html;charset=utf-8;aaa=bbb"); //包含方法一的两个功能
//向客户端发送响应数据
response.getWriter().write("hello");
/************重定向***********/
//方式一
//在响应头中添加302状态码,告诉浏览器需要进行重定向
response.setStatus(302);
//在响应头中添加Location,指定重定向的位置
response.setHeader("Location", "http://www.baidu.com");
//方式二
response.sendRedirect("http://www.baidu.com"); //包含方法一的两个功能
}
}
response
com.by.servlet.ResponseServlet
response
/response
方法一:
response.setCharacterEncoding("utf-8"); //设置 HttpServletResponse使用utf-8编码
response.setHeader("Content-Type", "text/html;charset=utf-8"); //通知浏览器使用utf-8解码
方法二:
response.setContentType("text/html;charset=utf-8"); //包含方法一的两个功能
有时候我们想让用户端不缓存html,css,js等资源,我们可以通过对response头进行一定的设置来实现这样的功能,代码如下:
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", -1);
Request 对象 |
Response 对象 |
|
用途 |
|
|
功能 |
|
|
主要方法 |
|
|
相互作用 |
|
|
生命周期 |
|