JavaWeb三大组件 —— Servlet

目录

servlet

注册servlet

父pom

 pom文件

1、通过注解注册

 2、使用ServletRegistrationBean注册

 API三生三世

第一生Servlet

第二生SpringMVC

今生SpringBoot


servlet

Servlet的作用: 接受请求参数、处理请求,响应结果,(就是写controller层的get、post等)
Servlet的生命周期:

  • void init(ServletConfig):初始化调用一次 
  • void service(ServletRequest request, ServletResponse response):每次处理请求时候调用 
  • void destroy():销毁时候 

实现方式:

  •   实现javax.servlet.Servlet接口;
  •   继承javax.servlet.GenericServlet类; 
  •   继承javax.servlet.http.HttpServlet类;

 常见的都是实现HttpServlet类。重写里边的doGet(),doPost等方法。如图:

 注意:

本次示例使用的是jdk为1.8版本;

javax.servlet jakarta.servlet 是 Java Servlet API 的两个版本。

在过去,Java Servlet API 是由 Sun Microsystems(现在是 Oracle)开发和维护的,其包名以 javax.servlet 开头。然而,从 Java EE 8 开始,Servlet API 的维护权转交给了 Eclipse Foundation 的 Jakarta EE 社区,因此,在最新的 Jakarta EE 版本中,Servlet API 的包名已经更改为 jakarta.servlet。

简而言之,javax.servlet 是旧版本的包名,而 jakarta.servlet 是新版本的包名。这个变化是为了反映 Jakarta EE 作为一个独立的开源项目,并且将标准 Java 技术规范的发展移交给了 Jakarta EE 社区。

需要注意的是,虽然包名发生了变化,但是 Servlet API 的核心功能和用法并没有大的改变。大多数代码可以无缝地迁移到 jakarta.servlet 包下,只需要修改导入语句和相应的依赖。

综上所述,javax.servlet 和 jakarta.servlet 的区别仅在于包名的变化,代表了不同版本的 Java Servlet API

注册servlet

父pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId>
<!--        <version>3.1.2</version>--><version>2.2.5.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.chensir</groupId><artifactId>springboot</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot</name><description>springboot</description><properties><java.version>8</java.version></properties><packaging>pom</packaging><modules><module>servlet</module></modules><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

 pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.chensir</groupId><artifactId>springboot</artifactId><version>0.0.1-SNAPSHOT</version><relativePath>../pom.xml</relativePath></parent><artifactId>servlet</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

1、通过注解注册

 2、使用ServletRegistrationBean注册

 

 

 

 API三生三世

第一生Servlet

1.新建一个多module的空项目

 

 

2.新建web项目

 

 

3.选择Java EE8 ,完成

 

 

4.项目目录结构

 

 

5.修改访问路径

 

 

 

6.查看运行结果

 

 

7.移除注释,通过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"><servlet><servlet-name>HelloServlet</servlet-name><servlet-class>com.china.servlet.HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/test</url-pattern></servlet-mapping>
</web-app>

8.如何自己写一个servlet

 

public class TestServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// super.doGet(req, resp);//查看目前服务器相应编码是什么编码、// System.out.println(resp.getCharacterEncoding());//设置服务器字符集编码为UTF-8//servletResponse.setCharacterEncoding("UTF-8");//resp.setHeader("Content-Type","text/html;charset=utf-8");//或者只设置下面一个参数就可以,此方法一定要在获取流之前调用才生效resp.setContentType("text/html;charset=utf-8");//渲染jsp文件//RequestDispatcher requestDispatcher = req.getRequestDispatcher("xxx.jsp");//requestDispatcher.forward(req,resp);PrintWriter out = resp.getWriter();out.println("<html><body>");out.println("<h1>这是TestServlet返回的结果</h1>");out.println("</body></html>");}
}

9.配置web.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"><servlet><servlet-name>HelloServlet</servlet-name><servlet-class>com.china.servlet.HelloServlet</servlet-class></servlet><servlet><servlet-name>TestServlet</servlet-name><servlet-class>com.china.servlet.TestServlet</servlet-class></servlet><servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/HelloServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>TestServlet</servlet-name><url-pattern>/test</url-pattern></servlet-mapping>
</web-app>

10.查看运行结果

 

 

第二生SpringMVC

1.新建module,名称叫02_springmvc

 

 

 2.新建文件夹web

 

 3.点击确定,就会看到如下图,idea自动给我们创建了web.xml

 

 这时候web文件夹多一个小点点的标识

 4.pom.xml引入相关依赖

 

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.0.RELEASE</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2.1-b03</version><scope>provided</scope></dependency></dependencies>

5.配置web.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"><!-- 前端控制器 --><servlet><servlet-name>springDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><url-pattern>/</url-pattern><!-- /和/*都是拦截所有请求,/*的范围更大,会拦截jsp文件 --></servlet-mapping>
</web-app>

6.新增springmvc.xml

 此时springmvc.xml 为原始xml,没有任何bean数据

 7.创建controller文件,TestController

public class TestController implements Controller {@Overridepublic ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {ModelAndView mv = new ModelAndView();mv.addObject("name", request.getParameter("name"));mv.setViewName("test");return mv;}
}

8.创建web/WEB_INF/pages/test.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html><body><h1>页面参数:${name}</h1></body>
</html>

 9.配置springmvc.xml

 

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 设置逻辑视图名的前缀 --><property name="prefix" value="/WEB-INF/pages/"/><!-- 设置逻辑视图名的后缀 --><property name="suffix" value=".jsp"/></bean><bean name="/test" class="com.china.controller.TestController"/></beans>

10.运行,结果如下

 

11.使用注解版

@Controller
public class Test2Controller {@RequestMapping("/test2")public ModelAndView test(@RequestParam("name") String name){ModelAndView mv = new ModelAndView();mv.addObject("name", name);mv.setViewName("test");return mv;}
}

 12.springmvx.xml开启controller组件扫描

 

<!--开启controller组件扫描-->
<context:component-scan base-package="com.china.controller"/>

 13.运行结果如下

 

 

今生SpringBoot

1.通过IDE创建Spring Boot项目

 

 

 

2.目录结构

 

 3.新建TestController控制器

@Controller
public class TestController {
@RequestMapping("/test")public ModelAndView test(@RequestParam(name = "name", defaultValue = "刘德华") String name){
ModelAndView mv = new ModelAndView();mv.addObject("name", name);mv.setViewName("test");return mv;}
}

4.新建/resources/templates/test.ftlh模板文件

<html>

<body><h1>页面参数: ${name}</h1>
</body>

</html>

5.运行项目

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/77310.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

了解 spring MVC + 使用spring MVC - springboot

前言 本篇介绍什么是spring MVC &#xff0c;如何使用spring MVC&#xff0c;了解如何连接客户端与后端&#xff0c;如何从前端获取各种参数&#xff1b;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1. 什么…

Vue 全局事件总线 Event-Bus

全局事件总线 作用&#xff1a;可以在全局层面上&#xff0c;在任意组件之间相互传递数据。不再局限于父子组件传值&#xff0c;或多层嵌套传值等方式。 使用方式&#xff1a;完全与父子组件传值一致&#xff0c;使用 $on 监听事件&#xff0c;使用 $emit 触发事件&#xff0c…

el-tooltip设置文字溢出时展示否则不展示

改写el-tooltip使其支持文字溢出时展示否则不展示&#xff0c;而不是需要使用js设置单独控制 新建 src/utils/rewriteElTooltip.js &#xff08;一模一样 cv就行&#xff09; export default function rewriteElTooltip(el) {el.props {...el.props,overflow: Boolea…

kagNet:对常识推理的知识感知图网络 8.4+8.5

这里写目录标题 摘要介绍概述问题陈述推理流程 模式图基础概念识别模式图构造概念网通过寻找路径来匹配子图基于KG嵌入的路径修剪 知识感知图网络图卷积网络&#xff08;GCN&#xff09;关系路径编码分层注意机制 实验数据集和使用步骤比较方法KAGNET是实施细节性能比较和分析I…

eNSP 路由器启动时一直显示 # 号的解决办法

文章目录 1 问题截图2 解决办法2.1 办法一&#xff1a;排除防火墙原因导致 3 验证是否成功 1 问题截图 路由器命令行一直显示 # 号&#xff0c;如下图 2 解决办法 2.1 办法一&#xff1a;排除防火墙原因导致 排查是否因为系统防火墙原因导致。放行与 eNSP 和 virtualbox 相…

【计算机网络】socket编程

文章目录 1. 网络通信的理解2.进程PID可以取代端口号吗&#xff1f;3. 认识TCP协议4. 认识 UDP协议5. socket编程接口udp_server.hpp的代码解析socket——创建 socket 文件描述符Initserver——初始化1.创建套接字接口&#xff0c;打开网络文件bind——绑定的使用 2.给服务器指…

spring-boot webservice的例子

webservice发布服务 源码下载地址 spring-boot-webservice例子资源-CSDN文库 webservice cilent调用 源码下载地址 spring-boot-clintwebservice调用服务的例子资源-CSDN文库

VSCode---通过ctrl+鼠标滚动改变字体大小

打开设置然后在右边输editor.mouseWheelZoo勾选即可实现鼠标滚动改变字体大小 4.这种设置的字体大小是固定的

Plugin [id: ‘com.android.application‘, version: ‘7.xx‘, apply: false] was not found in any ...

Plugin [id: com.android.application, version: 7.3.0-alpha03, apply: false] was not found in any of the following sources: 问题原因&#xff1a; 如上解释&#xff0c;所配置gradle版本在本地配置的gradle仓库里面没找到。 解决办法&#xff1a; 1.弄清楚自己本地的…

JVM基础篇-方法区与运行时常量池

JVM基础篇-方法区与运行时常量池 方法区 Java 虚拟机有一个在所有 Java 虚拟机线程之间共享的方法区。方法区类似于传统语言的编译代码的存储区或者类似于操作系统进程中的“文本”段。它存储每个类的结构&#xff0c;例如运行时常量池、字段和方法数据&#xff0c;以及方法和…

Redis 单线程VS多线程

面试题 redis到底是单线程还是多线程&#xff1f;IO多路复用是什么&#xff1f;redis为什么快&#xff1f; Redis单线程 是什么 Redis的版本很多3.x、4.x、6.x&#xff0c;版本不同架构也是不同的&#xff0c;不限定版本问是否单线程也不太严谨。 1、版本3.x &#xff0c;最…

使用JProfiler进入JVM分析

要评测JVM&#xff0c;必须将JProfiler的评测代理加载到JVM中。这可以通过两种不同的方式发生&#xff1a;在启动脚本中指定-agentpath VM参数&#xff0c;或者使用attach API将代理加载到已经运行的JVM中。 JProfiler支持这两种模式。添加VM参数是评测的首选方式&#xff0c;集…

深入了解 PostgreSQL 扩展插件

深入了解 PostgreSQL 扩展插件 在 PostgreSQL 数据库中&#xff0c;扩展插件是极具价值的工具&#xff0c;它们为我们提供了丰富多样的功能增强。本篇博客将深入介绍几个常用的 PostgreSQL 扩展插件&#xff0c;包括 pg_stat_statements、uuid、postgis 以及 postgis_raster。…

【MATLAB第58期】基于MATLAB的PCA-Kmeans、PCA-LVQ与BP神经网络分类预测模型对比

【MATLAB第58期】基于MATLAB的PCA-Kmeans、PCA-LVQ与BP神经网络分类预测模型对比 一、数据介绍 基于UCI葡萄酒数据集进行葡萄酒分类及产地预测 共包含178组样本数据&#xff0c;来源于三个葡萄酒产地&#xff0c;每组数据包含产地标签及13种化学元素含量&#xff0c;即已知类…

【新版系统架构补充】-嵌入式技术

嵌入式微处理体系结构 冯诺依曼结构 传统计算机采用冯诺依曼结构&#xff0c;也称普林斯顿结构&#xff0c;是一种将程序指令存储器和数据存储器合并在一起的存储器结构 冯诺依曼的计算机程序和数据共用一个存储空间&#xff0c;程序指令存储地址和数据存储地址指向同一个存…

回归预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现SO-CN…

uni-app 微信小程序自定义导航栏

一、效果图 二、导航栏的组成 上面的导航栏主要由状态栏&#xff08;就是手机电量显示栏&#xff09;和小程序的导航栏组成&#xff0c;android手机一般为48px&#xff0c;ios手机一般为44px 三、开发步骤 1、设置navigationStyle:custom {"path": "pages/v…

机器学习-特征选择:如何使用Lassco回归精确选择最佳特征?

一、引言 特征选择在机器学习领域中扮演着至关重要的角色&#xff0c;它能够从原始数据中选择最具信息量的特征&#xff0c;提高模型性能、减少过拟合&#xff0c;并加快模型训练和预测的速度。在大规模数据集和高维数据中&#xff0c;特征选择尤为重要&#xff0c;因为不必要的…

MySQL库的操作

MySQL库的操作 1. 库的操作 1.1 创建数据库 语法&#xff1a; CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,create_specification] ...]create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name说明&#xff…

Grafana集成prometheus(4.Grafana添加预警)

上文已经完成了grafana对prometheus的集成及数据导入&#xff0c;本文主要记录grafana的预警功能&#xff08;以内存为例&#xff09; 添加预警 添加入口&#xff08;2个&#xff09; databorard面板点击edit&#xff0c;下方有个Alert的tab&#xff0c;创建Alert rules依赖…