服务器每次收到请求都会开辟新线程,把客户端请求数据放到request,还会创建response给客户端发送响应。
HttpServletResponse:常用方法setHeader(String,String),setStatus(int),
重定向:setHeader("Location","requesturi")&setStatus(302) sendRedirect(String)
刷新:setHeader("Refresh","3;requesturi")
getWriter和getOutputStream方法互斥,一起用会抛出IllegalStateException
HttpServletRequest:常用方法 getRemoteAddr(),getHeader(String)
获取请求URL http://localhost:8080/day10/AServlet?username=zhangsn&password=123
getScheme() 协议 http getServerName() 服务器名 localhost getServletPort端口 8080 getContextPath()项目名/day10 getServletPath()Servlet路径/AServelt getQueryString()参数username=zhangsn&password=123 getRequestURI():/项目名+/servlet路径 getRequestURL():不含参数的全部
获取请求参数:getParameter(String)单个,getParamaterValues (checkbox) getParameterMap()所有请求参数
***Map hobby=request.getParameterMap();
for (String s1 : hobby.keySet()) {
String[] value=hobby.get(s1);
out.print(s1+":"+Arrays.toString(value));}
请求转发,请求包含区别:转发forward 包含include。转发AServlet留头不留体,包含AServlet留头留体.
请求转发和重定向区别:
1.请求转发一次请求一次响应 2.请求转发地址栏不变化 3.request.getRequestDispatcher("/Servlet名").forward(req,res) 只能转发到本项目 4.请求转发是服务器行为,只需给出Servlet路径
1.重定向2次请求2次响应 2.重定向后地址栏会发生改变 3.response.sendRedict("/项目名/servlet路径")或可以重定向到http网页
编码问题:
response.setCharsetEncoding("utf-8")表示以utf-8的编码编写
response.setHeader("Content-Type":"text/html;charset=utf-8")告诉浏览器服务器使用的是什么编码
***response.setContentType("text/html;charset=utf-8")
post请求:在获取参数前调用request.setCharacterEncoding("utf-8")
get请求:String name=request.getParamater("name"); byte[] bytes=name.getBytes["iso8859-1"]; name=new String(bytes,"utf-8")