JavaWeb—Servlet详解

前言:

本章节主要学习Servlet基础知识点,收录于JavaWeb系列,该系列主要讲解Servlet、JSP、Filter过滤器、Session、分层开发概念等知识点,欢迎童鞋们互相交流。觉得不错可以三连订阅喔。

目标:

一、概念

二、入门程序

[1. 创建Servlet类](#1. 创建Servlet类)

[2. 配置Servlet](#2. 配置Servlet)

[2.1 注解配置](#2.1 注解配置)

[2.2 web.xml配置文件](#2.2 web.xml配置文件)

[2.3 小结](#2.3 小结)

[3. 运行效果](#3. 运行效果)

[4. 执行流程](#4. 执行流程)

三、Servlet生命周期


内容:

一、概念

Servlet是sun公司提供的一门用于开发动态web资源的技术。该技术可以通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。

二、入门程序

1. 创建Servlet类
java 复制代码
package com.qls.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 继承HttpServlet类
 * */
public class ServletDemo extends HttpServlet{

	/**
	 * HttpServlet类中有两个方法:doGet()方法、doPost()方法
	 * doGet()方法接收HttpGet请求,doPost()方法接收HttpPost请求
	 */
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//响应客户端		
		resp.getWriter().print("<h1>hello</h1>");
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	
	}
}
2. 配置Servlet

Servlet类地址无法被客户端访问,需要将类地址映射为请求地址。

配置方式有两种,分别为注解配置和web.xml配置,两者作用相同。

2.1 注解配置

@WebServlet("映射地址")

该注解可以将类地址映射为浏览器可以访问的请求地址,从而访问到类中。

java 复制代码
package com.qls.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// 将类地址映射为一个浏览器可以访问的请求地址
@WebServlet("/demo")
public class ServletDemo extends HttpServlet{

	/**
	 * HttpServlet类中有两个方法:doGet()方法、doPost()方法
	 * doGet()方法接收HttpGet请求,doPost()方法接收HttpPost请求
	 */
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//响应客户端		
		resp.getWriter().print("<h1>hello</h1>");
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	
	}
}
2.2 web.xml配置文件
XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  
  <!-- 项目名称 -->
  <display-name>ServletDemo1</display-name>
  
  <!-- 欢迎页面 -->
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  
  <!-- 加载指定servlet类 -->
  <servlet>
  	<!-- 类名称 -->
  	<servlet-name>demo</servlet-name>
  	<!-- 类地址,通过反射动态加载指定类的字节码文件-->
  	<servlet-class>com.qls.servlet.ServletDemo</servlet-class>
  </servlet>
  
  <!-- 映射路径 -->
  <servlet-mapping>
  	<!-- 名称,与类名称保持一致 -->
  	<servlet-name>demo</servlet-name>
  	<!-- 映射请求地址 -->
  	<url-pattern>/demo</url-pattern>
  </servlet-mapping>
  
</web-app>
2.3 小结

* 编写Servlet类,继承HttpServlet类,重写doGet方法或doPost()方法。

* 配置Servlet类,注解配置或web.xml配置文件。两种配置方式的作用相同,都是将类地址映射为客户端请求地址,使用一种即可。

* 注解的出现是为了替换掉xml配置。

3. 运行效果
4. 执行流程

4.1 客户端发出请求http://localhost:8080/ServletDemo1/demo

4.2 根据web.xml文件的配置,找到<url-pattern>子元素的值"/demo的<servlet-mapping>元素

4.3 读取<servlet-mapping>元素的<servlet-name>子元素的值,由此确定Servlet的名字为demo

4.4 查找到<servlet-name>值为demo的<servlet>元素

4.5 读取<servlet>元素的<servlet-class>子元素的值,由此确定Servlet的类名为com.qls.servlet.ServletDemo

4.6 到Tomcat安装目录/webapps/ServletDemo1/WEB-INF/classes/con/qls目录下查找到ServletDemo.class文件执行

三、Servlet生命周期

Servlet是一个供其他Java程序调用的Java类,它不能独立运行,它的运行完全由Servlet引擎来控制和调度。

针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web容器退出,servlet实例对象才会销毁。

在Servlet的整个生命周期内,Servlet的init方法只被调用一次。而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servlet的service方法。对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,service方法再根据请求方式分别调用doXXX方法。

相关推荐
java资料站7 分钟前
二、Spring AI Alibaba · ChatModel
java·windows·spring
十年Java程序媛31 分钟前
Java 接口和抽象类对比|Java8 新特性,抛弃老旧八股,正确选型
java·spring boot·后端
caoerzhong33 分钟前
JeeWMS 开源 WMS 部署避坑指南:Java 仓库管理系统的环境基线、四类根因与可复现交付
java·开发语言·开源
用户37215742613533 分钟前
Java 合并 PDF 文件:完整合并、指定页面合并与流合并
java
for_ever_love__1 小时前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram
java资料站1 小时前
五、Spring AI Alibaba · Memory · Saver(短期会话)
java·spring·microsoft
夜之眷属2 小时前
Core dump 崩溃排查:JVM 宕机后,那份 core 文件怎么用 gdb 还原现场
java·运维·服务器·jvm
波加曼大王2 小时前
# vLLM不要迷信PagedAttention神话,聊聊线上藏着的内部碎片陷阱
java·架构
SL_staff2 小时前
目标健康度自检清单:开发者视角下的目标-计划-任务链路断点诊断
java·开源·github
for_ever_love__2 小时前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结