Servlet不用再学了?扯淡!!!

·  阅读 274

之前看到有的公众号主说 JSP/Servlet 不用学了,真是惊到我了。。。。。。天下之大,无奇不有。Servlet 是前后端交互的基石,不学 Servlet 你永远不知道前端请求是如何发送到后端的,你也不知道 Web 容器的工作机制是怎样的。这里我先给大家讲一下Servlet的一些基本原理。                    

1.servlet的作用 servlet的作用是实现动态web,Tomcat10之后的servlet依赖包不是javax

javax.servlet,而是jakarta.servlet。如果导入javax.servlet服务器会报500 xxservlet 不存在。需要更新为以下依赖。

<dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>5.0.0</version>
            <scope>provided</scope>
</dependency>

<dependency>
            <groupId>jakarta.servlet.jsp</groupId>
            <artifactId>jakarta.servlet.jsp-api</artifactId>
            <version>3.0.0</version>
            <scope>provided</scope>
</dependency>
复制代码

httpServlet和servlet的关系如下图:

在这里插入图片描述

2.servlet原理及配置 2.1原理图

在这里插入图片描述

2.2 配置及源码 在查看servlet源码的过程中,发现HttpServlt中请求最终都会指向错误,因此必须继承HttpServlet重写对应的请求方法。

报错代码:

首先在web.xml中配置servlet的路径及映射,如下:

继承了HttpServlet类的子类代码,直接使用父类的doGet

public class TestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("test 的 servlet");
        super.doGet(req, resp);
    }
复制代码

响应结果:

在这里插入图片描述

修改web.xml中servlet类为重写了doGet方法的类

配置:

代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Hello World!</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Hello Servlet!</h1>");
        out.println("Method: " + request.getMethod());
        out.println("Request URI: " + request.getRequestURI());
        out.println("Protocol: " + request.getProtocol());
        out.println("PathInfo: " + request.getPathInfo());
        out.println("Remote Address: " + request.getRemoteAddr());
        out.println("</body>");
        out.println("</html>");
    }
复制代码

输出:

分类:
后端
标签: