Servlet3.0与Spring

spring boot 兼容servlet3.0 Spring 同时提醒我们,如果是比较早的servlet容器(低于Servlet 3.0),可能不支持ServletContextInitializer,这时我们需要给项目配置一个web.xml,并将配置类加载进项目。以下是spring官方给出的方案: Deploying a WAR in an Old (Servlet 2.5) Container Spring Boot uses 阅读详情

Servlet3.0与Spring

 

servlet   filter  listener  web.xml

DispatcherServlet  web.xml

 

后期 servlet3.0我们去除web.xml 通过注解方式

同时需要servlet7以上

创建web项目:

 

 不需要生成web.xml了

 

 此时是没有web.xml文件的

 

 jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
   <a href="hello"> hello </a>
</body>
</html>

servlet:

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("hello");
    }
    
}

其他的注解 @WebFilter  @WebListener  @WebInitParam

 

接口:

public interface HelloService {

}

子类:

public interface HelloServiceExt extends HelloService {

}

 

实现类:

public class HelloServiceImpl implements HelloService {

}

抽象类:

public abstract class AbstractHelloService implements HelloService {

}

 

实现指定接口:

// 容器启动的时候会将@HandlesTypes指定的这个类下面的子类(实现类,子接口)传递过来
@HandlesTypes(value= {HelloService.class})
public class MyServletContainerInitializer implements ServletContainerInitializer{

    @Override
    public void onStartup(Set<Class<?>> arg0, ServletContext arg1) throws ServletException {
        System.out.println("感兴趣的类型:");
        for(Class<?> clazz : arg0) {
            System.out.println(clazz);
        }
    
}
}

 

创建目录结构:

 

 写入全类名:

com.toov5.servlet.MyServletContainerInitializer

 

运行:

 

 我们可以通过这个进行反射呢 可以获取反射后的对象

 

过程原理: 

servlet容器启动会扫描当前应用里面的 每一个jar包

  ServletContainerInitializer的实现

提供ServletCOntainerInitializer的实现类,必须绑定在 META-INF/servicesjavax.ServletContainerInitializer

  文件的内容就是 ServletContainerInitializer实现类的全类名

 

总结: 容器在启动时候,会扫描当前应用每一个jar包里面

META-INF/services/javax.servlet.ServletContainerInitializer

指定的实现类,启动并运行这个实现类的方法; 插入感兴趣的类型

 

 

感兴趣的某个子类可以进行创建对象之类的

 

 

 

 给 ServletContext 对象注册web容器的三大组件


使用ServletContext注册web组件的用法   web组件:Servlet、 Filter、 Listener  三大组件

  如果是第三方的 原先可以通过配置web.xml进行设置

 

  监听器:

 

//监听项目的启动和停止
public class UserListener implements ServletContextListener {
  
    //监听ServletContext销毁
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        System.out.println("UserListener...contextDestroyed");
        
    }
   //监听ServletContext启动初始化
    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("UserListener...contextInitialized");
        
    }

}

过滤器:

public class UserFilter implements Filter {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
            throws IOException, ServletException {
        //过滤请求
        System.out.println("UserFilter...doFilter");
        //放行
        arg2.doFilter(arg0, arg1);
        
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        
    }

}

 

 servlet:

public class UserServlet extends HttpServlet {
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("toov5");
    }
    
}

注册组件:

// 容器启动的时候会将@HandlesTypes指定的这个类下面的子类(实现类,子接口)传递过来
@HandlesTypes(value= {HelloService.class})
public class MyServletContainerInitializer implements ServletContainerInitializer{

    @Override
    public void onStartup(Set<Class<?>> arg0, ServletContext sc) throws ServletException {
        System.out.println("感兴趣的类型:");
        for(Class<?> clazz : arg0) {
            System.out.println(clazz);
        }
    //注册组件
     Dynamic servlet  = (Dynamic) sc.addServlet("UserServlet", new UserServlet());
   //配置Servlet的映射信息
    servlet.addMapping("/user");
    //注册Listener
    sc.addListener(UserListener.class);
    //注册Filter
    javax.servlet.FilterRegistration.Dynamic filter = sc.addFilter("userFiter", UserFilter.class);
    //配置Filter的映射信息
    filter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
}
}

监听到容器启动:

同时访问首页  filter也运行了

 

 

 访问之:

拦截器被调用

servlet被触发执行

 

这样就使用了编码方式,在项目启动时候给ServletContext 里面添加组件    

   必须在项目启动时候添加

   ServletContainerInitializer 得到 ServletContext

   ServletContextListener 得到 ServletContext

 

 

 

posted @ 2019-04-13 23:04 toov5 阅读(...) 评论(...) 编辑 收藏

基于servlet3.0手写springmvc 基于servlet3.0手写springmvc,实现了IOC和处理器映射器以及处理器映射器功能。 立即下载

相关推荐

InfiniteTalk (Wan2.1) 数字人 A800 落地实战:从依赖地狱到完美运行的保姆级指南

摘要:本文详细记录了在A800(80GB)服务器上部署InfiniteTalk开源数字人项目的完整流程。该项目基于阿里Wan2.1视频生成模型,支持无限时长流式生成,但环境配置极其复杂。作者总结了18个关键问题点,包括Python版本冲突、CUDA算子缺失等,并提供了黄金配置方案:使用Python3.10+PyTorch2.5.1环境,精准控制FlashAttention等核心库版本,以及针对A800的显存优化策略。最终实现480P视频30秒/步的生成速度,相比默认配置提升3.7倍性能。

软件工程师文艺 2042

Spring全注解开发----Servlet 3.0

Servlet 3.0servlet3.0-简介&测试使用前导入servlet相关的依赖@WebServlet : 注册servlet ,以及servlet 3.0相关的注解说明,链接在下面: 同样,要注册Filter用@WebFilter注解、注册Listener用@WebListener注解;如果在注册的时候,需要一些初始化参数,我们就可以用@WebInitParam注解;小细节回顾: 解决tomcat响应中文乱码问题,通知浏览器使用uft-8编码来对数据进行解码servlet3.0 ==&gt

m0_53157173的博客 2266

QGroundControl高级配置与自定义功能实战指南

本文深入探讨了QGroundControl(QGC)的高级配置与自定义功能,为无人机开发者、系统集成商和高级用户提供实战指南。内容涵盖从品牌界面定制、自定义MAVLink消息处理,到插件开发与自动化部署的全流程,旨在帮助用户解锁QGC的隐藏潜力,打造专属的行业解决方案。

weixin_29234509的博客 239

spring和servlet之间得关系

servlet、filter和listener是javaweb得三大组成部分。 其中servlet通常是由web.xml统一管理。 而springmvc核心是disparcherservlet为入口。 spring可以管理servlet和springmvc中得javabean,这个意思就是说servlet和springmvc是相对独立的两个servlet, 当你想要在一个继承servlet的实现类中,控制url映射的时候,必须在web.xml配置对应关系,即使你把这个servlet交给spring去

lixiaoyi01的博客 8363

Pinocchio 结合 CasADi 进行 IK 逆运动学及 Mujoco 仿真

摘要:本视频演示了如何利用Pinocchio和CasADi实现机械臂逆运动学(IK)求解,并在Mujoco中进行仿真。通过构建优化问题(最小化位姿误差),结合IPOPT求解器对机械臂关节角度进行优化。代码支持导入URDF/MJCF模型,并以so100机械臂为例,实现了末端执行器位置跟踪的仿真测试。关键步骤包括:建立平移/旋转误差函数、设置约束条件、调用CasADi求解,最终在Mujoco中实时更新关节状态完成运动控制。

darcsdn 1002

不用买机械臂!用Python+ROS仿真实现RGB-D物体抓取全流程(Gazebo/MoveIt教程)

本文详细介绍了如何利用Python和ROS仿真环境(Gazebo/MoveIt)实现RGB-D物体抓取全流程,无需购买昂贵机械臂硬件。从环境搭建、机械臂模型导入、深度视觉系统配置到MoveIt运动规划,提供完整的实战指南,特别适合个人开发者和学生团队进行机械臂抓取算法验证与开发。

weixin_29061041的博客 340

Servlet和SpringMVC

目录 Servlet概述 Servlet流程 搭建过程 初始化过程 执行过程 Servlet--细节 SpringMvc概述 SpringMvc流程 搭建过程 核心组件类 执行流程 Servlet与SpringMvc Servlet概述 Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,您可以收集来自网页表单的用户输入,呈

fengwuJ的博客 2181

手把手教你搭建离线语音助手:FunASR+DeepSeek+TTS保姆级教程

本文详细介绍了如何利用FunASR、DeepSeek和TTS技术搭建离线语音助手系统。从环境配置、模型部署到唤醒词检测优化、语音识别与语义理解联调,再到语音合成与系统集成,提供全链路实战教程。特别适合智能家居控制、企业内部知识问答等需要数据隔离的场景,实现高响应、低延迟的离线语音交互体验。

weixin_30316097的博客 475

Servlet 与Spring对比!

A对象掌握B对象的控制权(实列化),但由于B对象参数等的改变,导致A对象如何控制B对象也会发生相应的变化,为解决这一问题,将B对象给第三方,此时,A对象对B对象的控制权转移/交接给第三方,这就是控制(权)反转!但是,对于上述的代码,当我们对其增加一个属性:color颜色的时候,其相关代码就会发生大幅度的改变!Spring是一个Ioc容器,说的是对象的创建和销毁的权利都交给Spring来管理了,它本身具备了存储对象和获取对象的能力!Spring相关的框架知识,算是目前公司在用的前沿知识了,很重要!

weixin_64308540的博客 1497

OpenCV图像去畸变实战指南:从原理到参数调优(附完整代码与效果对比)

本文深入解析了OpenCV图像去畸变的原理与实战技巧,详细对比了标准透视、鱼眼及全能型omnidir三种校正函数的核心参数调优方法。通过分析alpha、balance、centerX/Y及focalScale四大参数对输出效果的影响,并结合完整代码与效果对比图,帮助开发者精准校正镜头畸变,提升计算机视觉任务精度。

weixin_29046611的博客 341

3.详解Labview串口通讯--从串口线连接到串口通讯保姆级教程

本文非常详细的介绍了使用Labview实现串口通讯,读完题主这篇文章,即使你是今天刚下载的Labview,也能熟练的连接并驱动串口执行,接下来和我一起学习下,记得关注并点赞不迷路

关注我,更多技术问题欢迎私聊~ 1万+

Spring与Servlet的整合

掌握Spring的配置、Bean的配置、实例化与装配方式;理解AspectJ框架来进行AOP开发;掌握Spring JDBCTemplate的常用方法;理解Spring的事务管理。

TXQIHYJ的博客 1452

人工智能之数学基础:弄懂数学本质,让我们不再害怕数学

数学的用途远远超过了人们的想象,甚至无处不在,任何领域都需要用到数学知识,人工智能也不例外。我将尽可能地将数学知识和机器学习算法相结合,让大家知道这些数学知识咋人工智能领域中的应用,使得数学的学习不会过于枯燥,同时也帮助大家扫清在学习算法过程中的数学障碍。除此之外,我还希望帮助大家建立一种不一样的数学思维,不再将数学看成是符号的演算、公式的推导,而是将数学看成是一种描述这个世界的工具,这样你就会发现这个世界处处有数学。当我们面对问题的时候,你是否会对问题进行抽象,然后通过数学来解决问题?

huanfeng_AI的博客 633

Spring 是如何支持 Servlet 3.0 的?

写在前面: ServletContainerInitializer 也是 Servlet 3.0 新增的一个接口,容器在启动时使用 JAR 服务 API(JAR Service API) 来发现 ServletContainerInitializer 的实现类,并且容器将WEB-INF/lib目录下 JAR 包中的类都交给该类的#onStartup(...)方法处理,我们通常需要在该实现...

yingzi19911010的博客 510

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

spring对servlet3.0的支持

spring对servlet3.0的支持 java 注解的出现可以说对java编程影具有深远的影响。servlet也不例外,servlet3.0 可以使开发人员通过java config 的方式轻松的摆脱 web.xml。spring boot应该是比较好的证明方式 ServletContainerInitializer servlet3.0 提供了这个接口,当然servlet 容器也做了相应...

m0_38097114的博客 161

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Spring注解开发_Servlet 3.0 与 SpringMVC

Spring注解开发_Servlet 3.0 与 SpringMVC Spring注解开发,基于Spring 4.3.12 Servlet3.0新增了注解支持、异步处理,可以省去web.xml文件,异步处理更高效。 Spring注解开发_自定义注册组件、属性赋值、自动装配 Spring注解开发_Bean生命周期及执行过程 Spring注解开发_AOP原理及完整过程分析(源码) Spring注解开发_声明式事务及原理 Spring注解开发_简单理解BeanFactoryPostProcessor、Bean

hey_wei_ran的博客 337

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

10-Spring支持Servlet3.0新特性

Spring支持Servlet3.0 由上一节可以知道,利用Servlet3.0的新特性,我们在编写Servlet的时候可以不使用xml配置文件了,直接使用注解就可以了。本节将会介绍Spring是如何支持Servlet3.0。 首先导入SpringMVC的依赖 <dependencies> <dependency> <groupId>ja...

lizc_lizc的博客 372

spring boot 2.x 系列 —— spring boot 整合 servlet 3.0

文章目录一、说明1.1 项目结构说明1.2 项目依赖二、采用spring 注册方式整合 servlet2.1 新建过滤器、监听器和servlet2.2 注册过滤器、监听器和servlet三、采用注解方式整合 servlet3.1 新建过滤器、监听器和servlet,分别使用@WebFilter、@WebListener、@WebServlet注解标注3.2 使注解生效 源码Gitub地址:http...

黑白影的博客 5023

spring基于servlet3.0配置上传文件

1、web.xml配置(在之间) servlet> multipart-config> / --> max-file-size>5242880max-file-size> max-request-size>20971520max-request-size> file-size-threshold>0file-size-threshold>

yancychas的博客 2511

spring如何实现Servlet3.0的ServletContainerInitializer

配置SPI实现类 Servlet3.0实现了SPI机制,提供一个ServletContainerInitializer接口,如: Spring实现了该接口 并且在spring-web项目下增加了配置文件配置该实现类 配置文件位置在META-INF/services/javax.servlet.ServletContainerInitializer 文件中指明了实现...

weixin_30745553的博客 296

Java 异步响应servlet_Spring Boot实现异步请求(Servlet 3.0)

在spring 3.2 及以后版本中增加了对请求的异步处理,旨在提高请求的处理速度降低服务性能消耗。在我们的请求中做了耗时处理,当并发请求的情况下,为了避免web server的连接池被长期占用而引起性能问题,调用后生成一个非web的服务线程来处理,增加web服务器的吞吐量。为此 Servlet 3.0 新增了请求的异步处理,Spring 也在此基础上做了封装处理。本文还是以代码例子的方式说明如何...

weixin_31943449的博客 715

浅析Servlet3.0-SCI技术与Spring纯注解式web工程的关系

servlet3.0 SCI SpringServletContainerInitializer

优快云_G_Y的博客 1019

Spring-Session源码研究之Start_Servlet3.0

这一部分讲解下Spring-Session在Servlet3.0标准下的配置. 姊妹篇《Spring-Session源码研究之Start》

夫礼者的专栏 771

servlet3.0下构建spring web项目

servlet3.0最显著的特征就是增加了servlet、listener和filter等类的注解,不需要将此配置在xml文件中,极大方便了编程。web项目中去掉web.xml配置文件,应该是以后构建web工程的趋势,在使用myeclipse2014版本中创建web工程,应该可以觉察到,默认构建web项目,web.xml文件已经不存在了。spring3.1之后的版本均支持servlet3.0。 本

鸽子窝下蛋 609

基于Spring 4.0和Servlet 3.0编写无XML配置的REST服务

基于Spring 4.0和Servlet 3.0编写无XML配置的REST服务 实现效果 1. 发送请求到: 1 http://localhost:8080/app/user/123 2. 服务器返回JSON: 1 {"id":123,"user":null,"nickname":null,"realname":null

mayunyun1987100的专栏 1550

Spring MVC Servlet 3.0

为什么80%的码农都做不了架构师?>>> ...

weixin_33699914的博客 106
上一篇: Aware接口
下一篇: Servlet3.0整合Springmvc(注解版)
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值