Request和Response

Request(请求)和Response(响应)

在这里插入图片描述
(记得把之前的xml配置的删掉)

package com.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/demo6")
public class servletDemo6 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        //使用request对象 获取请求数据
        String name=req.getParameter("name");//url?name=zhangsan

        //使用response对象 设置响应数据
        res.setHeader("content-type","text/html;charset=utf-8");
        res.getWriter().write("<h1>"+name+",你好!<h1>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get....");
    }
}

网址改为

http://localhost:8080/javaweb/demo6?name=zhangsan

Request

一、继承体系

在这里插入图片描述

二、Request请求数据

在这里插入图片描述

1、请求行

package com.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //String getmethod():获取请求方式:GET
        String method = req.getMethod();
        System.out.println(method);

        //String getContextPath():获取虚拟目录(项目访问路径):/javaweb
        String contextPath = req.getContextPath();
        System.out.println(contextPath);

        //StringBuffer getRequestURL():获取URL(统一资源定位符):http://localhost:8080/javaweb3/req1
        StringBuffer url = req.getRequestURL();
        System.out.println(url.toString());

        //String getRequestURI():获取URI(统一资源标识符):/javaweb/req1
        String uri = req.getRequestURI();
        System.out.println(uri);

        //String getQueryString():获取请求参数(GET方式):username=zhangsan
        String queryString = req.getQueryString();
        System.out.println(queryString);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get...");
    }
}

网址输入

http://localhost:8080/javaweb/req1?username=zhangsan

在这里插入图片描述

2、请求头

package com.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet {
    //请求行
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //String getmethod():获取请求方式:GET
        String method = req.getMethod();
        System.out.println(method);

        //String getContextPath():获取虚拟目录(项目访问路径):/javaweb
        String contextPath = req.getContextPath();
        System.out.println(contextPath);

        //StringBuffer getRequestURL():获取URL(统一资源定位符):http://localhost:8080/javaweb3/req1
        StringBuffer url = req.getRequestURL();
        System.out.println(url.toString());

        //String getRequestURI():获取URI(统一资源标识符):/javaweb/req1
        String uri = req.getRequestURI();
        System.out.println(uri);

        //String getQueryString():获取请求参数(GET方式):username=zhangsan
        String queryString = req.getQueryString();
        System.out.println(queryString);


        //-------------------
        //获取请求头:user-agent:浏览器的版本信息
        System.out.println("-------------------");
        String header = req.getHeader("user-agent");
        System.out.println(header);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get...");
    }
}

在这里插入图片描述

3、请求头

现在webapp包下创建文件req.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="/javaweb/req1" method="post">
    <input type="text" name="username"><br>
    <input type="password" name="password"><br>
    <input type="submit">
</form>
</body>
</html>
package com.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;

@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet {
    //请求行
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //String getmethod():获取请求方式:GET
        String method = req.getMethod();
        System.out.println(method);

        //String getContextPath():获取虚拟目录(项目访问路径):/javaweb
        String contextPath = req.getContextPath();
        System.out.println(contextPath);

        //StringBuffer getRequestURL():获取URL(统一资源定位符):http://localhost:8080/javaweb3/req1
        StringBuffer url = req.getRequestURL();
        System.out.println(url.toString());

        //String getRequestURI():获取URI(统一资源标识符):/javaweb/req1
        String uri = req.getRequestURI();
        System.out.println(uri);

        //String getQueryString():获取请求参数(GET方式):username=zhangsan
        String queryString = req.getQueryString();
        System.out.println(queryString);


        //-------------------
        //获取请求头:user-agent:浏览器的版本信息
        System.out.println("-------------------");
        String header = req.getHeader("user-agent");
        System.out.println(header);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //获取post请求体:请求参数
        //1.获取字符输入流
        System.out.println("-----------------------");
        BufferedReader br = req.getReader();
        //2.读取数据
        String Line = br.readLine();
        System.out.println(Line);
    }
}

在这里插入图片描述

Request通用方式请求参数

在这里插入图片描述

在这里插入图片描述

package com.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

@WebServlet("/req2")
public class RequestDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //GET请求逻辑
        System.out.println("get....");

        //1.获取所有参数map的集合
        Map<String, String[]> map = req.getParameterMap();
        for(String key:map.keySet()){
            //username:zhangsan
            System.out.print(key+":");

            String[] values=map.get(key);
            for (String value:values){
                System.out.print(value+" ");
            }
            System.out.println();
        }
        System.out.println("----------------");
        //2.根据key获取参数值,数组
        String[] hobbies = req.getParameterValues("hobby");
        for (String hobby:hobbies){
            System.out.println(hobby);
        }
        //3.根据key 获取单个参数值
        String username = req.getParameter("username");
        String password = req.getParameter("username");

        System.out.println(username);
        System.out.println(password);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //POST请求方式
        System.out.println("POST....");

        //1.获取所有参数map的集合
        Map<String, String[]> map = req.getParameterMap();
        for(String key:map.keySet()){
            //username:zhangsan
            System.out.print(key+":");

            String[] values=map.get(key);
            for (String value:values){
                System.out.print(value+" ");
            }
            System.out.println();
        }
        System.out.println("----------------");
        //2.根据key获取参数值,数组
        String[] hobbies = req.getParameterValues("hobby");
        for (String hobby:hobbies){
            System.out.println(hobby);
        }
        //3.根据key 获取单个参数值
        String username = req.getParameter("username");
        String password = req.getParameter("username");

        System.out.println(username);
        System.out.println(password);
    }
}

请求参数中文乱码–POST解决方案

package com.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;

@WebServlet("/req3")
public class RequestDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.解决乱码:POST,getReader()
        req.setCharacterEncoding("UTF-8");//设置字符输入流的编码

        //2.获取username
        String username = req.getParameter("username");
        System.out.println(username);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

Request请求转发

在这里插入图片描述

package com.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/req4")
public class RequestDemo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("demo4...");

        //提供数据
        req.setAttribute("msg","Hello");

        //请求转发
        req.getRequestDispatcher("/req5").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

package com.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*
请求转发
 */
@WebServlet("/req5")
public class RequestDemo5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("demo5..");

        //获取数据
        Object msg = req.getAttribute("msg");
        System.out.println(msg);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

Response设置响应数据&重定向

PS:面试题:转发和重定向什么区别?
在这里插入图片描述
重定向
在这里插入图片描述

package com.web.Response;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/res1")
public class ResponseDemo1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("res1....");

        //重定向
        //1.设置响应状态码:302
        //resp.setStatus(302);
        //2.设置响应头:location
        //resp.setHeader("Location","/javaweb/res2");

        resp.sendRedirect("/javaweb/res2");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

package com.web.Response;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/res2")
public class ResponseDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("res2....");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

PS:可以重定向任意资源,比如我把resp.sendRedirect("/javaweb/res2")括号内的内容改为https://www.baidu.com
在这里插入图片描述

package com.web.Response;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/res1")
public class ResponseDemo1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("res1....");

        //重定向
        //1.设置响应状态码:302
        //resp.setStatus(302);
        //2.设置响应头:location
        //resp.setHeader("Location","/javaweb/res2");

        //简化方式完成重定向
        //动态获取虚拟目录
        String contextPath = req.getContextPath();
        
        resp.sendRedirect(contextPath+"/res2");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

Response响应字符数据

在这里插入图片描述

package com.web.Response;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

//响应字符数据:设置字符数据的响应体
@WebServlet("/res3")
public class ResponseDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        //1.获取字符输出流
        PrintWriter writer = resp.getWriter();
        writer.write("你好");
        //如果不声明,则单纯打印<h1>aaa</h1>
        //context-type:告诉浏览器h1标签
        //resp.setHeader("content-type","text/html");
        writer.write("<h1>aaa</h1>");

        //细节:流不需要关闭
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

Response响应字节数据

在这里插入图片描述

package com.web.Response;

import org.apache.commons.io.IOUtils;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;

//响应字节数据:设置字节数据响应体
@WebServlet("/res4")
public class ResponseDemo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //1.读取文件
        FileInputStream fileInputStream = new FileInputStream("D://a.jpg");

        //2.获取response字节输出流
        ServletOutputStream outputStream = resp.getOutputStream();

        //3.完成流的copy
        byte[] buff=new byte[1024];
        int len=0;
        //太复杂,所以在pom.xml文件配置工具类
        /*while((len=fileInputStream.read(buff))!=-1){
            outputStream.write(buff,0,len);
        }
         */
        IOUtils.copy(fileInputStream,outputStream);

        fileInputStream.close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值