1.HttpServletRequest和HttpServletResponse: 访问某个servlet的时候,方法调用之前就创建好了. servey方法结束后就销毁
servlet是单实例,只创建一次. 而server方法多线程,每次访问执行一个单独的servey,每次都创建一个request和reponse
2.request常用方法:
请求行:
getMethod()//GET
getRequestURL();全路径
getRequestURI();项目名称下的路径
getContextPath();得到项目名称 重点
请求消息头
getHeader(name); 根据头名称得到头信息值
getHeaderNames(); 得到所有头信息 枚举
getHeaders(name); 根据头名称得到相同头名称信息值 枚举
请求正文
获取表单数据的方法
getParameter("userName");
getParameterValues(name);
getParameterNames();
getParameterMap();
getInputStream();上传文件的时候以流的方式获取数据
非表单数据
setAttribute(String name, Object value);
Object getAttribute(name);
removeAtribute(name);
转发
getRequestDispatcher(path).forward(request,response);
包含
getRequestDispatcher(path).include(request,response);
解决乱码:
request.setCharacterEncoding("UTF-8");//只能解决post方式的乱码
new String(name.getBytes("ISO-8859-1"),"UTF-8");
页面--转发--servlet1--转发--servlet2
这个叫一次请求,servlet2能访问到页面表单中的数据(forward将request传递下去了)
如果说servlet1验证用户名密码后, 从数据库取出邮箱, 想传下去到2,那么request.setAttribute,这就叫操作非表单数据(邮箱来自数据库查询,不是来自页面的表单)
3.response相关方法 从服务器到浏览器
response.setContentType("text/html;charset = UTF-8");
setStatus(int);
输出
getWriter();
getOutputStream();
重定向
response.sendRedirect(request.getContextPath+path);