HttpServletResponse
response.sendError(500, "不让你看!")
//发送错误状态码
response.setHeader("Location", "/day10_01/CServlet");
response.setStatus(302);
//完成重定向
response.sendRedirect("http://www.baidu.com");
//重定向便捷方式
response.getWriter().print("5秒后自动刷新");
response.setHeader("Refresh", "5;URL=/day10_01/CServlet");
//定时刷新
response.setHeader("Cache-Control", "no-cache");
response.setHeader("pragram", "no-cache");
response.setDateHeader("expires", -1);
//禁用浏览器缓存
String path = "F:/001.jpg";
FileInputStream fileInputStream = new FileInputStream(path);
byte[] by = new byte[1024];
int lens = 0;
while((lens=fileInputStream.read(by))!=-1){
response.getOutputStream().write(by, 0, lens);
}
fileInputStream.close();
response.getOutputStream().close();
//读取一张图片到浏览器
HttpServletRequest
System.out.println(request.getRemoteAddr());
//获取Ip
System.out.println(request.getMethod());
//获取请求方式
System.out.println(request.getHeader("User-Agent"));
//获取用户浏览器信息
String referer = request.getHeader("Referer");
//获取请求头
if(referer==null||!referer.contains("localhost")){
response.sendRedirect("https://www.baidu.com");
}else{
System.out.println("嘿嘿");
}
//防盗链原理
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/>");//获取参数部分
//username=xxx&password=yyy
response.getWriter().print(request.getRequestURI() + "<br/>");//获取请求URI
///day10_2/AServlet
response.getWriter().print(request.getRequestURL() + "<br/>");//获取请求URL
//http://localhost:8080/day10_2/AServlet
String u = req.getParameter("username");
String p = req.getParameter("password");
String[] h = req.getParameterValues("hobby");
System.out.println("username="+u+" password="+p+" hobby="+Arrays.toString(h));
//获取请求参数
String getParameter(String name)
//获取指定名称的请求参数值,适用于单值请求参数
String[] getParameterValues(String name)
//获取指定名称的请求参数值,适用于多值请求参数
Enumeration<String> getParameterNames()
//获取所有请求参数名称
Map<String,String[]> getParameterMap()
//获取所有请求参数,其中key为参数名,value为参数值。
* 请求转发和请求包含
RequestDispatcher rd = request.getRequestDispatcher("/MyServlet"); 使用request获取RequestDispatcher对象,方法的参数是被转发或包含的Servlet的Servlet路径
请求转发:*****rd.forward(request,response);
请求包含:rd.include(request,response);
有时一个请求需要多个Servlet协作才能完成,所以需要在一个Servlet跳到另一个Servlet!
> 一个请求跨多个Servlet,需要使用转发和包含。
> 请求转发:由下一个Servlet完成响应体!当前Servlet可以设置响应头!(留头不留体)
> 请求包含:由两个Servlet共同未完成响应体!(都留)
> 无论是请求转发还是请求包含,都在一个请求范围内!使用同一个request和response!
request域
Servlet中三大域对象:request、session、application,都有如下三个方法:
- void setAttribute(String name, Object value)
- Object getAttribute(String name)
- void removeAttribute(String name);
-
> 同一请求范围内使用request.setAttribute()、request.getAttribute()来传值!前一个
Servlet调用setAttribute()保存值,后一个Servlet调用getAttribute()获取值。请求转发和重定向的区别
> 请求转发是一个请求一次响应,而重定向是两次请求两次响应
> 请求转发地址栏不变化,而重定向会显示后一个请求的地址
> 请求转发只能转发到本项目其他Servlet,而重定向不只能重定向到本项目的其他Servlet,还能定向到其他项目
> 请求转发是服务器端行为,只需给出转发的Servlet路径,而重定向需要给出requestURI,即包含项目名!
> 请求转发和重定向效率是转发高!因为是一个请求!
<> 需要地址栏发生变化,那么必须使用重定向!
<> 需要在下一个Servlet中获取request域中的数据,必须要使用转发!