Servlet中的Request和Response

刚学

Request

在客户端上显示一段文字

response.setContentType("text/html;charset=UTF-8");
告诉服务端和客户端要显示的字符编码:   text/html;charset="UTF-8"

        //浏览器的默认编码是IOS-8859-1,是tomcat规定的
//        response.setCharacterEncoding("UTF-8"); //告诉服务器应当用UTF-8文本
        //告诉浏览器应当使用UTF-8的编码
//        response.setHeader("content-type","text/html;charset=UTF-8");
        //告诉服务器和客户端用GBK解析文本
//        response.setContentType("text/html;charset=GBK");
//        PrintWriter out = response.getWriter(); //得到一个字符输出流
//        out.write("你好吗,老铁。我终于到这了!");//在客户端上显示的消息
        //字节输出流
        ServletOutputStream outputStream = response.getOutputStream();
        //getBytes使用的是操作系统的默认编码,我的系统是GBK
        response.setContentType("text/html;charset=UTF-8");
        outputStream.write("你好吗,老铁!".getBytes("UTF-8"));
重新定向问题

即使当服务器向客户端发送要求,要有2次请求

/dome5地址请求后到了/dome6

        System.out.println("A: 我有件事想找您办一下");
        System.out.println("B: 这件事,我办不了,但我可以告诉你谁能办");
        response.setStatus(302);//告诉客户端重新定向的资源
//        response.setHeader("localhost","/threeweb/dome6");
        response.sendRedirect("/threeweb/dome6");
/dome6
System.out.println("C:好的,这件事我可以帮你办了");

文件下载

//文件下载
//第一步,通过路径得到一个输出流
String path = this.getServletContext().getRealPath("/WEB-INF/classes/美女h.jpg");
FileInputStream fis = new FileInputStream(path);
//创建字节输出流
ServletOutputStream sos = response.getOutputStream();
//得到要下载的文件名
String filename = path.substring(path.lastIndexOf("\\")+1);
//设置文件编码
filename = URLEncoder.encode(filename,"UTF-8");//将不安全的文件名改为UTF-8格式
//告知客户端要下载文件
response.setHeader("content-disposition","attachment;filename="+filename);
response.setHeader("content-type","image/jpeg");
//执行输出操作
int len =1;
byte[] b = new byte[1024];
while ((len=fis.read(b))!=-1)
{
    sos.write(b,0,len);
}
sos.close();
fis.close();

重点

response.setHeader("content-disposition","attachment;filename="+filename);
response.setHeader("content-type","image/jpeg");
实现刷新跳转

        response.setContentType("text/html;charset=UTF-8");
//        response.setIntHeader("refresh",1);//设置1秒钟刷新一次
//        Random r = new Random();
//        response.getWriter().write(r.nextInt()+"");
        response.getWriter().write("注册成功,3秒后到主页");
        //设置3秒后跳转,且;后面的是要跳转的网址
        response.setHeader("refresh","3;url=/threeweb/dome1");
实现验证码功能

第一种方式,自己用画笔

int width = 110;
int height = 25;
//在内存中创建一个图像对象
BufferedImage img = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//创建一个画笔
Graphics g = img.getGraphics();
//给图片添加背景色
g.setColor(Color.PINK);//设置填充的颜色
g.fillRect(1,1,width-2,height-2);//填充的面积范围
//给边框一个颜色
g.setColor(Color.RED);
g.drawRect(0,0,width-1,height-1);//设置边框显示坐标
//设置文本样式
g.setColor(Color.BLUE);
g.setFont(new Font("宋体",Font.BOLD|Font.ITALIC,15));
//给图片添加文本
Random rand = new Random();
int position = 20;
for (int i=0;i<4;i++) {
    g.drawString(rand.nextInt(10) + "", position, 20);//给图片填充文本
    position += 20;
}
//添加9条干扰线
for (int i=0;i<9;i++)
{
    g.drawLine(rand.nextInt(width),rand.nextInt(height),rand.nextInt(width),rand.nextInt(height));
}
//将图片以流对象的方式输出的客户端
ImageIO.write(img,"jpg",response.getOutputStream());

第二种方式,用别人的工具jar包

ValidateCode.jar这个jar包

E:\学习视频\day09_reques&response\day09_reques&response\资料\ValidateCode.jar

ValidateCode vc = new ValidateCode(110,25,4,9);
vc.write(response.getOutputStream());
实现验证码功能

        System.out.println("我要办事");
        System.out.println("你的事我办不了,我可以找人帮你办");
        ServletContext application = this.getServletContext();
//        RequestDispatcher rd = application.getRequestDispatcher("/dome5");
//        rd.forward(request,response);
        //application.getRequestDispatcher("/dome5").forward(request,response);
        //forward(request,response)这句代码是把消息向下传递
        application.getRequestDispatcher("/dome5").forward(request,response);
        System.out.println("事办完了");

System.out.println("这个事我能帮你办");
需要2次发送请求

获取消息头的信息

//        headerTest1(request);
//        headerTest2(request);

        //获取相关name的消息头
        Enumeration nameone = request.getHeaders("accept");
        while (nameone.hasMoreElements())
        {
            String sos = (String)nameone.nextElement();
            System.out.println(sos+":"+request.getHeader(sos));
        }
    }

    private void headerTest2(HttpServletRequest request) {
        //获取所有消息头的name
        Enumeration names = request.getHeaderNames();
        while (names.hasMoreElements())
        {
            String sos = (String)names.nextElement();
            System.out.println(sos+":"+request.getHeader(sos));
        }
    }

    private void headerTest1(HttpServletRequest request) {
        //得到请求消息头的信息
        String s = request.getHeader("User-Agent");
        System.out.println(s);
        if (s.toLowerCase().contains("chrome"))
        {
            System.out.println("您使用的是谷歌浏览器");
        }else if (s.toLowerCase().contains("msie"))
        {
            System.out.println("您使用的是IE浏览器");
        }else if (s.toLowerCase().contains("firefox"))
        {
            System.out.println("您使用的是火狐浏览器");
        }else
        {
            System.out.println("您使用的是谷歌浏览器");
        }
初学完request和response,错误可能一些

发布了10 篇原创文章 · 获赞 9 · 访问量 1724

猜你喜欢

转载自blog.csdn.net/qq_38322023/article/details/78176472