• Request和Response方法总结
  • 方法
  • 常见用法
  • 获取请求参数
  • 读取get方式提交的数据
  • 读取post方式提交的数据
  • 获取表单参数
  • 获取打印流
  • 中文乱码问题
  • 重定向
  • 刷新
  • 转发
  • Cookie
  • Session



Request和Response方法总结

方法

request

功能

getQueryString()

获取请求参数

getMethod()

获取请求类型

getContextPath()

返回当前web项目相对路径

getInputStream()

读取提交的数据流

getCookies()

获取所有Cookie,返回一个Cookie数组

getParameter()

获取元素

getParameterNames()

获取所有请求参数,返回一个Enumeration枚举类

getAttribute()

获取域中存储的数据

getAttributeNames()

获取域中所有数据,返回一个Enumeration枚举类

getSession()

获取Session对象

getRequestDispatcher()

获取转发器,参数路径以/打头,代表当前web项目根目录(转发)

setCharacterEncoding()

在post里解决中文乱码

setAttribute()

在Request域中存储数据

getRequestURL()

返回全路径

getRequestURI()

返回除去host(域名或者IP)部分

getHeader()

获取请求头

getHeaderNames()

获取请求头所有值,返回一个Enumeration枚举类

response

功能

setContentType()

中文乱码处理

setCharacterEncoding()

在post里解决中文乱码

setStatus()

设置状态码

setHeader()

设置消息头

getWriter()

获取通向浏览器的字符流(打印流)

getOutputStream()

获取通向浏览器的字节流(打印流)

addCookie()

通过响应添加Cookie

sendRedirect()

重定向


常见用法

获取请求参数


//获取请求的资源
System.out.println(request.getRequestURL());
System.out.println(request.getRequestURI());

//获取请求的方式
System.out.println(request.getMethod());

//获取请求头对应的值
String header = request.getHeader("Host");
System.out.println(header);

//获取请求头中所有的值,返回一个Enumeration枚举类
Enumeration<String> headerNames = request.getHeaderNames();
//Enumeration接口(枚举),调用nextElement()方法得到Enumeration枚举对象中的所有元素
while(headerNames.hasMoreElements()){
  String head = headerNames.nextElement();
  System.out.println(head);
}
读取get方式提交的数据
//获取请求参数
String queryString = request.getQueryString();
System.out.println(queryString);
读取post方式提交的数据
//获取请求数据流
ServletInputStream inputStream = request.getInputStream();
byte[] bytes = new byte[1024];
int len = inputStream.read(bytes);
String string = new String(bytes, 0, len);
System.out.println(string);
获取表单参数
//get和post方式都可以用该方法获取表单参数
//tomcat8下,get方式下,使用getParameter方法,中文不会乱码
String name = request.getParameter("name");
String pwd = request.getParameter("password");
System.out.println(name);
System.out.println(pwd);
获取打印流
//获取打印流的对象
PrintWriter writer = response.getWriter();
String html = "<html>";
html += "<head>";
html += "</head>";
html += "<body>";
html += "你好";
html += "</body>";
html += "</html>";
writer.write(html);
writer.close();

中文乱码问题

//get提交方式,解决中文乱码问题
URLDecoder.decode(queryString, "utf-8");

//post提交方式,解决中文乱码问题
//tomcat内部使用的是iso-8859-1的编码
request.setCharacterEncoding("utf-8");

//
String name = request.getParameter("name");
name = new String(name.getBytes("iso-8859-1"), "utf-8");

//解决响应的中文乱码问题   服务器发送给浏览器的内容的编码
response.setContentType("text/html;charset=utf-8");

重定向

//设置重定向使用的状态码
response.setStatus(302);
//设置重定向的url
response.setHeader("location", "/index.html");

//ServletApps为项目名在这里表示路径
response.sendRedirect("/ServletApps/MyServlet");
response.sendRedirect("index.html");

//重定向时,不能共享request域中的数据
request.setAttribute("id", 10);
//跳转到指定路径
//推荐如下写法
response.sendRedirect(request.getContextPath() + "/RedirectServlet");
---------------------------------------------------
//RedirectServlet.java
//获取request域中的数据
int id = (Integer)request.getAttribute("id");
//打印流打印数据
response.getWriter().write("RedirectServelt:" + id);

刷新

//定时刷新,每隔一秒刷新一次
response.setHeader("refresh", "1");
//指定时间(秒)后,跳转到另外的界面
response.setHeader("refresh", "3;url=/ServletApps/index.html");

转发

//request域
//向request域中写入数据
request.setAttribute("age", 10);
//转发
request.getRequestDispatcher("/ForwardServlet").forward(request, response);
----------------------------------------------------------------
//ForwardServalet.java
//获取request域中的数据
int age = (int)request.getAttribute("age");
//打印流打印数据
response.getWriter().write("ForwardServlet:" + age);

Cookie

//创建Cookie对象
Cookie cookie = new Cookie("name", "zhangsan");
//如果有相同的name值的Cookie,后一个会替换前一个Cookie内容
//Cookie中的name和value都是字符串类型
//Cookie中不能出现中文
Cookie cookie1 = new Cookie("name", "lisi");

//通过响应将Cookie数据发送到浏览器
response.addCookie(cookie);

//获取请求中的Cookie数据
Cookie[] cookies = request.getCookies();
if(cookies != null){
  for(Cookie cookie2 : cookies){
    //获取Cookie的name和对应的value
    System.out.println(cookie2.getName());
    System.out.println(cookie2.getValue());
  }
}

Session

//根据Session的id查找服务器是否有对应的Session对象,如果有返回Session对象;如果没有创建Session对象
//创建Session对象后,会将JSESSIONID以Cookie的形式存在浏览器
HttpSession session = request.getSession();
//Session的id,唯一的(JSESSIONID)
String id = session.getId();
System.out.println(id);

//默认情况下,JSESSIONID的过期时间是会话结束时,为了能正常访问Session对象,需要手动将JSESSIONID存储到Cookie中,并设置一个合适的过期时间
Cookie cookie = new Cookie("JSESSIONID", id);
cookie.setMaxAge(60);
response.addCookie(cookie);