Servlet
Servlet:开发动态web的技术
全称Java Servlet。是用Java编写的服务器端程序,其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类。
API应用程序编程接口
如果你想开发一个servlet程序,只需要完成两个步骤:
- 编写一个类,实现servlet接口
- 把开发好的Java类部署到web服务器中
总结:把实现了servlet接口的Java程序叫做servlet。
HelloServlet
servlet接口 sun公司有两个默认的实现类:HttpServlet,GenericServlet
重写快捷键:CTRL+o,按shift可以多选
实例化快捷键alt+enter
步骤:
- 构建一个基本的maven项目。
- 删掉里面所有的东西:idea配置不能删,pom.xml不能删,src可以删
- 在项目里面建立Module。这个原始的空的就是maven的主工程。
- 配置maven中jar.和servlet依赖
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
- 关于maven父子工程:
1.父项目中会有:module<modules> <module>Servlet-01</module> </modules>- 子项目中会有parent
<parent> <groupId>com.xin</groupId> <artifactId>javaweb-02-Servlet</artifactId> <version>1.0-SNAPSHOT</version> </parent>- 父项目中的Java子项目可以直接使用(多态)
- 把新建的maven里的main-web-inf-web.xml改成最新的。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
</web-app>
- 将maven文件搭建完整,新建Java目录
- 编写一个servlet程序
- 编写一个普通类
- 实现servlet接口,直接继承HttpServlet
public class HelloServlet extends HttpServlet {
@Override
//由于get.post只是请求实现的不同方式,可以相互调用,业务逻辑都一样
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
//输出流,有输出就有输入
// ServletOutputStream outputStream = resp.getOutputStream();
PrintWriter writer = resp.getWriter();//响应流
writer.print("HelloServlet");
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//super.doPost(req, resp);直接调用doget方法,只在上面写方法就可以了。
doGet(req,resp);
}
}
- 编写servlet的映射:我们写的是Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务器中注册我们写的servlet,还需要给他一个浏览器能够访问的路径。
配置servlet
//注册servlet
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.xin.servlet.HelloServlet</servlet-class>
</servlet>
//请求路径
<servlet-mapping>
//需要和上方name一致
<servlet-name>hello</servlet-name>
//路径是用户访问的外部路径,只需要符合url路径规则即可。是动态web路径
<url-pattern>/hello</url-pattern>
</servlet-mapping>
- 配置tomcat
注意配置项目发布的路径,不是上方的路径 - 启动测试
![屏幕截图 2025-08-23 184304]()
在我们自己配置的tomcat路径下,输入我们在web.xml输入的路径地址,target中classes中就是我们编写Java类。
原理
Servlet是web服务器调用,web服务器在收到浏览器请求之后,会:

web服务器就比如tomcat.
mapping
-
一个servlet可以指定一个映射路径
<servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> -
一个servlet可以指定多个映射路径
<servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello2</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello3</url-pattern> </servlet-mapping> -
一个servlet可以指定通用映射路径
<servlet-mapping> <servlet-name>hello</servlet-name> //hello下的任何路径都可以被映射,即使是我们没写过的路径也可以,会直接映射hello里面的 <url-pattern>/hello/*</url-pattern> </servlet-mapping> -
默认请求路径:通配符:/* :会进入local host
-
指定一些后缀或者前缀:当去掉/,也就是*前面不能加映射路径。如:
*。xin,运行tomcat时,先会进入localhost,当我们输入自己指定的后缀xin为路径,如abcd。xin,依旧会进入helloservlet。只要以指定后缀结尾,前面怎么加都可以。 -
优先级问题:
指定了固有的映射路径优先级最高,没有指定的才会走到默认得到。
error
用来处理404情况
package com.xin.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class ErrorServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter writer = resp.getWriter();
writer.print("<h1>404</h1>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doPost(req, resp);
doGet(req, resp);
}
}
配置servlet
<servlet>
<servlet-name>error</servlet-name>
<servlet-class>com.xin.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
启动测试:

若此时再输入我们自己指定的映射路径hello:

因为指定的路径优先级高于默认的路径。


浙公网安备 33010602011771号