• request&response笔记


    request:用来封装HTTP请求消息

    request作用

    • 操作请求三部分(行,头,体)

    • 请求转发

    • 作为域对象存数据

    获取客户机信息(操作请求行)

    请求方式 请求路径(URI) 协议版本

    GET /day17Request/WEB01/register.htm?username=zs&password=123456 HTTP/1.1

    • getMethod();获取请求方式

    • getRemoteAddr() ;获取客户机的IP地址(知道是谁请求的)

    • getContextPath();获得当前应用工程名(部署的路径);

    • getRequestURI();获得请求地址,不带主机名

    • getRequestURL();获得请求地址,带主机名

    • getServerPort();获得服务端的端口

    • getQueryString();获的请求参数(get请求的,URL的?后面的. eg:username=zs&password=12345

    操作请求头

    • getHeader(String name);

      • User-Agent: 浏览器信息

      • Referer:来自哪个网站(防盗链)

    操作请求体:

    一、操作请求参数:

    方法名描述
    String getParameter(String name) 获得指定参数名对应的值。如果没有则返回null,如果有多个获得第一个。 例如:username=jack
    String[] getParameterValues(String name) 获得指定参数名对应的所有的值。此方法专业为复选框提供的。 例如:hobby=抽烟&hobby=喝酒&hobby=敲代码
    Map<String,String[]> getParameterMap() 获得所有的请求参数。key为参数名,value为key对应的所有的值。
    //解决post方式乱码问题,get方式优化了,不会有乱码问题
            request.setCharacterEncoding("utf-8");
            //获得一个值的情况(获得用户名和密码)
            String usname = request.getParameter("username");
            String password = request.getParameter("password");
            System.out.println(usname + ":" + password);
    
            System.out.println("---------------------------");
            //获取多个值的情况
            String[] hobbyArray = request.getParameterValues("hobby");
            String hobbyStr = Arrays.toString(hobbyArray);
            System.out.println(hobbyStr);
    
            //获得所有key和值,得到Map
            Map<String, String[]> map = request.getParameterMap();
            Set<String> keySets = map.keySet();
            for (String keySet : keySets) {
                String[] strings = map.get(keySet);
                System.out.println(keySet+":"+Arrays.toString(strings));
            }
    使用java包的方式:
    public
    class User implements Serializable { private String username; private String password; private String gender; private String[] hobby; ..... ----------------------- //获得所有的请求参数 Map<String, String[]> parameterMap = request.getParameterMap(); //将请求参数封装到User对象中 User user = new User(); //使用BeanUtils框架自动将map中的数据封装到对象中 try { BeanUtils.populate(user,parameterMap); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); }
    //注意:java包放在WEB-INF中

    requet作为域对象存取值:

    相比ServletContext: 

    • ServletContext:的范围是整个应用的,(无论请求多少次,只要在这个应用里就可以)
    • requte:只能在同一次请求中进行数据共享
    发送
    String username = "周杰";
            request.setAttribute("name", username);
            //请求跳转到ServletDemo03
            request.getRequestDispatcher("demo22").forward(request,response);
    ----------------------------------
    取
    System.out.println(request.getAttribute("name"));

    response:

    常用状态码:

    • 200 成功

    • 302 重定向

    • 304 读缓存

    • 404 客户端错误

    • 500 服务器错误

    常用的响应头

    Refresh: 定时跳转 (eg:服务器告诉浏览器5s之后跳转到百度)

    Location:重定向地址(eg: 服务器告诉浏览器跳转到xxx)

    Content-Disposition: 告诉浏览器下载

    Content-Type:设置响应内容的MIME类型(服务器告诉浏览器内容的类型)

    重定向:
    response.setStatus(302); response.setHeader("Location", "https://www.baidu.com");

    解决字符流输出中文乱码问题

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

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获得客户端要下载的那个文件名
            String fileName = request.getParameter("fileName");
            //设置下载文件的mime-type
            String mimeType = getServletContext().getMimeType(fileName);
            response.setHeader("Content-Type",mimeType);
            //使用字节输入流读取客户端要下载的那个文件
            InputStream resourceAsStream = getServletContext().getResourceAsStream("file/" + fileName);
            //使用字节输出流,将图片输出到浏览器
            ServletOutputStream outputStream = response.getOutputStream();
            //输出前,通过响应头的方式,只是客户端下载文件
            String encode = URLEncoder.encode(fileName, "UTF-8");
            //我们先将fileName进行URL编码:
            response.setHeader("Content-Disposition","attachment;filename="+encode);
            IOUtils.copy(resourceAsStream, outputStream);
            resourceAsStream.close();
            outputStream.close();
        }
  • 相关阅读:
    无法启动IIS Express Web服务器 端口"1025"正在使用
    mysql查看是否锁表并解除锁
    C#的栈
    面向对象VS面向过程
    Visual Studio包管理器NuGet 依赖管理
    Vue中的Promise.all()
    【1024练习】Mybatis练习三
    【1023练习】MyBatis练习二
    【练习】mybatis
    【练习】json数组,以及json对象数组循环在页面的选择下拉框,ul列表,table等中显示出来
  • 原文地址:https://www.cnblogs.com/YwhsR0129/p/13816376.html
Copyright © 2020-2023  润新知