常用方法 | 描述 |
---|---|
getRequestURL() | 获取客户端发出的请求时的完整 URL |
getRequestURI() | 获取请求行中的资源名称部分(项目名称开始) |
getQueryString() | 获取请求行中的参数部分 |
getMethod() | 获取客户端请求方式 |
getProtocol() | 获取 HTTP 版本号 |
getContextPath() | 获取 webapp 名字 |
方法 | 描述 |
---|---|
getHeader(String) | 获取单个请求头内容 |
Enumeration getHeaderNames() | 获取所有的请求头名称集合 |
方法 | 描述 |
---|---|
getParameter(name) | 获取指定名称的参数 |
getParameterValues(String name) | 获取指定名称参数的所有值 |
getParameterNames() | 获取一个包含请求消息中的所有参数名的 Enumeration 对象 |
getParameterMap() | 返回一个保存了请求信息中的所有参数名称和值的Map对象 |
https://blog.csdn.net/L6_6LXXX/article/details/100549484
请求转发,是一种服务器的行为,当客户端请求到达后,服务器进行转发,此时会将请求对象进行保存,地址栏中的 URL 地址不会改变,得到响应后,服务器端再将响应发送给客户端,从始至终只有一个请求发出。
request.getRequestDispatcher("转发的路径").forward(request,response);
通过该对象可以在一个请求中传递数据
在一次请求中有效及服务器跳转无效,
注:经过请求转发,request域中的数据仍然存在。
request.setAttribute(String name, Object o); // 设置域对象内容
request.getAttribute(String name); // 获取域对象内容
request.removeAttribute(String name); //删除域对象内容
常用方法 | 描述 |
---|---|
addHeader(String name, String value) | 添加指定的键值到响应头信息中 |
containsHeader(String name) | 判断响应的头部是否被设置 |
encodeURL(String url) | 编码指定的 URL |
sendError(int sc) | 使用指定状态码发送一个错误到客户端 |
setHeader(String name, String value) | 设置指定响应头的值 |
setStatus(int sc) | 给当前响应设置状态 |
setContentType(String ContentType) | 设置响应的 MIME 类型 |
getWriter() | 获取输出字符流 |
getOutputStream() | 获取输出的字节流 |
response.setHeader("refresh","2");//在请求头中添加定时刷新信息,单位为秒
response.setHeader("refresh","3;URL=跳转页面的地址");//但该方法返回后刷新就无法跳转了
一般采用 HTML 的方式进行设置
<meta http-equiv="refresh" content="3;http://www.baidu.com" />
PrintWriter out = resp.getWriter();
out.write("Hello World
");
ServletOutputStream out = resp.getOutputStream();
out.write("Hello World
").getBytes());
1. 字符流只能响应字符
2. 字节流能响应一切(图片等等)
3. 两者不能同时使用
保证发送端和接收端的编码一致
response.setContentType("text/html;charset=utf-8");
要想解决响应的乱码,只需要保证使用支持中文的编码格式。并且保证服务器端 和客户端使 用相同的编码方式即可。
在客户端解析资源时默认是以文本(text/html)的形式,当响应图片时需要指定响应头信息,告知客户端响应内容为图片形式,使用一种叫做 MIME 类型的东西来指定。MIME 类型见 Tomcat 的 web.xml 文件。
如下(只截取了一部分):
<mime-mapping>
<extension>jpegextension>
<mime-type>image/jpegmime-type>
mime-mapping>
<mime-mapping>
<extension>jpgextension>
<mime-type>image/jpegmime-type>
mime-mapping>
<mime-mapping>
<extension>jpgmextension>
<mime-type>video/jpmmime-type>
mime-mapping>
<mime-mapping>
<extension>jpgvextension>
<mime-type>video/jpegmime-type>
mime-mapping>
<mime-mapping>
<extension>jpmextension>
<mime-type>video/jpmmime-type>
mime-mapping>
代码
//通过输入流读取图片,然后通过输出流输出图片
//设置响应字符集
response.setContentType("text/html;charset=utf-8");
// 获取用户请求图片名称参数
String imageName = request.getParameter("imageName");
// 判断参数
if(imageName == null || "".equals(imageName)){
response.getWriter().write("请告诉我你要看啥图片");
return;
}
// 获取图片路径
String realPath = request.getServletContext().getRealPath("/WEB-INF/image/");
System.out.println(realPath);
System.out.println(realPath + imageName);
// 得到图片
//路径无法确定
//File file = new File("E:/Journey/Mage/class/06middle/code/servletResponse/WebContent/image/timg.jpg");
File file = new File(realPath + imageName);
// 判断是否存在并且是否是文件
if(file != null && file.isFile()){
// 判断用户访问的图片类型
String imageType = imageName.split("\\.")[1];
if("jpg".equals(imageType) || "jpeg".equals(imageType)){
response.setContentType("image/jpeg;charset=utf-8");
}else if("png".equals(imageType)){
response.setContentType("image/png;charset=utf-8");
}else if("gif".equals(imageType)){
response.setContentType("image/gif;charset=utf-8");
}
// 是文件
// 获取输入流
FileInputStream in = new FileInputStream(file);
// 获取字节输出流
ServletOutputStream out = response.getOutputStream();
// 响应图片
// 创建字节数组
byte[] car = new byte[1024];
int len = 0;
while((len = in.read(car)) != -1){
out.write(car, 0, len);
}
// 关闭
in.close();
out.close();
}else{
// 不是文件或者不存在
response.getWriter().write("请输入正确的图片名称");
return;
}
重定向是一种服务器指导客户端的行为。客户端发出第一个请求,被服务器接收,经过处理服务器进行响应,与此同时,服务器给客户端一个地址(重定向跳转请求的地址response.sendRedirect(“url”);),当客户端接收到响应后,立刻、马上、自动根据服务器给的地址进行第二个请求的发送,服务器接收请求并作出响应,重定向完成。从描述中可以看出重定向当中有两个请求存在,并且属于客户端行为
response.sendRedirect("index.html")
相对当前资源的路径
以 http:// 开头,只有客户端跳转才能使用,此时需要写出资源的完整路径
以 / 开头,则是绝对到端口后的
浏览器中:“/”代表的是 http://主机|IP:端口 (重定向)
服务器中:“/”代表的是 http://主机|IP:端口/站点名 (请求转发)
// 创建Cookie对象
new Cookie(“key”,”value”);
// 响应给客户端
response.addCookie(cookie);
// 获取客户端的Cookie数组
Cookie[] cookies = req.getCookies();
// 判断是否为空
if(cookies != null && cookies.length > 0){
// 遍历
for (Cookie cookie : cookies) {
// 获取键名
String name = cookie.getName();
// 获取键值
String value = cookie.getValue();
System.out.println("键:" + name + ",值:" + value);
}
}
setMaxAge(int expiry);
负整数:cookie 的 maxAge 属性的默认值就是 -1,表示只在浏览器内存中存活,一旦关闭浏览器窗口,那么 cookie 就会消失。
正整数:表示 cookie 对象可存活指定的秒数。当生命大于 0 时,浏览器会把 Cookie 保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie 也会存活相应的时间。
零:cookie 生命等于 0 是一个特殊的值,它表示 cookie 被作废!也就是说,如果原来浏览器已经保存了这个 Cookie,那么可以通过 Cookie 的 setMaxAge(0) 来删除这个 Cookie。 无论是在浏览器内存中,还是在客户端硬盘上都会删除这个 Cookie。