介绍servlet之前,先看看客户端向服务器请求资源,服务器怎么响应资源的,如下图:
Servlet发展史
Servlet是一种用于Web开发的Java技术,最初是由Sun Microsystems开发,后来被Oracle收购。Servlet的发展史可以分为以下几个阶段:
-
Servlet 1.0:1997年发布,它提供最基本的Servlet API,包括Servlet接口、ServletRequest接口、ServletResponse接口等。
-
Servlet 2.0:1998年发布,这个版本引入了Session管理、Cookie等功能,并提供了更加灵活的Servlet配置方式。
-
Servlet 2.1:2000年发布,这个版本加入了过滤器(Filter)功能,可以将请求传递给多个Servlet处理。
-
Servlet 2.2:2002年发布,这个版本加入了JSP(JavaServer Pages)支持,使得Servlet和JSP可以结合使用。
-
Servlet 2.3:2001年发布,这个版本加入了Web应用上下文组件和监听器等功能。
-
Servlet 2.4:2003年发布,这个版本引入了标注(annotation)功能,使得开发人员可以更加方便地使用Servlet API。
-
Servlet 2.5:2006年发布,这个版本引入了注解配置方式,使得Servlet应用程序的配置更加简单、灵活。
-
Servlet 3.0:2009年发布,这个版本加入了异步处理、注解方式的安全控制、文件上传等功能。
-
Servlet 3.1:2013年发布,这个版本加入了NIO2支持、Servlet和Web Socket的结合等新特性。
随着Servlet API的不断完善,Java Web开发变得越来越简单、方便。目前最新的Servlet规范是Servlet 4.0,它于2017年发布,其中包括了HTTP/2支持、HttpServletMapping注解、事件机制等新特性。
什么是Servlet?
Servlet是一种Java技术,通常用于构建基于Web的应用程序。Servlet在Web服务器上运行,并通过HTTP协议来与客户端进行通信。Servlet可以接收HTTP请求并生成HTTP响应,以便实现Web应用程序的功能。
Servlet可以执行以下操作:
-
接收HTTP请求:Servlet可以获取HTTP请求中的参数、头信息和请求体等内容。
-
处理HTTP请求:Servlet可以执行业务逻辑,对HTTP请求进行处理。
-
生成HTTP响应:Servlet可以发送HTTP响应,包括HTTP头信息和响应体。
-
访问数据源:Servlet可以连接到数据库或其他数据源,从而访问和处理数据。
-
与其他Web组件交互:Servlet可以与其他Web组件,如JSP、HTML页面、标准JavaBean等互动,以构建完整的Web应用程序。
了解了servlet是什么,我们现在看一下下面这个图:
话不多说,那下一步我们开始上手代码,创建一个servlet,这里需要导入servlet的jar包,servlet继承HttpServlet,然后重写doGet和doPost方法
package com.qcnel;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().write("进入了servlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
pom.xml依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
如果需要运行servlet项目,还需要在web.xml中配置servlet的映射路径,一个是servlet的注册,一个是servlet的请求路径
创建web项目,会默认有index.jsp,这里我除了创建servlet,还创建了html
在运行项目之前,先看一下我项目的默认路径
启动项目,会默认走index.jsp,要是想走servlet项目或者html就必须先写它,例如:http://localhost:8080/s1/hello
访问默认路径,结果如下:
http://localhost:8080/s1/
访问servlet路径,结果如下:
访问html,结果如下:
总结:配置servlet和静态页面,在浏览器输入请求路径,然后跳转到该页面。在idea中,配置web项目,默认会有index.jsp页面,当配置好tomcat后,修复fix的时候,如果没有填写路径,进入浏览器就是该路径,运行tomcat就会跳转index.jsp页面,自己可以加页面,但必须在index.jsp这个页面路径的前提下,如果要配置servlet项目,servlet项目的路径就是index.jsp的路径加上servlet项目的路径
有人想过servlet为什么需要映射吗?
Servlet 需要映射,是为了让服务器能够正确地找到并处理客户端请求,并将响应返回给客户端。具体来说,通过映射,可以将客户端请求的 URL 映射到相应的 Servlet 类,并由该类处理请求,并生成响应结果。如果没有映射,服务器将无法知道客户端请求的是哪个 Servlet,也无法返回正确的响应。因此,映射对于 Servlet 的正常运行是至关重要的。
web.xml中是配置我们web的核心应用
拓展:
我们可以在servlet映射路径修改成/*,*是通配符,所以输入任何字符,都会走servlet这个页面
Mapping问题
1.一个servlet可以指定一个映射路径
2.一个servlet可以指定多个映射路径
3.一个servlet可以指定通用映射路径
4.指定一些后缀或者前缀等等
优先级问题
指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求