HttpServletResponse类

HttpServletResponse类:

          service方法中的response的类型是ServletResponse,而doGet/doPost方法的response的类型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口,功能和方法更加强大。

  response设置响应行:

 

            设置响应行的状态码:setStatus()。

public class LineServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置状态码
        response.setStatus(404);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

  response设置响应头:

          addHeader(String name, String value)

          addIntHeader(String name, int value)

          addDateHeader(String name, long date)

          setHeader(String name, String value)

          setDateHeader(String name, long date)

          setIntHeader(String name, int value)

           其中,add表示添加,而set表示设置。 重定向需要:1.状态码:302            2.响应头:location 代表重定向地址

 响应头跳转:

    

public class Servlet001 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //跳转到Servlet002
        //设置状态码302
        //response.setStatus(302);
        //设置响应头Location
        //response.setHeader("Location","/Web03/Servlet002");
        //重定向方法
        response.sendRedirect("/Web03/Servlet002");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
public class Servlet002 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().write("hello dandan...");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

定制时间跳转:         

public class HeadServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置定时刷新头
        response.setHeader("Refresh", "5;url=https://www.baidu.com");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

定时器跳转:

    

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<script type="text/javascript">
window.onload=function(){
    //获取span元素
    var second=document.getElementById("second");
    var time=5;
    //设置定时器
    var timer=setInterval(function(){
        second.innerHTML=time;
        time--;
        if(time==0){
            //取消定时器
            clearInterval(timer);
            location.href="https://www.baidu.com";
        
            
        }
    },1000);
}
</script>
<body>
<span id="second">5</span>
秒后跳转,如不跳转请点击
<a href="https://www.baidu.com"> 这里</a>
</body>
</html>

解决中文乱码问题:

        

public class BodyServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置response缓冲区的编码表
        //response.setCharacterEncoding("UTF-8");
        //设置客户端浏览器的解析码表
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("你好");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

写一张图片给客户端:

    

public class ImageServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //写一张图片给客户端
        //获取图片在服务器上的绝对路径
        String path=getServletContext().getRealPath("download/a.zip");
        //明确数据源
        FileInputStream fis=new FileInputStream(path);
        //明确目的地,获取目的地是客户端的字节输出流
        ServletOutputStream out=response.getOutputStream();
        //开始复制
        byte bytes[]=new byte[1024];
        int len=0;
        while((len=fis.read(bytes))!=-1){
            out.write(bytes,0,len);
        }
        //释放资源
        fis.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

文件下载功能:

      

          

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/Web03/DownServlet?filename=蜡笔.jpg">蜡笔.jpg</a>
<a href="/Web03/DownServlet?filename=a.wmv">a.wmv</a>
<a href="/Web03/DownServlet?filename=a.zip">a.zip</a>
<a href="/Web03/DownServlet?filename=a.txt">a.txt</a>
</body>
</html>
public class DownServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取用户要下载的文件名
        String filename=request.getParameter("filename");
        //解决get请求代码
        filename=new String(filename.getBytes("ISO8859-1"),"UTF-8");
        //获取User-Agent头明确浏览器
        String agent=request.getHeader("User-Agent");
        String filenameEncoder="";
        if (agent.contains("MSIE")) {
                // IE浏览器
                filenameEncoder= URLEncoder.encode(filename, "utf-8");
                filenameEncoder= filenameEncoder.replace("+", " ");
        } else if (agent.contains("Firefox")) {
                // 火狐浏览器
        BASE64Encoder base64Encoder = new BASE64Encoder();
                filenameEncoder= "=?utf-8?B?"
                        + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
        } else {
                // 其它浏览器
                filenameEncoder= URLEncoder.encode(filename, "utf-8");                
        }
        
        
        //告知浏览器文件的类型
        response.setContentType(getServletContext().getMimeType(filename));
        //告诉浏览器文件以附件方式打开
        response.setHeader("Content-Disposition","attachment;filename="+filenameEncoder);
        //获取文件绝对路径
        String path=getServletContext().getRealPath("download/"+filename);
        //明确数据源
        FileInputStream fis=new FileInputStream(path);
        //明确目的地
        ServletOutputStream out=response.getOutputStream();
        //开始复制
        byte bytes[]=new byte[1024];
        int len=0;
        while((len=fis.read(bytes))!=-1){
            out.write(bytes,0,len);
        }
        //释放资源
        fis.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

 

  

 

posted @ 2020-11-13 16:27  马雪峰1  阅读(150)  评论(0编辑  收藏  举报