Java学习之Response篇

Java学习之Response篇0x00前言续上篇文章内容,这篇本章来更新Response。0x01Response常用方法:setStatus(intsc):设置响应状态码se

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

Java学习之Response篇

0x00 前言

续上篇文章内容,这篇本章来更新Response。

0x01 Response

常用方法:

setStatus(int sc)  : 设置响应状态码

setHeader(String name, String value)   设置响应头

resp.sendRedirect(String Redirect);      302跳转


这里的转发和重定向不一样,来看看两者的区别。

重定向:

1. 地址栏发生变化
2. 重定向可以访问其他站点(服务器)的资源
3. 重定向是两次请求。不能使用request对象来共享数据
			
转发:

1. 转发地址栏路径不变
2. 转发只能访问当前服务器下的资源
3. 转发是一次请求,可以使用request对象来共享数据

重定向代码:

Response类:


@WebServlet("/response")
public class Response extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setStatus(302);
        resp.setHeader("location","/demo1");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

ServletDemo类:


@WebServlet("/demo1")
public class ServeletDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("已跳转");
        resp.sendRedirect("http://www.baidu.com");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

writer方法使用:

@WebServlet("/response")
public class Response extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("gbk");   //设置编码
        PrintWriter writer = resp.getWriter();  //获取输出对象
        writer.write("response");//输出内容
        writer.println("1235");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

输出字节流

ServletOutputStream outputStream = resp.getOutputStream();
        outputStream.write("abc".getBytes());
        


0x02 ServletContext

ServletContext: 代表整个web应用,可以和程序的容器(服务器)来通信

常用方法:


request.getServletContext();   : 通过request对象获取
this.getServletContext();     : 通过HttpServlet获取

String getMimeType(String file)  : 获取MIME对象


域对象:共享数据

1. setAttribute(String name,Object value)
2. getAttribute(String name)
3. removeAttribute(String name)

获取文件的真实(服务器)路径:

String getRealPath(String path) 



文件下载小案例:

编写一个html页面,里面写一个超链接对图片进行下载。

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>downlaod</title>
</head>
<body>

<a href="/demo/img/1.jpg">图片查看</a>

<a href="downloadServlet?filename=1.jpg">图片下载</a>

</body>
</html>

downloadSerlet类:

@WebServlet("/downloadServlet")
public class downloadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        this.doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        String filename = request.getParameter("filename");  //接收filename传参的值
            ServletContext servletContext = this.getServletContext();   //创建servletContext 对象
            String Path = servletContext.getRealPath("/img/" + filename);  //获取文件真实路径

        String mimeType = servletContext.getMimeType(filename);//获取mimel类型





        FileInputStream fis = new FileInputStream(Path);   //路径参数文件输入流对象中
        response.setHeader("content-type",mimeType);  //响应头设置mime类型
        response.setHeader("content-disposition","attachment;filename="+filename); //设置为附件类型
            ServletOutputStream outputStream = response.getOutputStream();   //获取文件输出流
            byte[] buff = new byte[1024];   //设置每次读取的字节大小
            int len =0;
            while ((len = fis.read(buff))!=-1){     

                outputStream.write(buff,0,len);  
            }

    }
}

这里简单的一个案例就完成了。

0x03 结尾

这里的几个内容无非就是几个方法的一个使用,这就体现了Java面向对象语言的强大。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119940.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 数值分析(一) 牛顿插值法及matlab代码

    数值分析(一) 牛顿插值法及matlab代码目录数学:数值分析一、牛顿插值法原理1.牛顿插值多项式2.差商2.1定义2.2性质2.3差商表3.牛顿(Newton)插值公式二、牛顿插值公式matlab代码1.matlab实时在线脚本2.牛顿插值代码3.实例三、总结数学:数值分析  刚上完数值分析课在其中学习了不少的知识,课后还做了一些课程实验主要都是利用matlab编程来解决问题,接下先讲插值法中的牛顿插值法一、牛顿插值法原理1.牛顿插值多项式  定义牛顿插值多项式为:Nn(x)=a0+a1(x−x0)+a2(x−x0)(x−

  • Offline Explorer_手机chrome离线网页

    Offline Explorer_手机chrome离线网页提及离线浏览软件,我想大家都知道“元老级”的TeleportPro吧?一些网友可能还挺怀念的,毕竟它开了离线浏览之先河,为广大网友节省了不少银子,带来了不少便利,功不可没呵!然而时过境迁,“江山代有才人出”,一大批新的离线浏览软件登场了。这里我要向大家介绍的是一个设计全新的离线浏览软件——OfflineExplorer1.1。一、基本信息 OfflineExplorer1.1由MetaP…

  • 最短路径之Dijkstra(迪杰斯特拉)算法(无向图)

    最短路径之Dijkstra(迪杰斯特拉)算法(无向图)简介Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。由for循环可知,其时间复杂度是O(n^2)。原理在已知图的邻接矩阵net.vexs[i][j](无向网,含权值的图)的条件下,通过遍历已知图的所有路径,用dis[i]数组来记录到i点…

  • acwing-143. 最大异或对(Trie+异或)「建议收藏」

    acwing-143. 最大异或对(Trie+异或)「建议收藏」在给定的 N 个整数 A1,A2……AN 中选出两个进行 xor(异或)运算,得到的结果最大是多少?输入格式第一行输入一个整数 N。第二行输入 N 个整数 A1~AN。输出格式输出一个整数表示答案。数据范围1≤N≤105,0≤Ai<231输入样例:31 2 3输出样例:3#include<bits/stdc++.h>using namespace std;const int N = 31e5 + 10;int trie[N][2],ctx,cnt[N];

  • C语言中 malloc函数用法

    C语言中 malloc函数用法一、malloc()和free()的基本概念以及基本用法:使用malloc的情况 首先说明一下,由malloc动态申请的内存空间是堆式的内存空间。而静态的内存的空间是栈式的。有关堆栈的知识请参考其他相关资料。1. 大容量内存需求 a) 网上说当我们需要的内存空间超过0.5兆的时候最好使用动态内存,也就是利用malloc来申请内存空间。可以这么认为,如果内存过大,就会不

  • python计算平均值的代码(python3求平均值)

    计算平均值【问题描述】从键盘输入三个整数,分别存入x,y,z三个整型变量中,计算并输出三个数的和以及平均值。【输入形式】从键盘输入三个整数,整数之间以空格隔开。【输出形式】在屏幕上分两行显示结果:第一行为三个数的和,整数形式输出;第二行为三个数的平均值,浮点数形式输出,小数点后保留两位小数。【输入样例】323【输出样例】82.67【样例说明】3、2、3的和为8,所以第一行输出8;第二行输出3、2、3的平均值2.67(保留两位小数)。实现代码:x,y,z=(inpu.

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号