Servlet
Servlet(server applet)是运行在服务端(tomcat)的Java小程序,是sun公司提供的一套定义动态资源的规范,从代码层面讲servlet就是一个接口.用来接收-处理客户端请求,响应给浏览器的动态资源.在整个Web应用中,Servlet主要负责接收处理请求,协同调度功能以及响应数据,可以将其称为Web应用中的控制器.
当客户端向服务器发送请求报文后,tomcat会接收到该请求,同时将请求报文的信息转换为一个HttpServletRequest对象.该对象中包含了请求中所有信息(请求行,请求头,请求体).
tomcat同时还创建了一个HttpSetvletResponse对象,该对象用于承装要响应给客户端的信息,后面该对象会被转换成响应的报文(响应行,响应头,响应体).
在接收到客户端的请求后,我们需要自己创建servlet类并实现Servlet接口,tomcat根据请求中的资源路径找到对应的servlet,将该servlet实例化,调用其中实现的service()方法,同时将HttpServletRequest和HttpServletResponse对象传入.
在得知servlet和tomcat的特性之后,我们可以自己创建一个serlvet进行测试,继承HttpServlet,实现doGet()方法,使用@WebServlet()注解配置访问路径.将这个web项目配置到tomcat中后启动.
@WebServlet("/testServlet")
public class TestServlet extends HttpServlet {
@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("TestServlet doGet");resp.getWriter().write("Test1");}
}
Web项目
maven创建一个空项目后,在pom文件中将packaging设置为war,刷新maven后
<groupId>com.otnios.servlet</groupId><artifactId>servlet_test</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging>
在Project Structure>Facets下会出现Web,我们需要见进去给该模块添加web.xml,需要注意绿框中圈中的路径要一致.
Tomcat配置
按照下面截图操作,操作完直接启动tomcat就完事了.
Application context为访问路径
WebServlet注解不生效
解决方法一:
在web.xml中添加metadata-complete="false",为false表示同时支持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="false">
</web-app>
解决方法二:
查看自己tomcat版本,如果是tomcat10以上,maven中导入的servlet包需要改成
<!-- Servlet API tomcat10 对应的servlet为5.0.0 --><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>5.0.0</version><scope>provided</scope></dependency>