刚学
Request
在客户端上显示一段文字
response.setContentType("text/html;charset=UTF-8");告诉服务端和客户端要显示的字符编码: text/html;charset="UTF-8"
//浏览器的默认编码是IOS-8859-1,是tomcat规定的 // response.setCharacterEncoding("UTF-8"); //告诉服务器应当用UTF-8文本 //告诉浏览器应当使用UTF-8的编码 // response.setHeader("content-type","text/html;charset=UTF-8"); //告诉服务器和客户端用GBK解析文本 // response.setContentType("text/html;charset=GBK"); // PrintWriter out = response.getWriter(); //得到一个字符输出流 // out.write("你好吗,老铁。我终于到这了!");//在客户端上显示的消息 //字节输出流 ServletOutputStream outputStream = response.getOutputStream(); //getBytes使用的是操作系统的默认编码,我的系统是GBK response.setContentType("text/html;charset=UTF-8"); outputStream.write("你好吗,老铁!".getBytes("UTF-8"));重新定向问题
即使当服务器向客户端发送要求,要有2次请求
/dome5地址请求后到了/dome6
System.out.println("A: 我有件事想找您办一下"); System.out.println("B: 这件事,我办不了,但我可以告诉你谁能办"); response.setStatus(302);//告诉客户端重新定向的资源 // response.setHeader("localhost","/threeweb/dome6"); response.sendRedirect("/threeweb/dome6");
/dome6
System.out.println("C:好的,这件事我可以帮你办了");
文件下载
//文件下载 //第一步,通过路径得到一个输出流 String path = this.getServletContext().getRealPath("/WEB-INF/classes/美女h.jpg"); FileInputStream fis = new FileInputStream(path); //创建字节输出流 ServletOutputStream sos = response.getOutputStream(); //得到要下载的文件名 String filename = path.substring(path.lastIndexOf("\\")+1); //设置文件编码 filename = URLEncoder.encode(filename,"UTF-8");//将不安全的文件名改为UTF-8格式 //告知客户端要下载文件 response.setHeader("content-disposition","attachment;filename="+filename); response.setHeader("content-type","image/jpeg"); //执行输出操作 int len =1; byte[] b = new byte[1024]; while ((len=fis.read(b))!=-1) { sos.write(b,0,len); } sos.close(); fis.close();
重点
response.setHeader("content-disposition","attachment;filename="+filename); response.setHeader("content-type","image/jpeg");实现刷新跳转
response.setContentType("text/html;charset=UTF-8"); // response.setIntHeader("refresh",1);//设置1秒钟刷新一次 // Random r = new Random(); // response.getWriter().write(r.nextInt()+""); response.getWriter().write("注册成功,3秒后到主页"); //设置3秒后跳转,且;后面的是要跳转的网址 response.setHeader("refresh","3;url=/threeweb/dome1");实现验证码功能
第一种方式,自己用画笔
int width = 110; int height = 25; //在内存中创建一个图像对象 BufferedImage img = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //创建一个画笔 Graphics g = img.getGraphics(); //给图片添加背景色 g.setColor(Color.PINK);//设置填充的颜色 g.fillRect(1,1,width-2,height-2);//填充的面积范围 //给边框一个颜色 g.setColor(Color.RED); g.drawRect(0,0,width-1,height-1);//设置边框显示坐标 //设置文本样式 g.setColor(Color.BLUE); g.setFont(new Font("宋体",Font.BOLD|Font.ITALIC,15)); //给图片添加文本 Random rand = new Random(); int position = 20; for (int i=0;i<4;i++) { g.drawString(rand.nextInt(10) + "", position, 20);//给图片填充文本 position += 20; } //添加9条干扰线 for (int i=0;i<9;i++) { g.drawLine(rand.nextInt(width),rand.nextInt(height),rand.nextInt(width),rand.nextInt(height)); } //将图片以流对象的方式输出的客户端 ImageIO.write(img,"jpg",response.getOutputStream());
第二种方式,用别人的工具jar包
ValidateCode.jar这个jar包
E:\学习视频\day09_reques&response\day09_reques&response\资料\ValidateCode.jar
ValidateCode vc = new ValidateCode(110,25,4,9); vc.write(response.getOutputStream());实现验证码功能
System.out.println("我要办事"); System.out.println("你的事我办不了,我可以找人帮你办"); ServletContext application = this.getServletContext(); // RequestDispatcher rd = application.getRequestDispatcher("/dome5"); // rd.forward(request,response); //application.getRequestDispatcher("/dome5").forward(request,response); //forward(request,response)这句代码是把消息向下传递 application.getRequestDispatcher("/dome5").forward(request,response); System.out.println("事办完了");
System.out.println("这个事我能帮你办");需要2次发送请求
获取消息头的信息
// headerTest1(request); // headerTest2(request); //获取相关name的消息头 Enumeration nameone = request.getHeaders("accept"); while (nameone.hasMoreElements()) { String sos = (String)nameone.nextElement(); System.out.println(sos+":"+request.getHeader(sos)); } } private void headerTest2(HttpServletRequest request) { //获取所有消息头的name Enumeration names = request.getHeaderNames(); while (names.hasMoreElements()) { String sos = (String)names.nextElement(); System.out.println(sos+":"+request.getHeader(sos)); } } private void headerTest1(HttpServletRequest request) { //得到请求消息头的信息 String s = request.getHeader("User-Agent"); System.out.println(s); if (s.toLowerCase().contains("chrome")) { System.out.println("您使用的是谷歌浏览器"); }else if (s.toLowerCase().contains("msie")) { System.out.println("您使用的是IE浏览器"); }else if (s.toLowerCase().contains("firefox")) { System.out.println("您使用的是火狐浏览器"); }else { System.out.println("您使用的是谷歌浏览器"); }初学完request和response,错误可能一些