Java学习笔记(二十):response

写在前面:

状态码
200成功 302重定向 304读缓存 404路径错误 405没有doxxx方法 500服务器错误
响应头
content-type 文件格式和编码

content-disposition  响应体的打开方式

in-line 直接打开

attachment 附件形式打开

设置响应行、头、体
setStatic setHeader getWriter / getOutputStream / .write

设置编码:response.setContentType("text/html;charset=utf-8")

重定向:response.sendRedirect(uri)

ServletContext
getServletContext()

getMimeType(文件名)

getRealPath(/文件路径)


1. 响应消息数据格式

数据格式:

响应行:协议  版本  状态码   状态码描述

响应头:头名称:头值

响应空行

响应体:页面内容

状态码:

1xx :没有接收完成

2xx :成功 -----代表:200

3xx :重定向  -----302重定向;304访问缓存(服务器让浏览器访问本地缓存)

4xx :客户端错误  -----404路径错误;405请求方式没有对应的doxxx方法

5xx :服务端错误  -----500服务器内部异常

常见响应头:

content-type:响应体的数据格式和编码格式

content-disposition:以什么格式打开响应体的数据(默认in-line在当前页面打开,attachment以附件形式打开)

设置响应消息:

响应行:setStatic(int)    状态码

响应头:setHeader(name,value)

响应体:获取输出流,用输出流将数据输出到浏览器  getWriter / getOutputStream /  xxx.write("xxxxx")

               流不用手动关闭和刷新,request和response关闭时会自动执行

编码:

tomcat默认编码:ISO-8859-1

获取流之前设置编码:response.setCharacterEncoding()

并告诉浏览器,服务器使用的编码,并建议浏览器使用该编码方式解码:(就不用设置编码格式了)

                 response.setHeader("content-type", "text/html;charset=utf-8");

               简单写法:response.setContentType("text/html;charset=utf-8");

 

2. 重定向

资源跳转的一种方式

浏览器请求Servlet1,Servlet1返回响应302和Servlet2的资源路径,浏览器去请求Servlet2,Servlet2给出响应

特点:地址栏改变;可访问外部服务器;两次请求(不能使用request域共享对象)

代码:response.sendRedirect(uri)

3. ServletContext

代表整个web应用,可以和服务器通信

获取对象:

request.getServletContext();

this.getServletContext();

功能:

获取文件的MIME类型:getMimeType(文件名称带后缀)

作为域对象,共享数据:域范围是所有用户请求的数据

获取文件的真实路径(tomcat下的路径):getRealPath(文件路径)

文件路径写法:

web目录下:/xx

web-inf下:/WEB-INF/xx

src下:/WEB-INF/classes/xx

补充:ClassLodar只能加载src下的文件

MIME类型:

在互联网通信中定义的一种文本数据类型,格式:大类型/小类型

例如:text/html 、application/json  JSON格式

4. 路径写法

相对路径:

首先要确定当前资源和目标资源的相对位置

以 . 开头

./  当前目录

../  上级目录

 

绝对路径:

以 / 开头

判断这个资源是给谁用的:给浏览器用--加虚拟目录;给服务端用--不加虚拟目录

虚拟目录用request动态获取

5. 案例:文件下载


@WebServlet("/myservlet03")
public class MyServlet03 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");

        //获取要下载的文件名
        String name = request.getParameter("name");

        //获取真实路径和mime类型
        ServletContext servletContext = request.getServletContext();
        String path="/"+name;
        if(name.contains(".jpg")){//jpg文件在web的img文件夹下
            path="/img/"+name;
        }
        String relPath = servletContext.getRealPath(path);
        String mimeType=servletContext.getMimeType(name);

        //解决中文文件名问题
        String header = request.getHeader("user-agent");
        name=DownLoadUtils.getFileName(header,name);

        //设置文件类型、文件打开方式
        response.setHeader("content-type",mimeType);
        response.setHeader("content-disposition","attachment;filename="+name);

        //读取文件到输出流
        ServletOutputStream os = response.getOutputStream();
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream(relPath));
        byte[] bytes=new byte[1024];
        int len;
        while ((len=bis.read(bytes)) != -1){
            os.write(bytes,0,len);
        }
        bis.close();

    }
}
//html

    <a href="http://localhost:8080/test04_war_exploded/myservlet03?name=1.jpg" target="_blank" name="file">超链接:文件下载</a>
发布了97 篇原创文章 · 获赞 52 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/poppy_rain/article/details/98473817