Servlet相关知识
Servlet 和 HTTPservlet
Servlet
Servlet是一个接口(Interface),它定义了处理客户端请求的通用方法,包括service()、init()、destroy()等。开发者需要实现Servlet接口,并覆盖这些方法来编写自己的Servlet类。
HTTPservlet
HttpServlet是一个抽象类(Abstract Class),HttpServlet类已经实现了Servlet接口中的方法,但需要开发者进一步覆盖doGet()、doPost()、doPut()等方法来处理具体的HTTP请求。
总结一下
- Servlet是Java编写的服务器端组件,运行在Web服务器(Tomcat)中。
- 它可以接收来自客户端的请求并生成响应。
- Servlet通过扩展javax.servlet.Servlet接口或继承
- 通过HttpServlet 类来实现。
- Servlet主要用于处理业务逻辑,
- 如数据处理
- 数据库访问
- 调用其他Java组件等。
Servlet的特点:
- 提供了灵活的请求处理和响应生成能力。
- 通过HttpServletRequest对象接收请求参数和数据。
- 通过HttpServletResponse对象生成响应内容。
- 可以通过配置URL映射将Servlet与特定的URL路径关联。
Tomcat
- Tomcat服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器。
- 在中小型系统和并发访问用户不是很多的场合下被普遍使用
创建项目:将Tomcat 和Servlet 结合起来
首先创建一个Tomcat的javaweb项目,具体信息可以看我的上一篇文章:
Java web开发02.2 配置Tomcat10.1 和IDEA
当项目创建成功之后,系统会自动创建一个HelloServlet类代码如下。
HttpServlet详解
以下是HttpServlet的代码
package com.example.login;
import java.io.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;
@WebServlet(name = "helloServlet", value = "/hello")
//Tomcat 就是找到对应的hello
public class HelloServlet extends HttpServlet {
private String message;
public void init() {
message = "Hello World!";
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
//request 输入流 获取网页端 数据
//response 输出流 向网页端 写入数据
// 设置响应内容类型为文本/html
response.setContentType("text/html");
//相应文本的具体内容(用户看到的网页)
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>" + message + "</h1>");
out.println("</body></html>");
}
public void destroy() {
}
}
在这个类的开头,可以看到这一行注释。\
@WebServlet(name = "helloServlet", value = "/hello")
通过理解请求处理的过程,我们可以知道这个注释的意思
- Tomcat运行
- Tomcat得到Get请求(注意从始至终我们没有创建过)
- Tomcat服务器会根据请求的URL匹配相应的Servlet。
- 比如 http://localhost:8080/Login_war_exploded/hello (注意 这个URL有 /hello)
- 对应的就是注释中的 value = "/hello"
- 通过这个value,Tomcat会找到对应的HelloServlet类
- 通过一个线程,启动HelloServlet,并自动运行doGet方法
所以Tomcat的作用就是:根据HTTP请求,找到对应的HelloServlet类,自动创建该类并运行doGet方法
HelloServlet类代码解析
除此之外,在HelloServlet类中可以看到有几个函数:
- init():HelloServlet创建的时候自动调用
- doGet():用于处理HTTPGET请求
- request: 输入流,获取网页端数据(也就是用户传给服务器的数据)
- response: 输出流,向网页端写入数据(也就是用户看到的网页)
- destroy():HelloServlet销毁的时候自动调用