Servelet的运行流程

时间:2024-5-7    作者:老大夫    分类: JavaWeb


  1. ServeLet需要在Tomcat中运行,所以创建项目时一定要引入tomcat依赖,否则你会发现没法继承HttpServlet,或者没法实现Servlet接口

  2. 浏览器 给服务端 发送 请求报文

  3. tomcat接收到请求报文后,会给它封装在一个 httpservletRequest 对象中,也会生成一个 httpservletResponse 对象用来返回报文

  4. 创建一个service方法,参数放入 httpservletRequest 对象和httpservletResponse 对象作为参数

  5. request作为传入的数据,response作为返回的数据, 具体的业务代码在service方法体中

  6. service类也必须 实现 servlet接口,以保证代码标准的统一,可以继承HttpServlet这样不用把所有方法都实现,比较方便。

public class UserServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.service(req, resp);
    }
}

实现的service注意参数是HttpServletRequest req, HttpServletResponse resp的那一个,不要错误实现另一个同名的service方法。

例子:

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<form method="get" action="userServlet">
    用户名<input type="text" name="username"><br>
    <input type="submit" value="校验">

</form>
</body>
</html>

com.atguigu.UserServlet.java

package com.atguigu;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;
/**
 * 在web.xml中配置servlet 对应请求路径
 */
public class UserServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.从对象中获得任何请求中的数据(这里是username)
        String username = req.getParameter("username"); //根据参数名获取参数值 无论参数是在url?后还是在请求体中

        String info="YES";
        //2.处理业务数据
        if("atguigu".equals(username)){
            info="NO";
        }
        //3.将想要相应的数据放入response
        //应该设置content-type响应头
        //resp.setHeader("Content-Type","text/html");
        resp.setContentType("text/html");
        PrintWriter writer = resp.getWriter();  //该方法是获取一个向响应体中打印字符串的 打印流
        writer.write(info);

    }
}

web.xml
分为两块看就好了,第一部分java包和它的别名第二部分是前端访问地址和它的别名,这两个别名一致就可以对应上了。
之后使用注解就可以不用配置xml了 使用@WebServlet("/aaa")这样注解就可以了

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
         version="6.0">
    <!--
    1. 配置servlet类,并起一个别名
        servlet-class    用于告诉tomcat需要实例化的类,tomcat通过反射创造对象调用方法
        servlet-name    用于关联请求的映射路径
    -->
    <servlet>
        <!--给class包起一个别名-->
        <servlet-name>userSevlet</servlet-name>
        <!--class包的位置-->
        <servlet-class>com.atguigu.UserServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <!--前端映射别名-->
        <servlet-name>userSevlet</servlet-name>
        <!--前端请求的地址-->
        <url-pattern>/userServlet</url-pattern>
    </servlet-mapping>
</web-app>


扫描二维码,在手机上阅读

推荐阅读: