JavaWeb—Servlet详解

news/2025/1/12 9:37:46/

前言:

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

目标:

一、概念

二、入门程序

        1. 创建Servlet类

        2. 配置Servlet

                2.1 注解配置

                2.2 web.xml配置文件

                2.3 小结 

        3. 运行效果

        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请求*/@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//响应客户端		resp.getWriter().print("<h1>hello</h1>");}@Overrideprotected 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请求*/@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//响应客户端		resp.getWriter().print("<h1>hello</h1>");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
}
2.2 web.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方法。


http://www.ppmy.cn/news/1562460.html

相关文章

【灵码助力安全2】——利用通义灵码辅助复现未公开漏洞的实践

前言 暨上一篇【灵码助力安全1】——利用通义灵码辅助快速代码审计的最佳实践之后&#xff0c;这第二篇主要是想分享一下通义灵码在复现未公开漏洞方面的应用&#xff0c;当然&#xff0c;前提也是必须得有相应的源码。 有的时候&#xff0c;由于安全人员水平的限制和时间、…

Redis 三大问题:缓存穿透、缓存击穿、缓存雪崩

Redis 作为高性能的内存数据库&#xff0c;广泛应用于缓存场景。然而&#xff0c;在实际使用中&#xff0c;可能会遇到三大经典问题&#xff1a;缓存穿透、缓存击穿 和 缓存雪崩。这些问题如果不加以解决&#xff0c;可能会导致系统性能下降甚至崩溃。 1. 缓存穿透 问题描述 …

ChatGPT 网络配置问题解决方案

随着人工智能技术的飞速发展&#xff0c;基于GPT架构的聊天机器人&#xff0c;如ChatGPT&#xff0c;已经在多个领域获得了广泛应用。其强大的自然语言处理能力为用户带来了便捷的交互体验。然而&#xff0c;在实际使用过程中&#xff0c;尤其是在部署和访问时&#xff0c;用户…

自动化之数据库:docker部署mongo,为下一步的使用打下基础

以下是一个详细的Docker Compose配置示例&#xff0c;用于设置一个包含三个节点的MongoDB副本集&#xff0c;并确保安全性&#xff08;使用账号密码进行认证&#xff09;。所有节点都将设置在同一个Docker网络&#xff08; py-mongo &#xff09;下&#xff0c;以便于未来的扩…

你知道APP是怎么开发的吗?

你知道APP是怎么开发的吗&#xff1f; 你知道APP是怎么开发的吗&#xff1f;如何将开发完成的APP发布在应用市场&#xff1f;如何在阿里云上实现一站式App的开发、测试、运维、运营&#xff1f; 你知道APP是怎么开发的吗&#xff1f; 作为后端开发者&#xff0c;尽管我的主要工…

数据结构——查找二叉树

二叉搜索树的概念 如图所示&#xff0c;二叉搜索树&#xff08;binary search tree&#xff09;满足以下条件。 对于根节点&#xff0c;左子树中所有节点的值 < 根节点的值 < 右子树中所有节点的值。任意节点的左、右子树也是二叉搜索树&#xff0c;即同样满足条件 1. …

【docker】exec /entrypoint.sh: no such file or directory

dockerfile生成的image 报错内容&#xff1a; exec /entrypoint.sh: no such file or directory查看文件正常在此路径&#xff0c;但是就是报错没找到。 可能是因为sh文件的换行符使用了win的。

React 中事件机制详细介绍:概念与执行流程如何更好的理解

React 的事件机制是一个非常重要的概念&#xff0c;它涉及到 React 如何处理用户的交互事件。React 的事件系统与传统的 DOM 事件系统有所不同&#xff0c;它在底层使用了事件委托和合成事件&#xff08;Synthetic Events&#xff09;来优化性能。下面&#xff0c;我们将从 Rea…