HttpServletResponse

客户端向服务器发送http请求,则会产生HttpServl

uest对象给服务器。HttpServletRequest封装了客户端的信息,服务器servlet程序可以通过request对象操纵客户端的信息.HttpServletRequest是ServletRequest的子接口,因为ServletRequest没有与HTTP相关的api,而HttpServletRequest增加了与HTTP协议相关的api。

常用状态码:

200--请求处理成功

302--客户段重定向

304--客户端访问资源没有被修改,客户端访问本地资源

404--访问资源不存在

500--服务器内部出错

常用api:

response.setstatus

通过response实现重定向

response.setStatus(302);
response.setHeader("Location", "/day06/aweiyo.html"); 浏览器重定向到aweiyo.html页面

// / 由客户端定向服务器,代表客户端 / , 必须添加工程虚拟目录

用户登录错误,返回到首页的重定向案例~


public class ResponseServlet2 extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //获得客户端的用户名和密码
        String uesrname=request.getParameter("username");
        String password=request.getParameter("password");
        
        //判断是否用户名,密码是否正确,假设用户名和密码都是admin
        if("admin".equals(uesrname)&&"admin".equals(password)){
            response.setStatus(302);
            response.setHeader("Location", "/welcome.html");
            //response.sendRedirect("Location", "/welcome.html");此局可以完成上面的效果,所以一般也是用这种写法
        }else{
            response.setStatus(302);
            response.setHeader("Location", "/response/login.html");
            //response.sendRedirect( "/response/login.html");
        }
        
    }

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

}

自动跳转还可以使用meta:在HTML中加入下面代码

<meta content="3;url=/day06/response/demo03/result.html" http-equiv="refresh">


通过servlet禁止缓存,以下三行代码~

response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("expires", -1);


response生成客户端的响应

response.setContentType("text/html;charset=utf-8");

开发中只需要使用setContentType 就可以了
响应流的注意事项:
1、getOutputStream和getWriter 不能同时使用
2、必须在getOutputStream和getWriter 之前 设置响应 编码
3、getOutputStream和getWriter 输出内容 是 HTTP响应体
4、getOutputStream和getWriter 存在缓冲区的 ,在service方法结束时,自动关闭流,flush缓冲区内容


通过response实现文件下载

第一种:通过超链接 完成文件下载
* 如果浏览器可以识别该文件格式,直接打开,只有链接文件浏览器不识别文件格式,才会实现下载

第二种:通过Servlet程序实现下载
原理:通过Servlet读取目标程序,将资源返回客户端
通过程序下载文件 设置两个头信息 Content-Type Content-Disposition

response.setContentType(getServletContext().getMimeType(filename));  ---- 设置文件类型
response.setHeader("Content-Disposition", "attachment;filename="+ filename); ---- 设置文件以附件形式下载(对于浏览器识别格式文件)


 通过response生成验证码


public class ResponseServlet7 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
            int width=120;
            int height=30;
            //创建一张内存中的缓存图片
            BufferedImage bufferedimage=new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
            
            //设置背景色
            Graphics graphics=bufferedimage.getGraphics();
            graphics.setColor(Color.yellow);
            graphics.fillRect(0, 0, width, height);
            
            //画边框
            graphics.setColor(Color.blue);
            graphics.drawRect(0, 0, width-1, height-1);//必须长宽都减一,否则覆盖了
            
            //写验证码内容
            graphics.setColor(Color.red);
            graphics.setFont(new Font("宋体", Font.BOLD, 18));
            String context ="1234567890qwertyuiopsadfghjklzxcvnbm";
            
            //从验证码内容中随机抽取四个字
            Random random=new Random();
            int x=30;//一个验证码的长
            int y=20;//一个验证码的宽
            for(int i=0;i<4;i++){
                int index=random.nextInt(context.length());
                char letter=context.charAt(index);
                graphics.drawString(letter+"", x, y);//把一个字符变成字符串最简便的方法是该字符+""
                x+=20;
            }
            //随机释放干扰线
            int x1,x2,y1,y2;
            graphics.setColor(Color.LIGHT_GRAY);
            for(int i=0;i<10;i++){
                x1=random.nextInt(width);
                x2=random.nextInt(width);
                y1=random.nextInt(height);
                y2=random.nextInt(height);
                graphics.drawLine(x1, y1, x2, y2);
            }
            //释放图形资源
            graphics.dispose();
            //将图片输出到浏览器  ImageIo
            //将内存的图片成3gp格式到浏览器
            ImageIO.write(bufferedimage, "jpg", response.getOutputStream());
            System.out.println("00");
    }

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

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值