JavaWeb学习笔记(五)HttpServletRequest和HttpServletResponse

 

上一篇:JavaWeb学习笔记(四)servletContext

 

复习浏览器访问过程:

1. 监听8080端口,等待浏览器Http请求,解析url地址,在web.xml中匹配到对应的servlet

2. 根据请求信息构建request对象,构建响应对象response,构建该servlet实例对象,通过Service方法,调用doGet(request,response)

 

一、HttpServletResponse

1. 向浏览器输出信息

resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");

PrintWriter writer= resp.getWriter();
writer.print("<h1>404</h1>");
ServletOutputStream out = resp.getOutputStream();
out.print("abcdefg");

2. 下载文件

先放入一个资源文件

//给出文件真正的位置
        String realPath = "D:/IdeaProjects/2021_6_16_kuangshen/2021_06_16/servlet01/servlet_1/src/resources/柿子.png";
        //文件的名称是最后一个 / 后面的字符串
        String fileName = realPath.substring(realPath.lastIndexOf("/")+1);
        //让浏览器支持下载,以及允许中文
        resp.setHeader("content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8"));

//        //获取下载文件的输入流
        FileInputStream in = new FileInputStream(realPath);
//        //创建缓存区
        int len =0;
        byte[] buffer = new byte[1024];
//        //获取outputStream对象(奇怪的是,这句一直出错,后来也没有修改又对了。。。)
        ServletOutputStream out = resp.getOutputStream();
//        //将输入流写入缓冲区,再用输出流输出到浏览器页面
        while((len=in.read(buffer))>0){
            out.write(buffer,0,len);
        }
//        //关闭流
        in.close();
        out.close();

下载成功

3. 生成验证码

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //让浏览器三秒刷新一次
        resp.setHeader("refresh","3");

        //在内存中创建一个图片
        BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
        //得到图片,相当于笔
        Graphics2D g = (Graphics2D) image.getGraphics();
        //设置图片的背景颜色
        g.setColor(Color.white);
        g.fillRect(0,0,80,20);
        //给图片写数据
        g.setColor(Color.BLUE);
        g.setFont(new Font(null,Font.BOLD,20));
        g.drawString(makeRandom(),0,20);

        //告诉浏览器,该请求以图片的形式打开
        resp.setContentType("image/jpeg");
        resp.setDateHeader("expires",-1);
        resp.setHeader("Cache-control","no-cache");
        resp.setHeader("pragma","no-cache");

        //把图片写给浏览器
        ImageIO.write(image,"jpg",resp.getOutputStream());
    }
    private String makeRandom(){
        Random r = new Random();
        String num = r.nextInt(9999)+"";
        StringBuffer sb = new StringBuffer();
        for (int i=0;i<4-num.length();i++){//缺几位数字,补几个0
            sb.append("0");
        }
        num = sb.toString() +num;
        return num;
    }

4. 重定向(最重要)

必须加tomat配置的路径/servlet_1

resp.sendRedirect("/servlet_1/hello");

一个注册页面的例子:

<%--解决浏览器显示的中文乱码--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
    <body>
    <h2>regist</h2>
    <%--将前端数据提交给web.xml下/hello对应的类处理--%>
        <form action="hello" method="get">
            用户名:<input type="text" name="username"><br>
            密码:<input type="password" name="pwd"><br>
            <input type="submit">
        </form>
    </body>
</html>
String username = req.getParameter("username");
String password = req.getParameter("pwd");

System.out.println(username+":"+password);
resp.sendRedirect(req.getContextPath()+"/success.jsp");

二、HttpServletRequest

1. 获取前端传来的数据

(1) req.getParameter

String username = req.getParameter("username");
String password = req.getParameter("pwd");

System.out.println(username+":"+password);

输出:

(2) req.getParameterValues

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
    <body>
    <h2>regist</h2>
    <%--将前端数据提交给web.xml下/hello对应的类处理--%>
        <form action="hello" method="post">
            用户名:<input type="text" name="username"><br>
            密码:<input type="password" name="pwd"><br>
            爱好:<input type="checkbox" name="hobbys" value="唱歌">唱歌
            <input type="checkbox" name="hobbys" value="跳舞">跳舞
            <input type="checkbox" name="hobbys" value="绘画">绘画
            <input type="submit">
        </form>
    </body>
</html>
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //解决从浏览器取到的数据是中文乱码
    req.setCharacterEncoding("utf-8");

    String[] a = req.getParameterValues("hobbys");
    for(int i=0;i<a.length;i++){
        System.out.println(a[i]);
    }
    //请求转发
    req.getRequestDispatcher("/success.jsp").forward(req,resp);      
}

输出:

2. 请求转发

不用加tomat配置的路径/servlet_1

//请求转发
req.getRequestDispatcher("/success.jsp").forward(req,resp);

 

下一篇:JavaWeb学习笔记(六)Cookie 和 Session

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值