Servlet
创建一个get 响应
创建一个该API 的类文件
然后继承HelloServlet
编写逻辑
发起一个get 请求从请求获取name 参数
如果有这个name 参数,那么就返回hello name 的字样
没有这个name 参数那就提示传参错误1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24package com.example.demo;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class IndexServlet extends HelloServlet{
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
System.out.println("index servlet"); // 只会在终端输出,不会显示在浏览器中
// 获取一个name 参数
String name=request.getParameter("name");
PrintWriter out=response.getWriter();
if (name==null){
out.println("<h1>参数错误</h1>");
}else{
out.println("<h1>Hello "+name+"</h1>");
}
super.doGet(request, response);
}
}修改web.xml
文件在
src/main/webapp/WEB-INF/web.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<?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">
<servlet>
<servlet-name>index</servlet-name>
<servlet-class>com.example.demo.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
</web-app>主要添加了
1
2
3
4
5
6
7
8
9<servlet>
<servlet-name>index</servlet-name>
<servlet-class>com.example.demo.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>配置
<servlet>
标签的作用<servlet>
标签的作用是对 Servlet 进行定义,告知 Servlet 容器(如 Tomcat)哪一个类属于 Servlet,以及该 Servlet 的名称。其配置项如下:<servlet-name>
:为 Servlet 指定一个名称,这个名称会在后续的<servlet-mapping>
标签里使用,用来将 URL 模式和 Servlet 建立关联。它只是一个逻辑名称,能够随意命名。<servlet-class>
:指定 Servlet 类的全限定名,也就是包含完整包名的类名。Servlet 容器会依据这个类名来加载和实例化 Servlet。
配置
<servlet-mapping>
标签的作用<servlet-mapping>
标签的作用是把 URL 模式和 Servlet 名称关联起来,这样当客户端发起 HTTP 请求时,Servlet 容器就能够依据请求的 URL 来确定应该调用哪个 Servlet 进行处理。其配置项如下:<servlet-name>
:引用之前在<servlet>
标签中定义的 Servlet 名称。<url-pattern>
:指定和 Servlet 关联的 URL 模式。当客户端请求的 URL 和这个模式相匹配时,Servlet 容器就会调用对应的 Servlet 来处理该请求。
运行效果
其他请求方式
其他请求方式,只需要重载doxxx 就行
其他方式注册路由
创建一个新的类,然后添加路由的信息
1 |
|
这个是通过类前面的注解
@WebServlet(name = "getBookServlet", value = "/get/book")
这个方式进行注册
探究函数的执行顺序
1 |
|
当发起第一次携带请求的时候
Init > service(ServletRequest req, ServletResponse res) > service(HttpServletRequest req, HttpServletResponse resp) > doXX
然后我们关闭服务器
最后才会执行destroy
两个service 的执行逻辑有什么不同
service(HttpServletRequest req, HttpServletResponse resp),只能在 HttpServlet
子类中使用,支持 HTTP 协议的细节(如req.getMethod()
获取请求方法)。
service(ServletRequest req, ServletResponse res) 是 Servlet
接口的原始定义,适用于所有 Servlet(无论是否基于 HTTP),但无法直接访问 HTTP 特有的功能。