(二)创建一个类,实现Servlet接口,并重写接口有方法。创建访问路径。
4.获取ServletConfig对象(Servlet的配置对象)(不常用)
一、Servlet是什么?
Servlet是java提供的一个动态web开发技术。就比如不同的用户看到的界面有的不同,那就是啦。
Servlet是JavaEE规范之一,其实就是一个接口。实现接口就行。
二、Servlet快速使用
(一)利用Maven将Servlet引入库
创建文本项目后,导入Servlet的jar包。如果不是最新版(tomcat10)则,以下依赖坐标
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency>
如果是最新版,不再使用Javax了,不会有人用着tomcat10版本,对着上面坐标导入了一下午,但就是看不到页面吧,不会吧,不会吧,不会那个人就是我吧。导入以下坐标。
<dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency>
(二)创建一个类,实现Servlet接口,并重写接口有方法。创建访问路径。
package com.rosen.web;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/demo")
public class ServletDemo implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("123");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
@WebServlet("/demo")就是创建访问路径。其中在service方法里输出123,代表如果你访问了前面的访问路径,就可以看到控制台输出123了。
(三)测试
用tomcat启动项目,在启动项目web路径(如果是插件启动,在控制台中,如果是直接框架编译就会弹出页面来)后,在网址后加上上面起的访问路径。如“123.0.0.1:80/javaweb_test_war/demo”访问后看控制台是否输出,如果输出,则Servlet实现成功。
三、Servlet的执行流程
(一)大致描述
首先创建web项目,实现servlet类,并且写了访问路径。把web项目发布到tomcat服务器中,服务器一启动,就可以通过路径访问。127.0.0.1:80是访问tomcat服务器。12.0.0.1:80/javaweb_test_war是访问到了web项目。12.0.0.1:80/javaweb_test_war/demo访问到了Servlet。
(二)细节描述
1.servlet对象是谁实现的
web服务器(tomcat)创建的Servlet实现的,里面的方法也是tomcat实现的。
2.服务器怎么指定Servlet中一定有service方法
因为必须实现这个接口,就必须复写这个方法
四、Servlet的生命周期
(一)对象的生命周期
指一个对象从被创建到被销毁的整个过程
(二)Servlet生命周期
Servlet运行在Servlet容器中(web服务器)中,其生命周期由容器来管理。分为四个阶段。
1.加载和实例化:默认情况下,Servlet第一次被访问时,由容器创建Servlet对象。
也可以自己设置,如图所示
·····
2.初始化:在Servlet实例化之后,容器调用Servlet的init()方法,初始化对象。完成加载配置文件,创建连接等初始化工作。该方法只调用一次。
3.请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理。
4.服务终止:当需要释放内存/关闭服务器,Servlet容器都会Servlet的destroy()方法完成资源的释放。调用后,容器就会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收
五、Servlet的方法
1.初始化方法
void init(ServletConfig servletConfig)
在Servlet创建时候执行一次,只执行一次
2.提供服务器方法
void service(ServletRequest servletRequest, ServletResponse servletResponse)
每次Servlet被访问,调用
3.销毁方法
void destroy()
当需要释放内存/关闭服务器,Servlet容器都会Servlet的destroy()方法完成资源的释放
4.获取ServletConfig对象(Servlet的配置对象)(不常用)
ServletConfig getServletConfig()
与init()方法参数对应,想要返回的化,就把init()中的参数,设置为成员变量。
5.获取Servlet信息(不常用)
String getServletInfo()
像作者,像版本,像版权。
六、Servlet的体系结构
因为web开发,针对http协议的,所以自定义的Servlet,会继承HttpServlet
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/http1")
public class ServletDemohttp1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post");
}
}
使用get和post方法,如果访问页面,自动调用get方法,post方法,必须数据传过来,才会调用。
因为原来的Servlet接口,对于数据还要判断是post还是get,而此直接把两者分开了
七、Servlet urlPattern配置
(一) 配置方式
Servlet要想被访问,必须设置访问路径
且可以配置多个访问路径
@WebServlet(urlPatterns = {"/http1","/http2","/htt3"})
(二) 配置规则:
1.精确匹配
2.目录匹配
3.拓展名匹配
注意:*.do前面不能再加其他上一层了
4.任意匹配
/就是静态资源访问不到了
八、XML配置方式编写Servlet
Servlet3.0之前的配置方式,现在都用注解方式。
在web.xml的<web-app>里配置
<servlet>
//名字自取
<servlet-name>ser1</servlet-name>
//Servlet的接口实现类
<servlet-class>com.rosen.web.ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
//自取名字
<servlet-name>ser1</servlet-name>
//url
<url-pattern>"/demo"</url-pattern>
</servlet-mapping>
会与注解方式冲突。