Java入土--Servlet入门
Servlet
servlet 是由 Tomcat 创建的,运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
使用 Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
Servlet 是独立于平台的,因为它们是用 Java 编写的。
快速入门
- 创建 Web 项目,导入 Servlet 依赖坐标
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
//配置Tomcat的maven环境
<build>
<!--插件-->
<plugins>
<!--具体插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
- 创建:定义一个类,实现 Servlet 接口,并重写接口中的方法,并且在 service 方法中输入一句话。
public class ServletDemo1 implements Servlet{
public void service(){
//方法体
}
}
- 配置:在类上使用@WebServlet 注解,配置该 Servlet 的访问路径。
@WebServlet("/demo1",loadOnStartup =1)
/*loadOnStartup是负整数时,
第一次访问时创建,0或正整数时,
服务器启动时创建对象,数字越小优先级越高。
*/
public class ServletDemo1 implements Servlet{
public void service(){
//方法体
}
}
- 启动 Tomcat,浏览器中输入 URL 访问 Servlet
http://localhost:8080/web-demo/demo1
执行流程
localhost:8080 访问到 tomcat 服务器,web-dem0 访问到项目,/demo1 访问到了对应的 servlet。
在启动时,tomcat(Web 服务器)创建 servlet 对象,并且调用其中的 service 方法。
SErvlet 生命周期
生命周期是指一个对象从创建到销毁的过程,
Servlet 是运行在 Servlet 容器(Web 服务器,Tomcat)中,其生命周期由容器来管理,分为四个阶段。
- 加载和实例化阶段,默认情况下第一次访问 Servlet 时,由容器创建。
- 初始化阶段,在 servlet 实例化后,容器将调用 servlet 的 init()方法完成配置等初始工作,该方法只调用一次
- 请求处理,每次请求 servlet 时,servlet 容器都会调用 service 方法对请求进行处理。
- 服务终止,当需要释放内存或关闭服务器时,调用 destroy()方法,释放资源。
@WebServlet(value = "/demo1",loadOnStartup = 1)
public class ServletDemo1 implements Servlet {
//提供服务,每一次被访问是都会被访问
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello world--");
}
//完成初始化的方法,默认情况下,servlet第一次被访问时调用,且只调用一次
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("innit--");
}
//销毁方法,内存释放时或者服务器关闭时会调用一次,且只能调用一次。
public void destroy() {
System.out.println("destroy--")
}
}
Servlet 体系结构
我们将来开发 B/S 架构的 web 项目。都是针对 HTTP 协议,所以我们自定义 Servlet,继承 HttpServlet,然后重写 doGet 和 doPost 方法。
@WebServlet("/demo2")
//基于HttpServlet的开发
public class ServletDemo2 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 请求的参数会在请求体中,不同的请求方式,进行分别处理,所以我们要调用不同的方法。
HttpServlet 会根据请求方式的不同调用不同的方法。
urlPattern 配置
Servlet 要想被访问,必须配置其访问路径(urlPattern)
1、 一个 Servlet 可以配置多个 urlPattern.
@WebServlet(urlPatterns={"/demo1","/demo2"})
- 匹配规则
- 精确匹配:配置路径与访问路径相同
@WebServlet(urlPatterns = "/demo2")
localhost:8080/maven_test1/demo2
- 目录匹配
@WebServlet(urlPatterns = "/user/*")
localhost:8080/maven_test1/user/aa;
localhost:8080/maven_test1/user/bb;
在目录匹配中,优先精确匹配。
- 扩展名匹配
@WebServlet(urlPatterns = "*.do")
localhost:8080/maven_test1/aa.do;
localhost:8080/maven_test1/bb.do;
- 任意匹配
@WebServlet(urlPatterns = "/")
@WebServlet(urlPatterns = "/*")
localhost:8080/maven_test1/aa;
localhost:8080/maven_test1/bb;
XML 配置方式编写 Servlet
<servlet>
<servlet-name>simple</servlet-name>//我们定义的servlet应用名字
<servlet-class>cn.mldn.lxh.servlet.SimpleServlet</servlet-class> //我们定义的servlet应用名字对应的具体servlet文件
</servlet>
<servlet-mapping> //地址映射
<servlet-name>simple</servlet-name> //我们定义的servlet应用名字
<url-pattern>/demo</url-pattern> //地址名
</servlet-mapping>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?