• Servlet 技术


    1.Servlet 技术

    a)什么是 Servlet
    1、Servlet 是 JavaEE 规范之一。规范就是接口
    2、Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序Filter 过滤器Listener 监听器
    3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。

    b)手动实现 Servlet 程序
    1、编写一个类去实现 Servlet 接口
    2、实现 service 方法,处理请求,并响应数据
    3、通过注解方式 中去配置 servlet 程序的访问地址

    @WebServlet("/HelloServlet")
    public class HelloServlet implements Servlet {
    
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            System.out.println("HelloServlet被调用了");
        }
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    c)Servlet的分发处理
    如何得知是get请求还是post请求
    使用ServletRequest的getmethod方法

    //类型转换(要使用getmethod方法)
    HttpServletRequest httpServletRequest=(HttpServletRequest)ServletRequest;
    String method=httpServletRequest.getMethod();
    这个method存的便是get或者post
    
    • 1
    • 2
    • 3
    • 4

    d) 通过继承 HttpServlet 实现 Servlet 程序
    一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。
    1、编写一个类去继承 HttpServlet 类
    2、根据业务需要重写 doGet 或 doPost 方法
    3、通过注解方式配置 Servlet 程序的访问地址

    public class ContextServlet extends HttpServlet
    {
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doPost(req, resp);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    e)Servlet 类的继承体系
    在这里插入图片描述

    2.ServletConfig 类
    ServletConfig 类从类名上来看,就知道是 Servlet 程序的配置信息类。
    Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。
    Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对象。

    a)ServletConfig 类的三大作用
    1、可以获取 Servlet 程序的别名 servlet-name 的值 getServletName()方法
    2、获取初始化参数 init-param getInitParameter()方法
    3、获取 ServletContext 对象 getServletContext()方法

           ServletConfig config=getServletConfig();
            System.out.println("别名是"+config.getServletName());
            System.out.println("初始化参数username的值是"+config.getInitParameter("username"));
            System.out.println("初始化参数url的值是"+config.getInitParameter("url"));
            System.out.println(config.getServletContext());
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.ServletContext 类
    a)什么是 ServletContext?
    1、ServletContext 是一个接口,它表示 Servlet 上下文对象
    2、一个 web 工程,只有一个 ServletContext 对象实例。
    3、ServletContext 对象是一个域对象。
    4、ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。

    域对象是什么?
    域对象,是可以像 Map 一样存取数据的对象,叫域对象。
    这里的域指的是存取数据的操作范围,整个 web 工程。
    在这里插入图片描述
    b)ServletContext 类的四个作用
    1、获取 web.xml 中配置的上下文参数 context-param 也是getInitParameter()方法
    2、获取当前的工程路径,格式: /工程路径
    3、获取工程部署后在服务器硬盘上的绝对路径
    4、像 Map 一样存取数据

      //像map一样存取数据
            ServletContext context=getServletContext();
            context.setAttribute("key1","value1");
            System.out.println("context1 中获取域数据key1值为"+context.getAttribute("key1"));
    
    • 1
    • 2
    • 3
    • 4

    4.HttpServletRequest 类
    a)HttpServletRequest 类有什么作用。
    每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。
    然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的信息

    b)HttpServletRequest 类的常用方法
    i. getRequestURI() 获取请求的资源路径

     System.out.println("URL =>"+req.getRequestURI());
    
    • 1

    ii. getRequestURL() 获取请求的统一资源定位符(绝对路径)

    System.out.println("请求头 User-Agent ==>> " + req.getHeader("User-Agent"));
    
    • 1

    iii. getRemoteHost() 获取客户端的 ip 地址

          System.out.println("客户端 ip地址 =>"+req.getRemoteHost());
         /*
            idea中使用localhost访问时,得到的客户端ip地址是---》》》127.0.0.1
            idea中使用127.0.0.1访问时,得到的客户端ip地址是---》》》127.0.0.1
            idea中使用真实ip访问时,得到的客户端ip地址是---》》》真实客户端ip地址
             */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    iv. getHeader() 获取请求头

    System.out.println("请求头 User-Agent ==>> " + req.getHeader("User-Agent"));
    
    • 1

    v. getParameter() 获取请求的参数
    vi. getParameterValues() 获取请求的参数(多个值的时候使用)
    vii. getMethod() 获取请求的方式 GET 或 POST
    viii. setAttribute(key, value); 设置域数据
    ix. getAttribute(key); 获取域数据
    x. getRequestDispatcher() 获取请求转发对象

    c)如何获取请求参数
    首先编写html页面

    <body>
    <form action="http://localhost:8080/07_servlet/parameterServlet" method="get">
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="password"><br/>
    兴趣爱好:<input type="checkbox" name="hobby" value="cpp">C++
    <input type="checkbox" name="hobby" value="java">Java
    <input type="checkbox" name="hobby" value="js">JavaScript<br/>
    <input type="submit">
    </form>
    </body>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    java代码

    // 获取请求参数
    String username = req.getParameter("username");
    String password = req.getParameter("password");
    String[] hobby = req.getParameterValues("hobby");
    System.out.println("用户名:" + username);
    System.out.println("密码:" + password);
    System.out.println("兴趣爱好:" + Arrays.asList(hobby));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    【leetcode】【剑指offer Ⅱ】050. 向下的路径节点之和
    【软考】信息安全基本要素
    第二十六章CSS3基础
    torch-geometric使用过程中的问题
    python工程打包成可执行文件
    借势热点:如何快速讲今日热点跟我们的视频结合起来?支招三把斧
    在 Node.js 中发出 HTTP 请求的 5 种方法
    Vue 3使用 Iconify 作为图标库与图标离线加载的方法、 Icones 开源在线图标浏览库的使用
    vscode_pytest_配置debug环境:增加和打印环境变量
    【多线程】线程池 详解
  • 原文地址:https://blog.csdn.net/qq_52896055/article/details/127639390