response
服务器处理请求的流程:
服务器每次收到请求时,都会为这个请求开辟一个新的线程。
服务器会把客户端的请求数据封装到request对象中,requesr就是请求数据的载体(袋子)
服务器还会创建response对象,这个对象与客户端链接在一起,它可以用来向客户端发送响应(手机)
状态码:
- 200表示成功
- 302重定向
- 400
- 404表示客户端错(访问资源不存在)
- 500表示服务器端错误
响应头: - Context-Type
- Refresh
- Location
案例:
发送302,设置Location头,完成重定向
定时刷新:设置Refresh头
禁用浏览器缓存:Cache-Control,pragma,expires
<meta>标签可以代替相应头
相应体:通常是html,也可以是图片
response的两个流: - ServletOutputStream,用来向客户端发送字节数据
- PrintWriter用来向客户端发送字符数据!需要设置编码
**两个流不能同时使用
案例:
使用PrintWriter发送字符数据
使用ServletOutputStream发送字节数据(图片)
重定向
设置302,设置Location!其中变化的只有Location,所以java提供了一个快捷方法,完成重定向
sendRedirect(String location)方法
sendRedirect()方法
request
回忆一下http协议!请求协议中的数据都可以通过request对象来获取
获取常用信息
获取客户端IP,案例:封IP
请求方式
案例:
通过User-Agent识别用户浏览器类型
防盗链:如果请求不是通过本站的超链接发出的,发送错误的状态码404.Referer
-
通过request来获取url的相关方法
response.getWriter().print(request.getScheme()+ "<br/>");//获取请求协议 response.getWriter().print(request.getServerName()+ "<br/>");//获取服务器名称 response.getWriter().print(request.getServerPort()+ "<br/>");//获取服务器端口号 response.getWriter().print(request.getContextPath()+ "<br/>");//获取项目名称 response.getWriter().print(request.getServletPath()+ "<br/>");//获取Servlet路径 response.getWriter().print(request.getQueryString()+ "<br/>");//获取参数
请求转发和重定向的区别:
- 请求转发是一个请求一次相应,而重定向是两次请求两次相应
- 请求转发地址栏不变化,而重定向会显示后一个请求的地址
- 请求转发只能转发到本项目其他Servlet路径,而重定向需要给出requestRUI,即包含项目名
-
请求转发和重定向效率是转发高!因为是一个请求!
编码
常见字符编码:iso-8859-1(不支持中文),gbk(系统默认编码,中国的国标码),UTF-8(万国码,支持全世界的编码,所以我们使用这个)
相应编码:
路径:
web.xml中<url-pattern>路径,(叫它Servlet路径!)
要么以 * 开头,要么为 / 开头
转发和包含路径
以*开头:相对当前项目路径
不以/开头:相对当前Servlet路径
重定向路径(客户端路径):
以/开头:相对当前主机
与重定向相同,都是客户端路径!需要添加项目名