Servlet
Request
-
功能
获取请求消息数据.- 获取请求行数据.
eg. GET /website/demo1?name=zhangsan HTTP/1.1 1.获取请求方式: GET string getMethod() 2. (重要) 获取虚拟目录: /website string getContextPath( ) 3.获取Servlet路径: /demo1 String getServletPath() 4.获取get方式请求参数: name=zhangsan String getQueryString() 5. (重要)获取请求URL : /website/demo1 string getRequestURI(): /website/demo1 stringBuffer getRequestURL() :http://localhost/website/demo1 URL :统一 资源定位符,要长一些 URI :统一资源标识符,要短一些 6.获取协议及版本: HTTP/1.1 string getProtocol() 7.获取客户机的IP地址: string getRemoteAddr()
2.获取请求头数据.
获取请求头数据:request方法
* 重要: String getHeader(String name):通过请求头的名称获取请求头的值
Enumeration<String> getHeaderNames():获取所有的请求头名称
Enumeration<String> headerNames = req.getHeaderNames();
while (headerNames.hasMoreElements()){
String name = headerNames.nextElement();
String value = req.getHeader(name);
System.out.println(name+" "+value);
}- 请求体数据
* POST请求.
请求体:只有POST请求方式才有请求体,在请求体中封装了POST请求的请求参数。
步骤:
1.获取流对象
BufferedReader getReader():获取字符输入流,只能操作字符数据
ServletInputStream getInputStream():获取字节输入流,可以操作所有类型的数据(在文件上传知识点讲解)
2、再从流对象拿数据
- 获取请求行数据.
-
其他功能
-
获取请求参数(get, post都行)
- String getParameter(String name): 根据参数名称获取参数值.
- String[] getParameterValues(String name): 根据参数名称获取参数值的数组.
- Enumeration<String> getParameterNames(): 获取所有请求的参数名称.
- Map<String, String[]> getParameterMap(): 获取所有参数的map集合.
- 乱码:
输入中文时, get方式不会乱码, post会出现乱码, 可以在获取参数之前, 设置Request的编码: req.setCharacterEncoding("utf-8");
-
请求转发
forward://获取请求转发器对象,该转发器的指向通过getRequestDisPatcher()的参数设置 RequestDispatcher requestDispatcher =request.getRequestDispatcher("资源的URL"); //调用forward()方法,转发请求 requestDispatcher.forward(request,response);
共享数据
request域:
void setAttribute(String name, Object obj) : 存储数据
Object getAttribute(String name) : 获取数据
void removeAttribute(String name) : 移除键值对.获取ServletContext:
ServletContext getServletContext()
-
Response
响应消息
- 响应行.
状态码 :
```
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
```
重定向: resp.sendRedirect("/javaweb/responseDemo2");
- 设置响应行
路径:
获取动态路径: req.getContextPath();
字符输出:(多用于文字)
- 获取字符输出流: PrintWriter writer = resp.getWriter();
- 输出数据: writer.println("<h1>9981</h1>");
防止乱码:
resp.setHeader("content-type","text/html;charset=utf-8");
或
resp.setContentType("text/html;charset=utf-8");
字节输出:(多用于图片)
1. 获取字节输出流: ServletOutputStream outputStream = resp.getOutputStream();
2. 输出数据: outputStream.write("hello".getBytes());
ServletContext
获取:
1. request.getServletContext()
2. this.getServletContext()
功能:
- 获取MIME类型
获取: String getMimeType(String file) - 获取文件的服务器路径
String context.getRealPath(String file); - 用来获取应用的初始化参数相关数据:
getInitParameter和getInitParameterNames