当前位置: 首页 > news >正文

网页网站动作效果做的比较棒亚马逊网站怎么做推广

网页网站动作效果做的比较棒,亚马逊网站怎么做推广,厦门公司做网站,深圳搜索优化response、request对象 Tomcat收到客户端的http请求#xff0c;会针对每一次请求#xff0c;分别创建一个代表请求的request对象、和代表响应的response对象 既然request对象代表http请求#xff0c;那么我们获取浏览器提交过来的数据#xff0c;找request对象即可。respon…response、request对象 Tomcat收到客户端的http请求会针对每一次请求分别创建一个代表请求的request对象、和代表响应的response对象 既然request对象代表http请求那么我们获取浏览器提交过来的数据找request对象即可。response对象代表http响应那么我们向浏览器输出数据找response对象即可。 什么是HttpServletResponse对象 http响应由状态行、实体内容、消息头、一个空行组成。HttpServletResponse对象就封装了http响应的信息。 HttpServletResponse的应用 调用getOutputStream()方法向浏览器输出数据 调用getOutputStream()方法向浏览器输出数据,getOutputStream()方法可以使用print()也可以使用write()它们有什么区别呢我们试验一下。代码如下 //获取到OutputStream流ServletOutputStream servletOutputStream response.getOutputStream();//向浏览器输出数据servletOutputStream.print(aaaa);成功输出好像没什么毛病。 我们试着输出中文试试 //获取到OutputStream流ServletOutputStream servletOutputStream response.getOutputStream();//向浏览器输出数据servletOutputStream.print(中国);出异常了 为什么会出现异常呢在io中我们学过outputStream是输出二进制数据的print()方法接收了一个字符串print()方法要把“中国”改成二进制数据Tomcat使用IOS 8859-1编码对其进行转换,“中国”根本对ISO 8859-1编码不支持。所以出现了异常 我们再看看write()方法先向浏览器输出英文数据 response.getOutputStream().write(aaa.getBytes()); 没有问题 再试试输出中文数据 response.getOutputStream().write(你好呀我是中国.getBytes()); 貌似也没有问题。 为什么使用write()方法能够正常向浏览器输出中文呢“你好呀我是中国”.getBytes()这句代码在转成byte[]数组的时候默认查的是gb2312编码而你好呀我是中国支持gb2312编码所以可以正常显示出来。 但是程序要实现通用性应该使用的是UTF-8编码我们在字符串转换成字节数组时指定UTF-8编码看看会怎么样。 response.getOutputStream().write(你好呀我是中国.getBytes(UTF-8)); 好的成功把它搞成乱码了 为什么它变成了乱码呢原因是这样的我在向服务器输出的中文是UTF-8编码的而浏览器采用的是GBKGBK想显示UTF-8的中文数据不乱码才怪呢 既然如此我将浏览器的编码改成UTF-8试试。 乱码问题又解决了。可是每次编写UTF-8程序时都要去网页上改编码格式吗这样明显不可能的。 既然HTTP响应有对浏览器说明回送数据是什么类型的消息头那么HttpServletResponse对象就应该有相对应的方法告诉浏览器回送的数据编码格式是什么 于是乎就去查找Servlet API找到了设置消息头的方法 //设置头信息告诉浏览器我回送的数据编码是utf-8的response.setHeader(Content-Type, text/html;charsetUTF-8);response.getOutputStream().write(你好呀我是中国.getBytes(UTF-8)); 浏览器在显示数据时自动把页面的编码格式置换成UTF-8乱码问题也解决了 另外除了使用HttpServletResponse对象设置消息头的方法我可以使用html的标签模拟一个http消息头 下面是代码 //获取到servletOutputStream对象ServletOutputStream servletOutputStream response.getOutputStream();//使用meta标签模拟http消息头告诉浏览器回送数据的编码和格式servletOutputStream.write(meta http-equivcontent-type contenttext/html;charsetUTF-8.getBytes());servletOutputStream.write(我是中国.getBytes(UTF-8)); 乱码问题也可以解决 调用getWriter()方法向浏览器输出数据 对于getWriter()方法而言是Writer的子类那么只能向浏览器输出字符数据不能输出二进制数据 使用getWriter()方法输出中文数据,代码如下 //获取到printWriter对象PrintWriter printWriter response.getWriter();printWriter.write(看完博客点赞); 喜闻可见的事又出现了我又出现乱码了。 为什么出现乱码了呢由于Tomcat是外国人的写Tomcat默认的编码是ISO 8859-1当我们输出中文数据的时候Tomcat会依据ISO 8859-1码表给我们的数据编码中文不支持这个码表呀所以出现了乱码 既然如此我设置一下编码不就好了吗代码如下 //原本是ISO 8859-1的编码我设置成UTF-8response.setCharacterEncoding(UTF-8);//获取到printWriter对象PrintWriter printWriter response.getWriter();printWriter.write(看完博客点赞); 我再访问了一下我的天看起来更乱了 为什么乱码问题还没有解决细心的朋友会发现我只是在中文转换的时候把码表设置成UTF-8但是浏览器未必是使用UTF-8码表来显示数据的呀 好的我们来看看浏览器的编码格式果然浏览器使用GB2312显示UTF-8的数据不乱码才怪呢 这个问题我们在上面已经是有两种方法解决了【使用标签模拟消息头、设置消息头】,Servlet还提供了一个方法给我们 //设置浏览器用UTF-8编码显示数据response.setContentType(text/html;charsetUTF-8); 好的我们再来访问一下 既然Servlet有那么多方法解决乱码问题是不是有一种是最简便的呢没错下面这个方法是最简便的它不仅设置浏览器用UTF-8显示数据内部还把中文转码的码表设置成UTF-8了也就是说response.setContentType(“text/html;charsetUTF-8”);把response.setCharacterEncoding(“UTF-8”)的事情也干了 使用getWriter()显示中文数据只需要一个方法就搞掂了 //设置浏览器用UTF-8编码显示数据response.setContentType(text/html;charsetUTF-8);//获取到printWriter对象PrintWriter printWriter response.getWriter();printWriter.write(看完博客点赞); 实现文件下载 下载资源我们在日常中也很常用它是怎么做到的呢要能够给别人下载服务器就应该有这个资源 现在我web站点下有一个图片了 既然浏览器发送所有的请求都是去找Servlet的话那么我就写一个Servlet当别人访问我这个Servlet的时候它们就可以下载我这个图片了 java的文件上传下载都是通过io流来完成的既然要下载图片首先要能够读取到它 //获取到资源的路径String path this.getServletContext().getRealPath(/download/1.png);//读取资源FileInputStream fileInputStream new FileInputStream(path);//获取到文件名,路径在电脑上保存是\\形式的。String fileName path.substring(path.lastIndexOf(\\) 1); 告诉浏览器我要下载这个文件 //设置消息头告诉浏览器我要下载1.png这个图片response.setHeader(Content-Disposition, attachment; filenamefileName); 将读取到的内容回送给浏览器 //把读取到的资源写给浏览器int len 0;byte[] bytes new byte[1024];ServletOutputStream servletOutputStream response.getOutputStream();while ((len fileInputStream.read(bytes)) 0) {servletOutputStream.write(bytes, 0, len);}//关闭资源servletOutputStream.close();fileInputStream.close();当我访问时浏览器就提示下载了。 也可以成功打开 现在问题又有了如果我文件的名字是中文呢 我们再访问一下发现名字乱码了怎么都是乱码 为了解决文件名乱码我们要进行URL编码代码如下 response.setHeader(Content-Disposition, attachment; filename URLEncoder.encode(fileName, UTF-8)); 再次访问时文件名乱码问题就解决了 实现自动刷新 以规定的时间让页面刷新更新资源 让浏览器实现自动刷新那肯定又是修改消息头了。 //每3秒自动刷新网页一次response.setHeader(Refresh, 3); 为了更好的看效果我们加入时间值进去 response.getWriter().write(time is : System.currentTimeMillis()); 每三秒时间值就会发生变化 学完上面的好像没有什么用自己上网的时候谁看得见这样的东西。自动刷新能够实现页面的跳转】 我们登陆完网站很多时候都会看见【登陆成功3秒后自动跳转…】其实这个就是用Refresh来完成的。 response.setContentType(text/html;charsetUTF-8);response.getWriter().write(3秒后跳转页面.....);//三秒后跳转到index.jsp页面去web应用的映射路径我设置成/url没有写上应用名response.setHeader(Refresh, 3;url/index.jsp); 看下效果 设置缓存 浏览器本身就存在着缓存机制 当我第一次访问index.jsp时浏览器向服务器发了两次请求【一个是网页的一个是图片的】 当我第二次访问index.jsp的时候浏览器将图片缓存起来了图片不是重新加载的是从缓存里面取出来的。 像股票类型的网页是不能取缓存的数据的数据都是要不断更新的。下面我就禁止缓存的功能 //浏览器有三消息头设置缓存为了兼容性将三个消息头都设置了response.setDateHeader(Expires, -1);response.setHeader(Cache-Control,no-cache);response.setHeader(Pragma, no-cache);//这里为了看效果PrintWriter printWriter response.getWriter();printWriter.print(你好啊 new Date().toString()); 当然了如果页面有些数据不长期更新你就将它设置成缓存这样可以提高服务器的性能 实现数据压缩 网页上的信息量是很大的如果不将数据压缩再回送给浏览器这样就十分耗费流量 现在我有一篇文章要输出给浏览器 response.setContentType(text/html;charsetUTF-8);String ss fsdfhsdfhuisdhfusdhfuids fsdfdsfsdfsdfdsfdafdsfhsdjfhsdjkfhkjds fdsfjdslkfjsldkfjsdlkfjsdkfsdjkff fsjdfjdsklfjdsklfjkldsfjlksdjflksdjflkds dsjfklsdjflsdjfkldsfkjsdkfjsldkfjsdlfk fdsjlkfjdslkfjsdlkfjlkasjflk;response.getWriter().write(原来的长度是ss.getBytes().length/br);//输出给浏览器response.getWriter().write(ss); 访问一下可以看到原来的长度是201 压缩的原理是什么我们知道getOutputStream()和getWriter()都是直接把数据输出给浏览器的。现在我要做的就是让数据不直接输出给浏览器先让我压缩了再输出给浏览器。java提供了GZIP压缩类给我们 就让我们使用GZIP类来对数据压缩吧 //GZIP的构造方法需要一个OutputStream子类对象究竟哪个对象适合我们看下write()方法GZIPOutputStream gzipOutputStream new GZIPOutputStream();//查看了下APIwrite()接收的是byte[]类型的。gzipOutputStream.write(); 于是我就在构造函数上传递个ByteArrayOutputStream给它 //既然是byte[]类型那么我就给他一个ByteArrayOutputStreamGZIPOutputStream gzipOutputStream new GZIPOutputStream(new ByteArrayOutputStream()); 而用GZIPOutputStream写数据的时候是把数据写到ByteArrayOutputStream上的等会还要把数据取出来再写给浏览器于是就不能以匿名内部类的方式给GZIPOutputStream必须把ByteArrayOutputStream定义出来 //创建GZIPOutputStream对象给予它ByteArrayOutputStreamByteArrayOutputStream byteArrayOutputStream new ByteArrayOutputStream();GZIPOutputStream gzipOutputStream new GZIPOutputStream(byteArrayOutputStream);//GZIP对数据压缩GZIP写入的数据是保存在byteArrayOutputStream上的gzipOutputStream.write(ss.getBytes());//gzipOutputStream有缓冲把缓冲清了并顺便关闭流gzipOutputStream.close(); 把压缩后的数据取出来写给浏览器 //将压缩的数据取出来byte[] bytes byteArrayOutputStream.toByteArray();//将压缩的数据写给浏览器response.getOutputStream().write(bytes); 我们来对比一下压缩前的大小和压缩后的大小 数据的确是压缩了然而为什么又乱码了啊很简单既然你压缩了数据你写给浏览器浏览器是不知道你这是压缩后的数据它是以正常的方式打开数据的。这当然造成乱码啦现在我要告诉浏览器我这是压缩数据 //告诉浏览器这是gzip压缩的数据response.setHeader(Content-Encoding,gzip);//再将压缩的数据写给浏览器response.getOutputStream().write(bytes); 再次访问一下 生出随机图片 生成随机图片这是非常常见的。在我们登陆的时候经常要写验证码而那些验证码是一张图片就是通过HttpServletResponse写给浏览器的。 要生成一张图片java提供了BufferedImage类供我们使用 //在内存中生成一张图片,宽为80,高为20类型是RGBBufferedImage bufferedImage new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);//获取到这张图片Graphics graphics bufferedImage.getGraphics();//往图片设置颜色和字体graphics.setColor(Color.BLUE);graphics.setFont(new Font(null, Font.BOLD, 20));//往图片上写数据先写个12345横坐标是0纵坐标是20【高度】graphics.drawString(12345, 0, 20); 好的现在我们在内存中创建了一张图片并写上了12345。接着我们要把图片写给浏览器了。把图片写给浏览器java又提供了图片流【ImageIO】给我们使用 //要往浏览器写一张图片那要告诉浏览器回送的类型是一张图片response.setHeader(ContentType, jpeg);//java提供了图片流给我们使用这是一个工具类//把图片传进去类型是jpg写给浏览器ImageIO.write(bufferedImage, jpg, response.getOutputStream()); 我们来访问一下看下图片长什么样 这样太丑了我们把背景改成白色看看 //把白色填充整张图片graphics.setColor(Color.white);graphics.fillRect(0, 0, 80, 20); 再看看效果这明显好看多了 好的我们的图片数字不可能是人工写的数字应该是随机产生的这个就简单了。现在我要生成7位的随机数生成随机数的方法如下 private String makeNum() {Random random new Random();//这样就会生成0-7位的随机数现在问题又来了如果随机数不够7位呢如果不够7位我们加到7位就行了int anInt random.nextInt(9999999);//将数字转成是字符串String num String.valueOf(anInt);//判断位数有多少个不够就加StringBuffer stringBuffer new StringBuffer();for (int i 0; i 7 - num.length(); i) {stringBuffer.append(0);}return stringBuffer.append(num).toString();}如果要生成中文就找中文映射表即可。 重定向跳转 什么是重定向跳转呢点击一个超链接通知浏览器跳转到另外的一个页面就叫重定向跳转。是通知浏览器去跳转这很重要。页面之间的跳转有两种方式重定向和转发至于什么时候用重定向什么用转发我在讲完HttpServletRequest对象的时候会详细说明。 我们来使用以下HttpServletResponse对象的重定向 //重定向到index.jsp页面response.sendRedirect(/zhongfucheng/index.jsp); 在浏览器的地址栏访问Servlet222 跳转到index.jsp页面地址栏发生了变化 我们再来看看http协议发生了什么 从图上看我们看到了两个状态码一个是302。一个是200。302状态码在http协议中代表的是临时重定向。举个例子我找纪律委员说给我一份请假表我要回家。纪律委员告诉我我这里没有请假表你去找辅导员吧。再看回我访问Sevlet222时我找Servlet222Servlet222告诉浏览器我没有你想要的资源你要的资源在index.jsp页面中你自己去找吧。 很容易看出重定向是通过302状态码和跳转地址实现的。于是乎我们设置http消息头就可以实现重定向跳转 //设置状态码是302response.setStatus(302);//HttpServletResponse把常用的状态码封装成静态常量了所以我们可以使用SC_MOVED_TEMPORARILY代表着302response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);//跳转的地址是index.jsp页面response.setHeader(Location, /zhongfucheng/index.jsp); 其实sendRedirect()方法就是对setStatus()和setHeader()进行封装原理就是setStatus()和setHeader() getWriter和getOutputStream细节 getWriter()和getOutputStream()两个方法不能同时调用。如果同时调用就会出现异常Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取Servlet引擎将这些数据当作响应消息的正文然后再与响应状态行和各响应头组合后输出到客户端。Servlet的serice()方法结束后【也就是doPost()或者doGet()结束后】Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法如果没有Servlet引擎将调用close方法关闭该输出流对象.
http://www.pierceye.com/news/371943/

相关文章:

  • 乐清网站制作公司电话免费做初中试卷的网站
  • 注册一个网站的流程反向代理服务器做wordpress外网
  • 沁阳网站建设tomcat建网站
  • 品牌网站建设公司推荐网站建设公司3lue
  • 装修公司网站模版徐州品牌网站建设
  • 医疗网站建设计划书一级消防工程师考试科目
  • 信誉好的网站建设公司网站关停公告怎么做
  • 画图在什么网站上做兼职广告词
  • 昆明购物网站建设企业网络设计方案预算
  • 浙江省建设工程质监站网站什么是营销型网站建设
  • 做网站需要云数据库吗企业做网页还是网站
  • wordpress手机网站插件wordpress编辑器添加按钮弹出窗口
  • 网站建设验收单格式建筑工具网站
  • 比较简洁大方的网站伊春住房和城乡建设网站
  • 电商网站开发prd免费个人网页模板
  • 西安 网站开发 招聘响应式网站代理
  • 浙江建设干部学校网站免费wordpress搭建
  • 海尔网站建设内容策划wordpress 登录密码
  • 金融公司网站规划方案四川省住建厅特种作业证报名
  • 做网站员培训网站小视频怎么做
  • 做网站是学什么专业的电子商务网络营销方式
  • 东莞电商网站公司goz建站
  • 深圳石岩建网站权威发布李建
  • 大连哪家公司做网站比较好网页搜索的快捷键
  • 怎样建个小公司的网站濮阳网络电视直播
  • 台州低价网站建设阆中做网站
  • 兰州网站运营诊断学校网站报价方案
  • 宿迁做网站大公司现在企业做网站一般用什么框架
  • 企业如何建自己的网站自己网站的登录api怎么做
  • 专业的网站建设企业微信小程序服务器一年多少钱