首页 > 其他分享 >2022-08-30 第五组 赖哲栋 学习笔记

2022-08-30 第五组 赖哲栋 学习笔记

时间:2022-08-31 20:34:33浏览次数:60  
标签:req 匹配 请求 08 30 第五组 println resp String

Servlet

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

  • HttpServletRequest--- req——请求
  • 所有请求的操作都用req对象来处理
  • 当有请求来的时候,req就被实例化
  • HttpServletResponse--- resp——响应
  • 所有响应的操作都用resp对象来处理
  • 当有响应来的时候,resp就被实例化
  • 当你想要给出响应时,使用resp
  • 我们要给出的响应,必须要展示在客户端(浏览器)
  • 【servlet的匹配优先级最高】
  • 如果使用路径匹配,必须有/
  • 如果使用扩展名匹配,必须没有/
  • 扩展名匹配与路径匹配无法同时设置

匹配规则

  1. 精确匹配-----------中配置的项必须与url完全精确匹配。
  2. 扩展名匹配--------以“*.”开头的字符串被用于扩展名匹配
  3. 路径匹配-----------以“/”字符开头,并以“/*”结尾的字符串用于路径匹配
  4. 缺省匹配 (默认匹配)-------/

任务

  1. Servlet就是一个普通的Java类而已。
  2. 处理请求,给出响应的类。

创建Sevlet

  1. 实现javax.servlet.Servlet接口
  2. 继承javax.servlet.GenericServlet
  3. 继承javax.servlet.http.HttpServlet

我们在开发中一般会使用第三种方法来创建Servlet。

Servlet生命周期

  1. 初始化---init方法。
    • init方法什么时候执行
      • 默认当我们第一次访问servlet的时候被调用,——延迟加载
      • 初始化方法只执行一次
  2. 实例化---构造器。
  3. 调用service方法,处理请求。
  4. 销毁---destory方法。

请求

常见的方法

System.out.println(req.getMethod()+"请求的方法");
System.out.println(req.getContextPath()+"请求的根路径");
System.out.println(req.getServletPath()+"请求的servletPath路径");
System.out.println(req.getRequestURI()+"请求的URI");
System.out.println(req.getRequestURL()+"请求的URL");
System.out.println(req.getScheme()+"请求的协议");

重要的方法——接受参数

// 接受参数,处理请求
String username = req.getParameter("username");
String password = req.getParameter("password");

接受参数

 // 接受参数,处理请求

        // 根据key获取value
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        // 复选框返回多个值
        String[] hobbies = req.getParameterValues("hobby");

        // 获取key的值,根据key的值获取value
        Enumeration<String> parameterNames = req.getParameterNames();
        while (parameterNames.hasMoreElements()) {
            String s = parameterNames.nextElement();
            String parameter = req.getParameter(s);
        }

        //获取请求中传过来键值对,返回值是一个map集合;
        // 这个map集合的key是String,value是String[];
        Map<String, String[]> parameterMap = req.getParameterMap();
        for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
            String key = entry.getKey();
            String[] value = entry.getValue();
        }

请求转发

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

作用域

  • 起作用的区域
		req.setAttribute("name","张三");
        // 获取
        System.out.println("demo04.do-------->"+req.getAttribute("name"));
        // 删除
        req.removeAttribute("name");
        req.getRequestDispatcher("/demo03.do").forward(req,resp);

响应

        // 给出响应
        // 客户端与服务端的信息传递
//        resp.setContentType("text/html;charset=utf-8");

        // 响应的字符集一定放在流之前
        // 添加响应头,告诉浏览器以HTML的格式来解析响应字符串
        resp.addHeader("content-type","text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.write("我是后台,已经接到你的请求了!!!");

            // 写字符
            writer.write("login success!!!");
            // 写字节
            writer.println("");

        // 流的操作
        writer.flush();
        writer.close();
  • 重定向
resp.sendRedirect("index.html");

Servlet的配置

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!-- 注册servlet   -->
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.jsoft.afternoon.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello.do</url-pattern>
    </servlet-mapping>


</web-app>

注解

@WebServlet("/hello.do")

面试题

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

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

GET和POST的区别

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

请求转发和重定向的区别

  • 重定向——是两次请求,是客户端行为,是浏览器的地址会发生改变,【重定向可以定义到任意地址】
  • 请求转发——是一次请求,是服务器行为,浏览器地址不会发生改变,【转发只能项目内转发】

标签:req,匹配,请求,08,30,第五组,println,resp,String
From: https://www.cnblogs.com/laizhedong/p/16644425.html

相关文章

  • 2022-08-31 第五组 赖哲栋 学习笔记
    JSPJSP脚本片段:用于在JSP页面写java代码<%%><%intnum=0;num++;System.out.println(num);//向页面打印输出out.print(num);%>注意事项......
  • 2022-08-31 第二小组 张晟源(javaweb,el,jstl,分页查询)
    JavaWeb一,JSPJSP(全称JavaServerPages),运行在服务端的语言<%//java代码%>1.JSP脚本只能有java代码,在访问JSP时,JSP引擎翻译JSP页面中的脚本2.J......
  • 20220829 第一组 于芮 Vue坏人Tomcat入门
     小白成长记——第三十七天    这几天的主要学习内容就是Vue以及简单的Tomcat在ideal中的配置,总体来说说学习内容很多,每天都很充实,时间都用来学习,整个人都很开心......
  • 08. Prometheus - 查询持久化与服务发现
    查询持久化前面编写的PromQL都是一次性的,下次使用需要重写编写。为了方便以后拿来即用,Prometheus提供了在配置文件中的持久化方案。cd/ezops/service/prometheus/con......
  • 2022-08-31
    1、因为.trimmed()方法不能去除字节之间的空格,而只能去除整个数据包的前后空格,所以为了方便起见而又不脱离方便人阅读的情况下,需要在写入txt时不能使用.toHex(‘’),也就是......
  • 30. SQL--check:检查性约束
    1.前言sqlcheck约束(检查性约束)用来限制字段的取值范围。您可以在check约束中添加限制条件,只有满足这些条件的值才允许进入该字段。您可以为一个字段或者多个字段定......
  • TPA3045-ASEMI光伏二极管TPA3045
    编辑-ZTPA3045是一款光伏逆变器二极管。TPA3045的浪涌电流Ifsm为300A,漏电流(Ir)为0.1mA,其工作时耐温度范围为-55~200摄氏度。TPA3045采用肖特基势垒芯片,典型热阻(ReJA)为0.8......
  • ASEMI光伏二极管GMK3045,GMK3045参数,GMK3045规格
    编辑-ZASEMI光伏二极管GMK3045参数:型号:GMK3045重复峰值反向电压(VRRM):45V最大有效值电压(VRMS):31.5V平均整流输出电流(IO):30A浪涌(非重复)正向电流(IFSM):600A热阻(典型值)(ReJA):1.......
  • 前端面试题每日3题——2022/08/30
    1以下代码执行后,控制台中的输出内容为?for(leti=0;i<3;i++){setTimeout(()=>{console.log(i);});}for(varj=0;j<3;j++){setTimeout......
  • P3808 【模板】AC 自动机(简单版)
    题目链接代码#include<iostream>#include<cstdio>usingnamespacestd;constintN=1000010;intn;charstr[N];inttr[N][26],cnt[N],idx;intfail[N],q[N];......