• 2022.08.30 Servlet


    目录

    1.Servlet

    生命周期

    请求

    作用域

    响应

    面试题


    1.Servlet

    除了form表单之外都是get请求

    • HttpServletRequest--- req——请求

    • 所有请求的操作都用req对象来处理

    • 当有请求来的时候,req就被实例化

    • HttpServletResponse--- resp——响应

    • 所有响应的操作都用resp对象来处理

    • 当有响应来的时候,resp就被实例化

    • 当你想要给出响应时,使用resp

    • 我们要给出的响应,必须要展示在客户端(浏览器)

    • 【servlet的匹配优先级最高】

    • 如果使用路径匹配,必须有/

    • 如果使用扩展名匹配,必须没有/

    • 扩展名匹配与路径匹配无法同时设置

      1. /

    生命周期

    初始化

    • init方法什么时候执行
      • 默认当我们第一次访问servlet的时候被调用,——延迟加载
      • 初始化方法只执行一次

    请求

    • 常用的方法
    1. System.out.println(req.getMethod()+"请求的方法");
    2. System.out.println(req.getContextPath()+"请求的根路径");
    3. System.out.println(req.getServletPath()+"请求的servletPath路径");
    4. System.out.println(req.getRequestURI()+"请求的URI");
    5. System.out.println(req.getRequestURL()+"请求的URL");
    6. System.out.println(req.getScheme()+"请求的协议");
    • 重要的方法——接受参数
    1. // 接受参数,处理请求
    2. String username = req.getParameter("username");
    3. String password = req.getParameter("password");

    接受参数

    1. // 接受参数,处理请求
    2. // 根据key获取value
    3. String username = req.getParameter("username");
    4. String password = req.getParameter("password");
    5. // 复选框返回多个值
    6. String[] hobbies = req.getParameterValues("hobby");
    7. // 获取key的值,根据key的值获取value
    8. Enumeration parameterNames = req.getParameterNames();
    9. while (parameterNames.hasMoreElements()) {
    10. String s = parameterNames.nextElement();
    11. String parameter = req.getParameter(s);
    12. }
    13. //获取请求中传过来键值对,返回值是一个map集合;
    14. // 这个map集合的key是String,value是String[];
    15. Map parameterMap = req.getParameterMap();
    16. for (Map.Entry entry : parameterMap.entrySet()) {
    17. String key = entry.getKey();
    18. String[] value = entry.getValue();
    19. }

    请求转发

    • 由多个servlet来处理一个请求
    • 请求转发是在服务器上完成的,根客户端无关

    作用域

    • 起作用的区域

      1. req.setAttribute("name","张三");
      2. // 获取
      3. System.out.println("demo04.do-------->"+req.getAttribute("name"));
      4. // 删除
      5. req.removeAttribute("name");
      6. req.getRequestDispatcher("/demo03.do").forward(req,resp);

    响应

    1. // 给出响应
    2. // 客户端与服务端的信息传递
    3. // resp.setContentType("text/html;charset=utf-8");
    4. // 响应的字符集一定放在流之前
    5. // 添加响应头,告诉浏览器以HTML的格式来解析响应字符串
    6. resp.addHeader("content-type","text/html;charset=utf-8");
    7. PrintWriter writer = resp.getWriter();
    8. writer.write("我是后台,已经接到你的请求了!!!");
    9. // 写字符
    10. writer.write("login success!!!");
    11. // 写字节
    12. writer.println("");
    13. // 流的操作
    14. writer.flush();
    15. writer.close();
    • 重定向

    •         resp.sendRedirect("index.html");
      

    面试题

    路径配置中【/与/*有什么区别】

    • 【/*】——属于路径匹配,可以匹配所有的请求,路径匹配的优先级仅次于精确匹配的
      • 会覆盖所有的扩展名匹配,非常恶劣的匹配规则(语法)
    • 【/】——是servlet中的特殊匹配模式,优先级最低,不会覆盖任何的【url-patter】,匹配所有的请求
    • /和/*拦截静态资源

    GET和POST的区别

    • GET:请求的参数会在浏览器的地址栏中显示,不安全;请求的长度限制在1k之内
      • 没有请求体,无法通过request去设置参数。
    • POST:请求的参数不会在浏览器的地址栏中显示,安全;没有长度限制
      • 有请求体

    请求转发和重定向的区别

    • 重定向——是两次请求,是客户端行为,是浏览器的地址会发生改变,【重定向可以定义到任意地址】
    • 请求转发——是一次请求,是服务器行为,浏览器地址不会发生改变,【转发只能项目内转发】
  • 相关阅读:
    Tomcat
    快速排序的优化
    初学yolov5。
    React批处理原理及性能优化实践
    k8s实战入门
    【【萌新的RiscV学习之在写代码之前对于关键路径的分析-11】】
    linux 内核层进程创建do_fork分析
    SpringBoot到底是什么?
    开服当GM的基本准则
    vue3总结(未完~)
  • 原文地址:https://blog.csdn.net/weixin_72727863/article/details/126704187