Servlet第三篇【request和response简介、response的常见应用】(二)

简介: Tomcat收到客户端的http请求,会针对每一次请求,分别创建一个代表请求的request对象、和代表响应的response对象

实现文件下载


下载资源我们在日常中也很常用,它是怎么做到的呢?要能够给别人下载,服务器就应该有这个资源

  • 现在我web站点下有一个图片了!

50.png

  • 既然浏览器发送所有的请求都是去找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; filename="+fileName);
  • 将读取到的内容回送给浏览器
//把读取到的资源写给浏览器
        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();
  • 当我访问时,浏览器就提示下载了。
    51.png
  • 也可以成功打开!

52.jpg

  • 现在问题又有了,如果我文件的名字是中文呢?

53.png

  • 我们再访问一下,发现名字乱码了(怎么都是乱码)

54.jpg

  • 为了解决文件名乱码,我们要进行URL编码,代码如下:
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
  • 再次访问时,文件名乱码问题就解决了!

image.gif



实现自动刷新


以规定的时间让页面刷新,更新资源

  • 让浏览器实现自动刷新,那肯定又是修改消息头了。
//每3秒自动刷新网页一次
        response.setHeader("Refresh", "3");
  • 为了更好的看效果,我们加入时间值进去
response.getWriter().write("time is :" + System.currentTimeMillis());
  • 每三秒时间值就会发生变化

55.png

  • 学完上面的,好像没有什么用,自己上网的时候谁看得见这样的东西。自动刷新,能够实现页面的跳转
  • 我们登陆完网站,很多时候都会看见【登陆成功,3秒后自动跳转….】,其实这个就是用Refresh来完成的。
response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("3秒后跳转页面.....");
        //三秒后跳转到index.jsp页面去,web应用的映射路径我设置成/,url没有写上应用名
        response.setHeader("Refresh", "3;url='/index.jsp'");
  • 看下效果

56.png57.jpg


设置缓存

浏览器本身就存在着缓存机制

  • 当我第一次访问index.jsp时,浏览器向服务器发了两次请求【一个是网页的,一个是图片的】

image.gif58.jpg

  • 当我第二次访问index.jsp的时候,浏览器将图片缓存起来了!图片不是重新加载的,是从缓存里面取出来的

59.jpgimage.gif

  • 像股票类型的网页是不能取缓存的数据的,数据都是要不断更新的。下面我就禁止缓存的功能
//浏览器有三消息头设置缓存,为了兼容性!将三个消息头都设置了
        response.setDateHeader("Expires", -1);
        response.setHeader("Cache-Control","no-cache");
        response.setHeader("Pragma", "no-cache");
        //这里为了看效果
        PrintWriter printWriter = response.getWriter();
        printWriter.print("你好啊" + new Date().toString());
  • 当然了,如果页面有些数据不长期更新,你就将它设置成缓存,这样可以提高服务器的性能


目录
相关文章
|
5月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
【6月更文挑战第23天】构建Java Web应用,Servlet与JSP携手打造在线图书管理系统,涵盖需求分析、设计、编码到测试。通过实例展示了Servlet如何处理用户登录(如`LoginServlet`),JSP负责页面展示(如`login.jsp`和`bookList.jsp`)。应用基于MySQL数据库,包含用户和图书表。登录失败显示错误信息,成功后展示图书列表。部署到Tomcat服务器测试功能。此基础教程为深入Java Web开发奠定了基础。
107 10
|
5月前
|
缓存 负载均衡 安全
Servlet与JSP在Java Web应用中的性能调优策略
【6月更文挑战第23天】在Java Web中,Servlet和JSP调优至关重要,以应对高并发和复杂业务带来的性能挑战。优化包括Servlet复用、线程安全、数据库连接池,以及JSP的编译优化、使用JSTL、页面缓存和静态内容分离。全局优化涉及负载均衡、异步处理和缓存策略。通过这些实践,开发者能提升应用响应速度和吞吐量,确保高负载下的稳定运行。
78 7
|
5月前
|
前端开发 小程序 Java
深入解析Java Servlet与JSP:构建高效服务器端应用
【6月更文挑战第23天】Java Servlet和JSP是Web开发的关键技术,用于构建高效服务器端应用。Servlet处理HTTP请求,执行业务逻辑,而JSP专注于动态HTML生成。两者结合,借助MVC架构,实现逻辑与视图分离,提高代码可读性和性能。尽管有新框架出现,Servlet和JSP仍是许多项目的基础。
111 7
|
5月前
|
Java 应用服务中间件
Servlet简介&快速入门
Servlet简介&快速入门
|
6月前
|
JSON 网络协议 前端开发
简介Servlet2
简介Servlet
44 1
|
6月前
|
存储 Java 应用服务中间件
Servlet执行流程&生命周期&方法介绍&体系结构、Request和Response的功能详解(2)
Servlet执行流程&生命周期&方法介绍&体系结构、Request和Response的功能详解
67 2
|
6月前
|
Web App开发 XML Java
Servlet执行流程&生命周期&方法介绍&体系结构、Request和Response的功能详解(1)
Servlet执行流程&生命周期&方法介绍&体系结构、Request和Response的功能详解
111 2
|
6月前
|
Java 应用服务中间件 API
简介Servlet1
简介Servlet
36 0
|
3月前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
33 3
|
3月前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
32 1