这是今天的一个作业,老师让整理一天的笔记...。你们有何感想么。。。
- ---------------------Response响应头-----------------
- 向浏览器输出字符涉及的编码问题
- //1.getOutputStream();代表的是用字节流实现输出,默认情况下,用本地编码(GBK)
- ServletOutputStream os = response.getOutputStream();
- os.write("中国,你好!".getBytes());//默认编码输出
- //2,用UTF-8输出给浏览器,这时得指定浏览器用UTF-8
- os.write("<meta http-equiv='Content-Type' content='text/html;charset=GBK'>".getBytes());
- os.write("是热天".getBytes());
- //3,设置头
- response.setHeader("Content-Type", "text/html;charset=UTF-8");
- os.write("ssdfe广东省".getBytes("UTF-8"));
- 下载
- //设置头信息
- //response.setHeader("Content-Disposition","attachment;filename=3.jpg");
- //如果下载文件名有中文时的解决方案
- response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode("没是","UTF-8"));
- response.setHeader("Content-Type","application/octet-Stream");
-
- //获取绝对路径
- String path = getServletContext().getRealPath("/WEB-INF/classes/没事.jpg");
- //获取输入输出流
- InputStream is = new FileInputStream(path);
- OutputStream os = response.getOutputStream();
- int len = -1;
- byte[] b = new byte[1024];
- while((len = is.read(b))!=-1)
- os.write(b,0,len);
-
- is.close();//关闭
- 设置不要缓存
- response.setHeader("Expires", -1);
- response.setHeader("Cache-Control", "no-cache");//1.0
- response.setHeader("Prama", "no-cache");//1.1
- 设置过期时间
- response.setDateHeader("Expires",System.currentTimeMillis()*3600*1000);//单位长整形,毫秒
- 重定向
- 特点:
- 1,相当于对服务器发送了两次数据
- 2,保存在response域中的数据不能共享
- resoponse.sendRedirect("work/1.html");//只能是绝对路径,因为是给浏览器用的
- 刷新页面
- //设置浏览器编码
- response.setContentType("text/html;charset=GBK");
- response.getWrite().write("两秒后将跳转至主页");
- //设置刷新时间与跳转地址
- response.setHeader("Refresh","2;URL=/work/1.html");
- 字符编码解码:URLEncoder(编码) URLDecoder(解码)
- String str = "职工";
- String afterStr = URLEncoder.encode(str,"GBK"); //编码
- String restr = URLDecoder.decode(afterStr,"GBK");//解码
- --------------------------Request-----------------------------------------------
- 方法摘要
- String ip = request.getRemoteAddr();//得到客户端的IP
- String myip = request.getLocalAddr();//服务器ip
-
- String url = request.getRequestURL().toString();//协议+主机+资源地址
- String uri = request.getRequestURI();//资源地址
- String method = request.getMethod();//客户端请求类型
- String queryString = request.getQueryString();//只接受get请求,请求参数
-
- System.out.println("客户端的IP: "+ip);
- System.out.println("服务器ip: "+myip);
- System.out.println("协议+主机+资源地址: "+url);
- System.out.println("资源地址: "+uri);
- System.out.println("客户端请求类型: "+method);
- System.out.println("至接受get请求,请求参数: "+queryString);
-
- //-----------------获取请求头的信息--------------------
- String request.getHeader("Accept-Encoding");//得到一个请求头的值
- Enumeration request.getHeaders(str);//得到一个请求头,所对应的多个值的写法
- Enumeration request.getHeaderNames(str);//得到客户端发过来的所有请求头信息
- 浏览器访问方式:http://localhost:8080/work/servlet/MethodServletTest1?name=sdf;name=er,pwd=df,dsg=324
- 输出结果
- 客户端的IP: 0:0:0:0:0:0:0:1
- 服务器ip: 0:0:0:0:0:0:0:1
- 协议+主机+资源地址: http://localhost:8080/work/servlet/MethodServletTest1
- 资源地址: /work/servlet/MethodServletTest1
- 客户端请求类型: GET
- 至接受get请求,请求参数: name=sdf;name=er,pwd=df,dsg=324
- 查看浏览器支持的压缩方式
- String ae = request.getHeader("Accept-Encoding");
-
- if(ae.contains("deflate"))
- System.out.println("支持deflate压缩:"+ae);
- else
- System.out.println("不支持deflate压缩:"+ae);
- //输出结果:支持deflate压缩:gzip,deflate,sdch
- 得到一个请求头,所对应的多个值的写法
- Enumeration<String> emunss = request.getHeaders("Accept-Encoding");
- while (emunss.hasMoreElements()) {
- String string = (String) emunss.nextElement();
- System.out.println(string);//结果:gzip,deflate,sdch
-
- //得到所有请求头以及它们的值,请加以下语句
- //System.out.println(request.getHeader(string));
- }
- 去请求头参数的值
- String username = request.getParameter("username");
- 取多个值
- String []pwd = request.getParameterValues("password");
- 获取请求头提交的多个信息,封装至对象中
- //需要导jar包
- User user = new User();
- System.out.println("封装前:"+user);
- BeanUtils.populate(user, request.getParameterMap());
- System.out.println("封装后:"+user);
- 上传文件时,用post提交
- InputStream iStream = request.getInputStream();
- int len = -1;
- byte[] b = new byte[1024];
- while ((len = iStream.read(b))!=-1)
- System.out.println(new String(b,0,len));
-
- iStream.close();
- 请求头设置编码格式
- request.setCharacterEncoding("UTF-8");
- 域对象
- request.setAttribute(key,value)
- request.getAttribute(key)
- request.removeAttribute(key);
- getServletContext()中的转发与reqeust 中的转发
- //ServletContext中的转发只能写绝对路径,而request中的转发可以是绝对路径也可以相对路径
- 重定向(2次请求地址栏会变,request域中数据不能传递,可以重定向到别的应用)
- (响应头)response.sendRedirect("绝对路径");
- 转发属于本次请求(服务器在转,地址栏不变,是一次请求,request域中数据能传递,只适应于本应用),包含也是一样
- 为什么不会输出源中的在网页打印的数据,因为在转发时会先将源对象中的数据清空
- 转发之后的代码会继续执行
- request.setAttribute("p","pp");
-
- RequestDispatcher rd = request.getRequestDispatcher("绝对路径or相对路径");
- rd.forward();
- //rd.include();
- forward() 不会输出源中的在网页打印的数据,因为在转发时会先将域中数据清空
- include() (包含)会输出源中网页打印的数据
复制代码 |
|