Servlet技术


1. 什么是Servlet

  1. Servlet是javaEE规范之一,接口
  2. Servlet 是JavaWeb三大组件之一。
    • Servlet程序
    • Filter 过滤器
    • Listener 监听器
  3. Servlet 是运行在服务器上的一个java小程序
    • 可以接收客户端发送来的请求,并响应数据给客户端

2. 手动实现Servlet程序

  1. 编写一个类去实现Servlet接口

  2. 实现service 方法,处理请求,并响应数据

  3. 到web.xml 中配置Servlet程序的访问地址

    <?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 标签给Tomcat配置Servlet程序-->
        <servlet>
            <!--        servlet-name 标签 servlet程序起一个别名(一般是类名)-->
            <servlet-name>HelloServlet</servlet-name>
            <!--       servlet-class 是Servlet程序的全类名-->
            <servlet-class>com.han.code.HelloServlet</servlet-class>
    
        </servlet>
        <!--     servlet-mapping标签给Servlet程序配置访问地址   -->
        <servlet-mapping>
            <!--        Servlet-name标签的作用是告诉服务器,当前配置的地址给哪个Servlet程序使用-->
            <servlet-name>HelloServlet</servlet-name>
            <!--      <url-pattern>  配置访问地址
                        / 斜杠在服务器解析时,表示地址为http://ip:port/工程路径
                        /hello  表示地址为http://ip:port/工程路径/hello
            -->
    
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
    </web-app>
    
    • 常见错误
      1. url-pattern 中配置的路径没有以斜杠开始
      2. servlet-name 配置的值不存在

3. Servlet的生命周期

  1. 执行Servlet构造器方法
  2. 执行init初始化方法

第一,二步,是在第一次访问的时候创建Servlet程序会调用

  1. 执行service方法

第三步,每次访问都会调用

  1. 执行destroy销毁方法

第四步,在web工程停止时会调用

4. GET和POST请求的分发处理

package com.han.code;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * @version 1.0
 * @ClassName HelloServlet
 * @Description 手动实现Servlet程序
 * @Author hlr
 * @Date 2021/5/24 16:25
 */
public class HelloServlet implements Servlet {

    public HelloServlet() {
        System.out.println("1  构造器方法");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2 init初始化方法");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * service方法是专门用来处理请求和响应的
     * @param servletRequest 
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3  service ==Hello Servlet 被访问了");
//        类型转换(有getMethod()方法)
        HttpServletRequest httpServletRequest=(HttpServletRequest) servletRequest;
//        获取请求方式
        String method = httpServletRequest.getMethod();

        if("GET".equals(method)){
            toget();
        }else if("POST".equals(method)){
            topost();
        }
    }
    /**
     * get请求的操作
     * @return
     */
    public void toget(){
        System.out.println("get请求");
    }
    /**
     * post请求
     * @return
     */
    public void topost(){
        System.out.println("post请求");
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
        System.out.println("4 destroy 销毁方法");
    }
}

5.通过继承HttpServlet实现Servlet程序

  • 一般在实际项目开发中,都是使用继承HttpServlet实现Servlet程序
  1. 编写一个类去继承HttpServlet类
  2. 根据业务需要重写doGet或 doPost方法
  3. 到web.xml中配置Servlet程序的访问地址
package com.han.code;

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

/**
 * @version 1.0
 * @ClassName HttpServletex
 * @Description TODO
 * @Author hlr
 * @Date 2021/5/24 18:20
 */
public class HttpServletex  extends HttpServlet {
    /**
     * doGet() 在get请求的时候调用
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("httpServlet 的get请求");
    }


    /**
     * doPost() 在post请求的时候调用
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("httpServlet 的post请求");
    }
}

6.使用IDEA直接创建Servlet程序

配置Servlet信息


文章作者: 时光路人
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 时光路人 !
评论
  目录