探索Web开发中的Session奥秘与应用技巧
WebXR 入门必读
探索WebXR的奥秘:沉浸式体验与开发入门
XR,这个始于1968年头戴式显示器(HMD)的概念,如今已经演变成VR、AR和MR的集合体,其核心在于物理与数字世界的无缝融合,创造出前所未有的沉浸式体验。这种体验超越了传统界面,通过视觉、听觉和触觉的多感官交互,以及对虚拟对象互动和姿态追踪的精确捕捉,为用户带来全新的互动方式。
历史的脚步:从HMD的首现,到80年代VR概念的萌芽,再到90年代VR热潮和AR概念的诞生,XR技术历经数十年的迭代,如今借助智能手机、可穿戴设备的进步以及传感器、计算能力的提升,正以前所未有的速度发展。
定义新现实:XR被定义为“任意”现实,它可以扩展到现实世界,或者跨越现实的界限,将虚拟与物理世界无缝连接,为创新和用户体验提供了无限可能。
沉浸式体验的秘密:沉浸式体验的关键在于多模态感知,比如立体感和对用户动作的精确感知,而输入则涉及与虚拟对象的互动和环境中的姿态跟踪,为用户创造深度参与感。
XR技术的突破性在于其超越了传统的人机交互模式,不再局限于专用控制器和屏幕。环境互动成为可能,例如通过6个自由度(6DoF)的支持,包括头部和身体全方位移动,为用户提供了更为丰富和自然的动作控制。
例如,早期的手机VR只能追踪头部3个自由度,而XR平台如PICO 4和PICO Neo3则采用内向外的6DoF技术,PC VR主要聚焦游戏和虚拟社交,而一体机则适应更多生活场景。开发者在选择时,需考虑VR的全3D游戏环境、MR/AR的现实融合应用,以及XR设备的兼容性和硬件性能。
在WebXR的世界里,开发者需要处理跨平台兼容,包括不同硬件(如PC VR和一体机)、操作系统(如PICO OS和realityOS)、浏览器和屏幕尺寸。通过渐进增强和优雅降级的设计策略,确保XR应用能在各种设备上顺畅运行。
Web技术的开放性赋予XR开发无安装、多入口和动态聚合的特性,无论是通过WebGL与WebGPU进行画面渲染,还是利用Model-View解耦技术在2D/3D环境中实现灵活交互,WebXR为开发者提供了强大的工具。
在WebXR的开发旅程中,理解WebXR Device API的关键功能,如设备检测、权限请求、状态跟踪和协调,以及XRSession中的沉浸式接口,是至关重要的。同时,熟悉XR合成器的独立运行机制和XR渲染状态的配置,有助于创建高质量的XR体验。
在性能优化方面,WebXR项目需要关注网络加载效率、3D图形渲染质量和JavaScript执行效率。开源生态如Three.js的R3F简化了API使用,使得开发者能更专注于项目核心,提升开发效率。
总之,WebXR的开发融合了WebGL/WebGPU的图形能力,以及简化了的3D编程模型,如A-Frame和Babylon.js,为开发者提供了强大且易于使用的工具。通过理解这些关键概念,你将能在沉浸式体验的创新世界中大展身手。
Java Web开发实战—Listener详解—Listener简介、Listener开发、Listener的API、Listener应用
深入探索Java Web开发实战:Listener的奥秘
在Java Web开发的世界里,Listener扮演着至关重要的角色,它如同后台的观察者,默默地监听并响应Web应用程序中的各种关键事件。本篇文章将带你走进Listener的世界,从基础概念、开发实践到API应用,一一详解。
Listener基础与机制
Listener的核心在于其监听机制,它通过8种接口监听Web应用中的ServletContext、HttpSession和ServletRequest事件。在Eclipse中,只需选择对应的接口,如默认的javax.servlet.ServletContextListener,即可创建Listener,如TestListener01,它将自动配置到web.xml中,确保监听器的执行顺序。
创建Listener实战
在Eclipse中,选择Listener接口,如TestListener01,勾选后自动生成相应的类,Eclipse会自动在web.xml中添加和元素,支持多Listener配置。
Listener接口详解
Java EE提供了一系列强大的Listener接口,如ServletContextListener关注ServletContext的生命周期,而ServletContextAttributeListener则关注属性的增删改。重点掌握这两大接口,如contextInitialized和contextDestroyed,分别在ServletContext创建和销毁时触发。
示例代码展示
contextInitialized(ServletContextEvent): 当ServletContext创建时,执行TestListener01的初始化逻辑,控制台输出"ServletContext对象被创建了"。
contextDestroyed(ServletContextEvent): ServletContext销毁时,执行销毁逻辑,控制台输出"ServletContext对象被销毁了"。
后续的Listener接口如HttpSessionListener和ServletRequestListener同样具有类似的生命周期方法,如sessionCreated(HttpSessionEvent)和requestInitialized(ServletRequestEvent),它们各自负责监听和操作相应的生命周期事件。
Listener应用实战
例如,我们可以创建一个名为TestListener09的类,继承HttpSessionBindingListener,用于存储用户信息。结合UserInfo单例模式,实现在线用户的管理。在Servlet中,监听用户登录和登出事件,实时更新显示信息。
小结与提升
通过理解Listener的原理和使用方法,你能灵活地编写程序实现Web应用的特殊功能,如用户登录状态管理、会话统计等。在Context的jsp目录中,实践这些Listener的应用,例如,jsp01.jsp通过JSTL展示用户信息,Servlet08的删除操作则触发TestListener09中的清理逻辑。重启Tomcat,一步步见证Listener的力量。
总而言之,掌握Listener是Java Web开发不可或缺的一部分,它能让你的应用更为智能,更加灵活。深入理解Listener的接口、机制和应用,将为你的Web开发之路增添无限可能。
软件å¼å
æ¹åå¾å¤ å°±ä¸è¬Javaæ¹åèè¨ï¼å¦å¤è¿æC++ãC#çå¤ç§ï¼ï¼
Unix/Linuxæä½ç³»ç»
Unixå¼åç¯å¢
Unixæä½ç³»ç»æ¦è¿°ãUnixæä»¶ç³»ç»ãUnixçKernelåShellãè¿ç¨ç»å½çåçãç¨æ·ç®¡çå½ä»¤ãåºæ¬æä»¶åç®å½æä½å½ä»¤ãUnixæä½ç³»ç»çç¹æ®å符ã使ç¨viå½ä»¤ç¼è¾ææ¬æä»¶ã使ç¨FTPè¿è¡æä»¶ä¼ è¾ãåå§åæä»¶åç¯å¢åéçé ç½®ãShellèæ¬åcrontabå½ä»¤ã
çç»ææ¡Sun Solaris Unixç³»ç»åºæ¬æä½å½ä»¤ï¼è½å¤èä»»Unix/Linuxç³»ç»ä¸çJavaç¨åºå¼åå管çå·¥ä½ã
Java SEå¼å
Javaè¯è¨åºç¡
Java SE 6.0æ ¸å¿è¯æ³å½çº³è®²è§£ï¼å æ¬Javaè¯è¨çç¹ç¹ãç¯å¢çé ç½®ãå¼ååºæ¬å½ä»¤ãç±»çå®ä¹æå·§ãæ¹æ³è°ç¨è¿ç¨ã对象çæåçä¸å ååå¸ãæ è¯ç¬¦ãå ³é®ååæ°æ®ç±»åãè¿ç®ç¬¦å表达å¼ãJavaåä¸è¿ç®è¦ç¹ãæµç¨æ§å¶è¯å¥ãJavaæ°ç»åé¾è¡¨çç®æ³åæ°æ®ç»æï¼åæ¶ææ¡Eclipseå¼åå·¥å ·ç使ç¨ã
çç»ææ¡Javaæ ¸å¿è¯æ³
Javaé¢å对象ç¼ç¨
忬äºJavaé¢å对象çç²¾é«ï¼å æ¬é¢å对象ä¸å¤§ç¹æ§ââå°è£ ãç»§æ¿ä¸å¤æï¼åç§ä¿®é¥°ç¬¦å¨é¢åå¯¹è±¡ææ³ä¸ç综åè¿ç¨ï¼æ½è±¡ç±»çç¹ç¹åä½¿ç¨æå·§ï¼é¢åæ¥å£ç¼ç¨çææ³åå®è·µï¼å é¨ç±»çåºç¨ï¼JDKæ ¸å¿ç±»å æ¬ObjectãStringãDateåCalendarçç±»ç使ç¨åè®¾è®¡ææ³ï¼æ£å表达å¼ï¼èªå¨å°ç®±å解箱ï¼Javaå¼å¸¸å¤çï¼Javaéåæ¡æ¶ï¼æ³åçè¯æ³å使ç¨çã
çç»ææ¡Javaé¢åå¯¹è±¡ææ³
Javaé«çº§åºç¨
主è¦ç ç©¶ï¼ä¸é«çº§è½¯ä»¶å·¥ç¨å¸çå¿ ä¿®å©å¨ââJavaåå°ç¼ç¨ï¼Javaå¾å½¢å¼åç»ä»¶çå¼åæ¥éª¤ååºç¨æå·§ï¼äºä»¶æ¨¡åç设计ç念ååºç¨ï¼Javaå¤çº¿ç¨ç¼ç¨ï¼JavaçI/Oæµï¼Javaç½ç»ç¼ç¨çã
çç»ææ¡Javaé«çº§ç¼ç¨ï¼è¿é¨åæ¯ä½ä¸ºé«çº§ç¨åºåå¿ é¡»ææ¡çææ¯
XMLè¯æ³ä¸è§£æ
XMLï¼eXtensible Markup Languageï¼ç䏿åç§°æ¯å¯æ©å±æ è®°è¯è¨ï¼æ¯æ å½¢çæ¦å¿µå±æ¬¡ç»æ,ç®èè¨ä¹å®å°±æ¯ä¸ç§ä¿åç»æåæ°æ®çæ ¼å¼ãXMLä½ä¸ºä¸ç§é¢åå 容çæè¿°è¯è¨ï¼éè¿åºäºæ å½¢æ°æ®ç»æç屿¬¡åæ¦å¿µåç±»ä½ç³»æ¨¡åï¼å¨å¾å¤§ç¨åº¦ä¸å¼¥è¡¥äºHTMLä½ä¸ºç½ç»æ åè¯è¨å¨æ¦å¿µå±æ¬¡å ³ç³»çè¯ä¹è¡¨è¾¾ä¸çä¸è¶³ã
主è¦å¦ä¹ å 容ï¼XMLçæä¹ãè¯æ³ç»æãXMLè¯æçè§èï¼DTDçæä¹åè¯æ³ã使ç¨å称空é´çæå·§ï¼Schemaçæä¹ãè¯æ³ï¼ä½¿ç¨Java APIè§£æXMLï¼åºäºJava DOMåSAXçXMLå¤çææ¯ã
ææ¡ç®åæéç¨çç½ç»æ°æ®æ ¼å¼ï¼å¹¶è½çç»å¨åä¸å¼åä¸åºç¨
æ°æ®åºç¼ç¨
Oracle SQL
Oracleå ¬å¸çOracleæ°æ®åºäº§åæ¯å½ä»çé«ç«¯ä¼ä¸çº§åºç¨ç主æµäº§åãæä»¬ä¸»è¦å¦ä¹ ï¼Oracle 10gæ°æ®åºåçï¼SQLè¯å¥ï¼DDLãDMLãTCLãDCLï¼çè¯æ³ï¼é¡¹ç®ä¸ç»å ¸SQLè¯å¥éç°ï¼Oracleæ°æ®åºå½æ°å æ¬åç¬¦å½æ°ãæ°å¼å½æ°ãæ¥æå½æ°ãæ°æ®ç±»å转æ¢å½æ°ä»¥åç»å½æ°ï¼æ°æ®åºç设计ï¼è¡¨è¿æ¥å æ¬çå¼è¿æ¥ãéçå¼è¿æ¥ãèªè¿æ¥åå¤è¿æ¥ï¼SQLåæ¥è¯¢ï¼Oracleåºå对象å¨é¡¹ç®ä¸çè¿ç¨ï¼ç´¢å¼åè§å¾ï¼ç³»ç»è¡¨çåºç¨æå·§ï¼Oracle SQLçéè¯¯ææ¥åè°ä¼è§£å³æ¹æ¡ã
ææ¡Oracleæ°æ®åºè®¾è®¡ãæä½åå¼å
MySQLæ°æ®åº
MySQL5.0æ°æ®åºç管çåå¼åè¦é¢ï¼ææ¡MySQLåOracleæ°æ®åºçå¼åç¹ã
ææ¡MySqlæ°æ®åºç设计ãæä½åå¼å
JDBCç¼ç¨
JDBC为Javaå¼åè ä½¿ç¨æ°æ®åºæä¾äºç»ä¸çç¼ç¨æ¥å£ï¼ä½¿å¾å¼å人åå¯ä»¥ä½¿ç¨çº¯Javaçæ¹å¼æ¥è¿æ¥æ°æ®åºï¼å¹¶è¿è¡æä½ãå¦ä¹ ç主è¦å 容æï¼JDBCçç¼ç¨æ¥éª¤ï¼éè¦çç¼ç¨æ¥å£ï¼JDBCå¼å¸¸å¤çï¼JDBCä¸ä½¿ç¨äºå¡ï¼Batch Updatesæ¹éæ´æ°ï¼Blob/Clobçæ°æ°æ®ç±»åï¼JNDIï¼DataSourceï¼æ°æ®åºè¿æ¥æ± ç管ççãéæ¥ææ¡åºäºJDBCçOracleï¼SQLServerï¼DB2ï¼MySQLçæ°æ®åºè¿æ¥ææ¯ã
çç»ææ¡Javaè¯è¨å¯¹åç§æ°æ®åºçè¿æ¥ææ¯
ç³»ç»åæä¸è®¾è®¡
软件å¼åæµç¨åUML
å¦ä¹ 软件å¼åè¿ç¨å æ¬ç叿¨¡åãç»ä¸å¼åè¿ç¨ï¼USDPï¼ï¼CMMI5级软件设计è§èï¼ææ¡ç»ä¸å»ºæ¨¡è¯è¨UMLï¼ææ¡è½¯ä»¶çéæå»ºæ¨¡åå¨æå»ºæ¨¡ãææ¡é¢å对象ä¸å¯¹è±¡çå ³ç³»ã
ææ¡è½¯ä»¶å¼åæµç¨åUML
设计åå䏿¨¡å¼
åå忍¡å¼æ¯åæè®¾è®¡äººåä¸ç¨åºåå¨å¼åè¿ç¨ä¸ç»éªçæ»ç»ï¼å¦ä¹ 模å¼å°±æ¯è·åç»éªã
ææ¡é¢å对象ç设计ååï¼âå¼âéâååï¼OCPï¼ã鿰代æ¢ååï¼LSPï¼ãä¾èµå转ååï¼DIPï¼ãæ¥å£é离ååï¼ISPï¼ãç»å/èåå¤ç¨ååï¼CARPï¼ãè¿ªç±³ç¹æ³åï¼LoDï¼ã
ææ¡ä¸»æµç设计模å¼ï¼å·¥å模å¼ï¼Factoryï¼ãå便¨¡å¼ï¼Singletonï¼ãè§å¯è 模å¼ï¼Observerï¼ãç»å模å¼ï¼Compositeï¼ãç¶ææ¨¡å¼ï¼Stateï¼çï¼ä»¥åéè¦çæ¶ææ¨¡å¼ï¼Dao模å¼ãMVC模å¼ã
ææ¡é¢å对象ç设计åå忍¡å¼ãåºå«äºæ¿æ 代ç ï¼éç¹å¨äºç¥é软件为ä»ä¹è¦è¿ä¹åï¼ä¿è¯ä»£ç è´¨éï¼ä¿è¯ç§å¦çå¼åæµç¨ãæç §CMM3çæ åæ¥è®¾è®¡è½¯ä»¶å管çå¼åè¿ç¨ã
Webå¼ååºç¡
HTML
åºäºæµè§å¨çè¯è¨HTMLï¼
äºè§£HTMLåºæ¬ææ¡£ç»æã常ç¨çmetaï¼ææ¡HTMLå表åè¡¨æ ¼åºæ¬æä½ï¼äºè§£HTTP GETåPOST请æ±åååºçåè®®æ ¼å¼ï¼ææ¡è¡¨åçåºæ¬åçï¼ææ¡GETåPOSTæäº¤æ¹å¼åå ¶åºå«ï¼çç»ææ¡å¸¸ç¨è¡¨åå ç´ ã
ææ¡ä¼ä¸çº§åºç¨å®¢æ·ç«¯é¡µé¢ææ¯
CSS
CSSæä¸ºå±å æ ·å¼è¡¨(Cascading Style Sheets)ç¨äºå®ä¹HTMLå ç´ çä½ç½®åæ ·å¼ãCSSæ ·å¼å®ä¹é常åå¨å¨åç¬çæä»¶ä¸, å¯ä»¥æå¤§æé«å·¥ä½æçãææ¡CSSåºæ¬è¯æ³åCSSéæ©å¨ï¼ææ¡CSSå®ä½ææ¯ï¼äºè§£CSSå å¤è¾¹è·ãè¾¹æ¡çç¹æ§ã
ææ¡ä¼ä¸çº§åºç¨å®¢æ·ç«¯é¡µé¢æ ·å¼ææ¯
JavaScript
åºäºæµè§å¨çå¨æèæ¬ææ¯JavaScriptï¼
JavaScript è¢«è®¾è®¡ç¨æ¥å HTML页颿·»å 交äºè¡ä¸ºï¼æ¯ä¸ç§è¢«æµè§å¨è§£éæ§è¡çèæ¬è¯è¨ãæä»¬å¯ä»¥åºç¨JavaScriptæ¥ååºäºä»¶, å®ç°å¤æäº¤äºï¼éªè¯æ°æ®, æé«ç³»ç»å¥å£®æ§ï¼è·ååæ¹åHTMLå ç´ åCSS屿§ï¼å¨ææ¹å页é¢å¤è§ï¼éæ¥åRIA(Rich Internet Applications)è¿è¿ã
ææ¡JavaScriptåºæ¬æ°æ®ç±»ååå ¶è¿ç®ï¼çç»ä½¿ç¨æ°ç»ãæ¥æçï¼ææ¡åºæ¬ç对äºé¡µé¢å ç´ çæä½ï¼ææ¡Prototype.jsçåºæ¬æ¹æ³ï¼ææ¡HTML DOM模åï¼Windowå¯¹è±¡ï¼æä½Cookieï¼å®æ¶å¨çã
ææ¡ä¼ä¸çº§åºç¨å®¢æ·ç«¯å¨æèæ¬ææ¯
Java Webå¼å
Servletç¼ç¨
å¦ä¹ è¦ç¹ï¼Webæå¡å¨çå®è£ åé ç½®ï¼ç¼ååé¨ç½²Servletï¼è¯»å请æ±ä¿¡æ¯ï¼çæååºä¿¡æ¯ï¼ç»´æ¤å®¢æ·ç¶æï¼è¿æ»¤è¯·æ±åååºï¼çå¬å¨çåºç¨ï¼å¯¹æä¹ å±èµæºç访é®ï¼ä½¿ç¨å è£ å¨æ¦æªååºï¼Sessionä¸Cookieææ¯ï¼Servletäºæä½ï¼è®¿é®åºç¨ä¸ä¸æï¼MVCæ¶ææ¨¡å¼çææ³åè¿ç¨ã
JSPç¼ç¨
JSPæ¯å¨Javaæå¡å¨ç«¯è¿è¡ç页é¢ï¼JSPæ¬èº«å°±æ¯ä¸ä¸ªåºäºææ¬çææ¡£ï¼ä»ä¸ä» å¯ä»¥å å«éæçHTMLå 容ï¼ä¹å¯ä»¥å å«å¨æçJava代ç ï¼æå¡å¨å®¹å¨å¯ä»¥å°JSPè½¬æ¢æServletåå¸ï¼å¹¶æ¥å请æ±ï¼æä¾ååºã
å¦ä¹ å 容ï¼JSPçç¹ç¹ãè¿è¡åçåæ§è¡è¿ç¨ï¼JSPçèæ¬å ç´ ï¼JSPæä»¤çåç±»å详解ï¼JSPä¸ä¸å¸¸ç¨çå¨ä½ï¼JavaBeanç»ä»¶å¨JSPä¸çåºç¨ï¼JSPå 置对象详解ï¼JSPå¼å¸¸å¤çåæé«ç¨åºå¥å£®æ§è¦é¢ï¼éå®åä¸è½¬åçæ¬è´¨åºå«ï¼URLååï¼èªå®ä¹æ ç¾è¦é¢ï¼EL表达å¼ï¼JSTLæ ¸å¿æ ç¾åºï¼å符éçå¤çåå½é åã
Webç³»ç»æ¶æ
çéææ¡B/Sæ¶æãB/S/A/Dæ¶æä¸çç¨åºè®¾è®¡ä¸å¼åï¼æ·±å ¥çè§£Web MVCæ¶ææ¨¡å¼ï¼å®æWebåºç¨çè°è¯åé¨ç½²ï¼å¨æåå¸Webåºç¨ã
Ajaxç¼ç¨
Ajaxï¼Asynchronous JavaScript and XMLï¼ç± HTMLãJavaScriptææ¯ãDHTMLåDOMç»æï¼è¿ä¸æ°åºçæ¹å¼å¯ä»¥å°ç¬¨æçWebçé¢è½¬åæäº¤äºæ§ä¼è¶çAjaxåºç¨ç¨åºã
主è¦å 容ï¼Ajaxææ¯ææåæ ¸å¿ç¼ç¨ï¼åé请æ±åå¤çååºï¼Ajaxæ°æ®ä¼ è¾æ ¼å¼ï¼çº¯ææ¬ãXMLåJSONï¼ï¼XMLHttpRequest详解ï¼Ajaxåºåæ¡æ¶ä»ç»ã
黑马程序员的Python培训内容有什么?
黑马程序员
链接: https://pan.baidu.com/s/1DLZapQQYaVhzQCC5Ek9jDA
提取码: a9tz 复制这段内容后打开百度网盘手机App,操作更方便哦若资源有问题欢迎追问~
相关文章
发表评论