JSP脚本语言课件ch_第1页
JSP脚本语言课件ch_第2页
JSP脚本语言课件ch_第3页
JSP脚本语言课件ch_第4页
JSP脚本语言课件ch_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaServerPagesJSP脚本语言课件JavaServerPages动态网页开发核心技术详解Contents课程目录系统掌握JSP脚本语言的核心知识体系,从基础原理到实战应用。01JSP概述与运行原理02JSP基本语法与Page指令03JSP三种脚本元素详解04JSP九大内置对象05JSP四大域对象与作用域06JSP常用标签与Listener监听器CHAPTER01JSP概述与运行原理从Servlet到JSP的技术演进与核心工作机制Chapter01·JSPBasics什么是JSPJSP(JavaServerPages)是Sun公司专为解决动态HTML生成而推出的技术,它允许在HTML中嵌入Java代码,从根本上解决了Servlet直接输出HTML时代码冗长、维护困难的核心痛点。01JSP全称JavaServerPages,本质是一种基于Java的动态网页技术标准,由SunMicrosystems于1999年正式发布。02在JSP出现之前,开发者只能通过Servlet的Writer对象逐行拼接HTML字符串,复杂页面代码极其冗长且难以维护调试。03JSP允许将Java代码嵌入HTML标签中,使页面结构与业务逻辑混合编写,显著降低了动态页面的开发复杂度。04JSP文件不能直接拖入浏览器打开,必须通过Tomcat等Web服务器解析执行后,才能向客户端返回渲染好的HTML响应。FromServlettoJSPServlet输出HTML的痛点与JSP的解决思路Servlet通过Writer逐行拼接HTML的方式存在代码冗余、可读性差、维护困难三大痛点。JSP通过在HTML中直接嵌入Java代码的方式,将"用Java写HTML"转变为"在HTML中写Java",从根本上改善了开发体验。Servlet输出HTML的问题01每行HTML标签都必须用writer.write()包裹输出,代码冗余严重,一个简单的页面就需要数十行Java代码02HTML结构与Java逻辑完全混合在字符串拼接中,开发者难以直观预览页面效果,调试效率极低03前端样式修改需要频繁改动Java源代码,每次修改都要重新编译部署,开发迭代周期长JSP技术的核心优势01允许在标准HTML文件中直接嵌入Java代码片段,开发者可以像写静态页面一样构建动态网页02页面结构清晰直观,前端开发者无需理解完整Java逻辑即可参与页面布局和样式调整03通过page指令统一设置contentType和字符编码,避免Servlet中手动设置响应头的繁琐操作JSPDevelopmentJSP文件的创建与访问流程JSP文件的开发遵循"创建-部署-服务器访问"的标准流程,必须在Tomcat等Web容器环境下运行,通过HTTP协议访问,且需注意统一UTF-8编码以避免中文乱码问题。创建JSP文件在IDEA的Web目录下右键新建JSP文件,IDE自动生成包含page指令的标准模板结构IDEATemplate部署到服务器JSP文件必须部署到Tomcat等Web服务器,访问格式为端口号/工程名/文件名.jspTomcatDeployHTTP协议访问JSP不能像静态HTML直接拖入浏览器打开,必须通过HTTP协议经由Web容器解析后返回响应HTTPOnly统一UTF-8编码IDEA默认编码可能为GBK格式,建议在Settings中将全局编码、项目编码和文件编码统一设置为UTF-8EncodingConfig逐层检查编码修改编码设置时需注意内置文件编码(如JSP、HTML)会覆盖全局设置,需逐层检查确认编码一致性LayerCheck最佳实践总结遵循标准开发流程,确保编码配置正确,可有效避免部署异常和中文乱码问题,提升开发效率BestPracticeJSP&SERVLETJSP运行原理:从JSP到Servlet的翻译机制JSP的本质是Servlet的简化写法。Tomcat在首次访问JSP时将其翻译为继承HttpJspBase的Java源文件,再编译为字节码执行。01首次访问:三步执行流程Tomcat将.jsp翻译为Java源文件→编译为.class字节码→加载执行并响应请求02类命名与存放规则翻译后类名为"源文件名_jsp.java",如index.jsp→index_jsp.java,存放在Tomcat的work目录03继承链:JSP=Servlet生成的类继承HttpJspBase,HttpJspBase继承HttpServlet,JSP本质就是Servlet程序04缓存机制与访问性能后续访问直接使用已编译.class文件响应,无需重复翻译编译,因此首次较慢、后续很快CHAPTER02JSP基本语法与Page指令掌握JSP文件头部声明与核心配置属性的使用方法JSPPageDirectivePage指令核心属性详解page指令是JSP文件的全局配置入口,通过language、contentType、pageEncoding、import、autoFlush、buffer等属性控制页面的编码方式、响应类型、导入依赖和缓冲机制,是每个JSP开发者必须熟练掌握的基础语法。编码与响应类型属性language—值只能为java,声明JSP翻译后的源文件编程语言,目前仅支持Java语言contentType—等价于Servlet中response.setContentType()的参数值,控制浏览器解析页面的MIME类型和字符集pageEncoding—定义当前JSP文件自身的字符编码格式,通常设置为UTF-8以支持中文等多语言内容language·contentType·pageEncoding导入与缓冲区属性import—在JSP页面中导入所需的Java包和类,用法与Java源文件中的import语句完全一致autoFlush—设置out输出流缓冲区满时是否自动刷新输出,默认值为true,一般不需要手动修改buffer—设置out输出流的缓冲区大小,默认值为8KB,可根据页面输出量适当调整import·autoFlush·bufferJSPFUNDAMENTALSJSP注释语法与Page指令实践JSP提供三种注释方式,其中JSP专属注释在服务器端即被忽略,不会发送到客户端,兼顾安全性和性能,是开发中的首选。HTML注释HTML注释(<!---->)会被包含在响应中发送到客户端,用户通过浏览器「查看源代码」即可看到这些注释内容。<!--visibletoclient-->JSP注释JSP注释(<%----%>)仅在服务器端有效,翻译为Servlet时直接被忽略,客户端无法查看,适合写开发备忘。<%--server-sideonly--%>Java注释Java注释(//和/**/)写在JSP脚本片段内部,遵循标准Java注释规则,同样不会被输出到客户端。//insidescriptletPage指令与页面结构典型JSP页面结构:page指令声明→HTML头部→body标签内嵌入JSP脚本和表达式→闭合标签。<%@page%>→<html>→<%%>CHAPTER03JSP三种脚本元素详解声明脚本、表达式脚本与代码脚本的语法规范与应用场景JSPSyntax·Declaration声明脚本(Declaration)声明脚本(<%!%>)用于在JSP翻译后的Servlet类中定义成员级别的变量、方法和静态代码块,其内容位于类体内部但不在service方法中,实际开发中使用频率较低。01<%!Java代码%>语法格式:声明脚本使用<%!Java代码%>格式,翻译后内容位于Servlet类的类体内部,可定义成员变量、成员方法和静态代码块,作用域覆盖整个类。02变量特性:声明脚本中定义的变量是类的成员变量而非局部变量,所有请求共享同一实例,需注意多线程并发安全问题,避免数据竞争和状态混乱。03方法定义:可以在声明脚本中定义工具方法供页面其他脚本调用,但实际开发中建议将业务逻辑封装到JavaBean或Servlet中,保持代码结构清晰。04使用建议:声明脚本在JSP开发中使用频率较低,因为现代开发模式倾向于减少JSP中的Java代码量,保持页面与逻辑分离,提升可维护性。JSP·SCRIPTING表达式脚本(Expression)表达式脚本(<%=%>)是JSP中将Java计算结果输出到HTML页面的最常用方式,适用于变量展示、方法返回值输出和动态数据渲染。01语法为<%=表达式%>,翻译后等价于out.print(表达式),计算结果直接写入HTML响应流中02表达式末尾不能添加分号,因为它作为out.print()方法的参数存在,加分号会导致编译错误03可输出任何有返回值的Java表达式:变量值、方法调用结果、算术运算结果、字符串拼接等均可直接渲染04典型应用场景:显示登录用户名、展示数据库查询结果、格式化日期时间、动态生成HTML属性值等动态数据渲染·真实开发场景JSPScriptingElements代码脚本(Scriptlet)代码脚本(<%%>)是JSP中编写Java逻辑控制代码的核心方式,翻译后位于Servlet的service方法内部,支持条件判断、循环遍历和局部变量定义,常与HTML标签配合实现动态页面逻辑。01基本语法语法为<%Java代码%>,翻译后位于Servlet的service方法内部,可编写任何合法的Java语句02控制流支持支持if-else条件判断、for/while循环、try-catch异常处理等标准Java控制流语句03变量作用域定义的变量为局部变量,仅在当前请求的service方法内有效,请求结束后自动释放04HTML交叉使用常与HTML标签交叉使用,如用for循环动态生成表格行、用if判断控制元素显示与隐藏JSPScriptingElements三种脚本元素对比总结三种JSP脚本元素在语法格式、翻译位置和适用场景上各有不同。表达式脚本使用频率最高,代码脚本次之,声明脚本因不符合前后端分离理念而在实际项目中使用最少。JSP三种脚本元素对比脚本类型语法格式翻译后位置主要用途使用频率声明脚本<%!Java代码%>Servlet类体内部(成员级别)定义成员变量、成员方法、静态代码块低表达式脚本<%=表达式%>service方法内部(out.print参数)输出变量值、方法返回值、计算结果到HTML高代码脚本<%Java代码%>service方法内部(局部语句)条件判断、循环遍历、局部变量定义中表达式脚本是JSP中最常用的脚本类型,代码脚本用于逻辑控制,声明脚本在实际项目中使用较少。CHAPTER04JSP九大内置对象Tomcat自动创建的九个核心对象及其在Web开发中的应用JSPBUILT-INOBJECTS九大内置对象总览JSP九大内置对象由Tomcat在翻译JSP时自动创建并注入service方法,开发者无需手动实例化即可直接使用。其中request、response、session、application和out五个对象覆盖了90%以上的日常开发需求。对象清单out、request、response、session、application、config、pageContext、page、exception九个对象9Objects自动创建机制Tomcat将JSP翻译为Servlet时自动创建,开发者在JSP页面中可直接引用,无需new实例化Auto-Injected核心职责分工request/response处理HTTP请求与响应;session管理用户会话;application存储全局共享数据;out负责页面输出CoreFive低频与特殊对象exception仅在错误页面(isErrorPage=true)中可用;config和page对象在实际开发中使用频率较低EdgeCasesJSPIMPLICITOBJECTS核心内置对象:request与responserequest对象封装客户端HTTP请求的全部信息,response对象负责构建服务器响应。两者是JSP与Servlet之间数据交互的桥梁,类型分别为HttpServletRequest和HttpServletResponse,与Servlet中完全一致。request请求对象请求信息封装—类型为HttpServletRequest,封装客户端发送的HTTP请求信息,包括请求参数、请求头、请求方法和客户端IP等完整数据核心方法调用—getParameter()获取表单参数、getAttribute()获取域数据、getRequestDispatcher()获取转发器实现页面跳转编码问题处理—通过setCharacterEncoding()设置请求编码,专门解决POST方式提交中文参数时可能出现的乱码问题response响应对象响应构建能力—类型为HttpServletResponse,用于构建返回给客户端的HTTP响应,包括状态码、响应头和响应体内容控制方法集合—sendRedirect()实现重定向跳转、setHeader()设置自定义响应头、setContentType()声明响应内容类型输出流获取—getWriter()获取字符输出流向客户端写入文本数据,需注意与JSP内置out对象在缓冲区机制上的差异JSPBUILT-INOBJECTS核心内置对象:session与applicationsession对象管理单个用户会话期间的私有数据,生命周期从会话创建到超时销毁;application对象管理整个Web应用的全局共享数据,生命周期从应用启动到关闭。两者的作用域和生命周期差异决定了它们各自适用的业务场景。session会话对象●类型为HttpSession—每个浏览器会话对应一个独立实例,用于存储用户级别的私有数据,如登录状态、用户偏好设置、购物车内容等会话级信息●常用方法—setAttribute()存储会话数据、getAttribute()读取数据、invalidate()主动销毁会话、getId()获取唯一会话标识符●超时机制—默认30分钟无活动自动销毁(可在web.xml中配置),超时后session失效,其中存储的临时数据随之清除HttpSessionapplication应用对象●类型为ServletContext—整个Web应用全局共享单一实例,所有用户请求均可访问其中存储的数据,实现跨会话信息传递●常用方法—setAttribute()存储全局配置、getAttribute()读取共享数据、getRealPath()获取部署目录的真实物理路径●持久生命周期—从Web应用启动到服务器关闭全程有效,适合存储系统配置参数、访问计数器、全局缓存等共享信息ServletContextJSPIMPLICITOBJECTS其他内置对象:out、pageContext、page、exceptionout对象是JSP专属的带缓冲输出流,pageContext是访问所有内置对象的统一入口,page代表当前Servlet实例本身,exception仅在错误页面可用。这四个对象各有特定用途,其中out和pageContext在日常开发中较为常用。JSPWRITERoutJSP专属的字符输出流,类型为JspWriter,自带8KB缓冲区,通过out.print()和out.println()向页面写入内容。8KBBufferCONTEXTpageContext页面上下文对象,可通过getPageContext()获取request、session、application等所有内置对象的引用。统一入口SERVLETpage本质是当前JSP翻译后Servlet实例的this引用,类型为Object,在实际开发中几乎不会直接使用。this引用ERRORPAGEexception仅在通过page指令设置isErrorPage=true的错误页面中可用,用于获取和处理异常堆栈信息。isErrorPageSTREAMOUTPUTout输出流与response.getWriter()的深度对比out(JspWriter)和response.getWriter()(PrintWriter)虽然都能输出文本到客户端,但类型不同、缓冲区独立、刷新顺序有先后。混用两者会导致输出顺序混乱,建议在JSP页面中统一使用out对象进行输出。核心差异对比JspWritervsPrintWriterout类型为JspWriter,是JSP专属输出流,自带默认8KB缓冲区;getWriter()返回PrintWriter,是Servlet标准输出流。JSP内置8KB缓冲AutoFlush→Writerout缓冲区满后会自动刷新(autoFlush默认true),将内容写入writer缓冲区;writer缓冲区再由Tomcat统一发送给客户端。自动刷新Tomcat转发顺序不一致两者缓冲区独立工作,Tomcat先刷新out缓冲区再刷新writer缓冲区,混用会导致输出顺序与代码书写顺序不一致。独立缓冲顺序混乱开发实践建议统一使用out在JSP页面中建议统一使用out对象输出内容,避免与response.getWriter()混用以防止输出顺序混乱。最佳实践避免混用out.flush()如需精确控制输出顺序,可手动调用out.flush()强制将out缓冲区内容立即刷入writer缓冲区。手动刷新精确控制Servlet专属在Servlet中只能使用response.getWriter()或response.getOutputStream(),不存在JspWriter类型的out对象。Servlet环境无out对象JSP·Built-inObjects九大内置对象速查表九大内置对象按使用频率可分为三档:高频使用的request/response/session/application/out,中频使用的pageContext,以及低频使用的config/page/exception。掌握高频对象即可应对绝大多数Web开发场景。JSP九大内置对象速查对象名Java类型核心功能频率requestHttpServletRequest封装客户端HTTP请求信息,获取参数和域数据高responseHttpServletResponse构建HTTP响应,重定向和设置响应头高sessionHttpSession管理用户会话数据,存储登录状态高applicationServletContext管理全局共享数据,应用级配置高outJspWriter向页面输出文本内容,带缓冲区高pageContextPageContext页面上下文,获取其他内置对象引用中configServletConfig获取当前Servlet的初始化配置参数低pageObject当前Servlet实例的this引用低exceptionThrowable错误页面中获取异常信息低request、response、session、application和out是JSP开发中最常用的五个内置对象。CHAPTER05JSP四大域对象与作用域从页面级到应用级的数据作用域管理机制JSP内置对象四大域对象概念与作用域总览JSP四大域对象按作用域从小到大分为pageContext、request、session和application四个层级,它们提供统一的setAttribute/getAttribute/removeAttribute接口,开发者根据数据的生命周期需求选择合适的域来存储共享数据。01域对象概述域对象是能在特定范围内存储和共享数据的内置对象,四个域对象都提供setAttribute()、getAttribute()和removeAttribute()统一接口02pageContext作用范围仅限当前JSP页面,页面响应完成后数据即失效,是作用域最小的域对象当前页面03request作用范围为一次完整的请求链(含请求转发),请求结束后数据失效,适合在Servlet与JSP之间传递数据一次请求04session作用范围为一个用户会话期间(默认30分钟),浏览器关闭或超时后数据失效,适合存储用户登录状态用户会话05application作用范围为整个Web应用生命周期,服务器启动到关闭期间数据始终有效,适合存储全局配置和共享缓存应用全局JSP四大域对象pageContext域与request域详解pageContext域仅限当前页面有效,适合页面内部的临时数据传递;request域覆盖一次完整请求链(含请求转发),是Servlet向JSP传递数据的最常用方式,在MVC架构中承担控制器到视图的数据桥梁角色。pageContext页面域SCOPE:PAGE01作用范围仅限当前JSP页面内部,页面响应结束后数据自动清除,不影响其他页面和后续请求02适合存储页面渲染过程中的临时变量,如循环计数器、条件判断标记等仅当前页面使用的中间数据03pageContext还可通过setAttribute(name,value,scope)指定存储到其他域,兼具域对象和域管理器的双重角色当前页面有效request请求域SCOPE:REQUEST01作用范围覆盖一次完整请求链,包括请求转发(forward)场景下Servlet到JSP的数据传递全过程02MVC模式中最常用的数据传递方式:Servlet处理业务逻辑后将结果setAttribute到request,再forward给JSP展示03请求重定向(redirect)会创建新的request对象,因此重定向后的页面无法获取原request域中的数据MVC数据桥梁JSP内置对象·作用域session域与application域详解session域管理单个用户会话期间的私有数据,典型应用是存储登录状态和购物车;application域管理整个Web应用的全局共享数据,典型应用是系统配置和访问统计。两者的核心区别在于数据隔离级别——session是用户隔离的,application是全局共享的。session会话域会话周期隔离—作用范围为一个用户会话周期(默认30分钟超时),每个浏览器会话拥有独立的session实例,数据用户间互不可见登录态存储—最典型应用是存储登录用户信息:用户登录后将User对象setAttribute到session,后续页面通过getAttribute获取当前用户生命周期管理—浏览器关闭后Cookie中的JSESSIONID丢失,服务器端session在超时后自动销毁,两种方式均导致会话数据丢失30min默认超时application应用域全局生命周期—作用范围覆盖整个Web应用生命周期,从应用部署启动到服务器关闭期间数据始终有效,所有用户共享同一份数据共享数据场景—典型应用包括:网站访问计数器、全局系统配置参数、公共缓存数据、在线用户列表等需要跨用户共享的信息线程安全—因所有用户并发访问同一份数据,修改application域中的共享数据时需考虑线程安全问题,建议使用同步机制全局共享所有用户可见JSPScopeObjects四大域对象对比与选择策略四大域对象的核心差异在于作用域范围和生命周期。实际开发中应遵循'最小作用域原则'——优先使用作用域最小的域对象来存储数据,既能满足需求又能减少内存消耗和并发风险。四大域对象核心对比域对象作用域范围生命周期典型应用场景pageContext当前JSP页面页面响应结束即销毁页面内临时变量、循环计数器request一次请求链(含forward)请求处理完成即销毁Servlet向JSP传递查询结果session一个用户会话超时30分钟或手动销毁用户登录状态、购物车数据application整个Web应用应用启动到服务器关闭全局配置、访问计数器、缓存遵循最小作用域原则:pageContext<request<session<application,优先使用小域。CHAPTER06JSP常用标签与Listener监听器静态包含、动态包含、页面转发与事件监听机制JSPINCLUDE静态包含与动态包含的机制对比静态包含在翻译阶段合并内容,只生成一个Servlet,效率高;动态包含在运行时执行目标页面,灵活但有性能开销。静态包含常用语法为<%@includefile="路径"%>,在JSP翻译阶段将目标文件内容原封不动合并到当前页面合并后只翻译生成一个Servlet文件,执行效率高,适合包含公共头部、底部、导航栏等固定内容被包含文件中不能定义与当前页面同名的变量或方法,否则翻译时会产生命名冲突导致编译错误动态包含少用语法为<jsp:includepage="路径"/>,在运行时才执行目标页面并将其输出结果嵌入当前页面当前页面和目标页面各自翻译为独立的Servlet,不会产生命名冲突,灵活性更强可通过<jsp:param>子标签向被包含页面传递参数,但运行时执行额外页面带来一定性能开销JSPActionTags页面转发标签(jsp:forward)jsp:forward标签用于在JSP页面中将请求转发到另一个资源处理,效果等同于Servlet中的RequestDispatcher.forward(),URL保持不变且request域数据可传递。但需注意在forward之前的输出若已刷新到客户端则会抛出异常。01基本语法<jsp:forwardpage="路径"/>语法为<jsp:forwardpage="路径"/>,将当前请求转发到目标JSP或Servlet处理,浏览器URL地址保持不变。URL不变02数据共享转发前后共享同一个request对象,因此可以通过request域在源页面和目标页面之间传递数据。request共享03参数传递<jsp:param>getParameter()可通过<jsp:param>子标签在转发时附加请求参数,目标页面用getParameter()获取。jsp:param04异常风险IllegalStateException若forward标签之前的页面输出已经刷新到客户端缓冲区,执行转发时将抛出IllegalStateException异常。BufferFlushJAVAWEB·LISTENERListener监听器概念与工作原理Listener监听器是JavaWeb的事件驱动组件,通过实现特定接口监听Web对象的创建销毁和属性变化事件。01监听器基于Java事件监听机制设计,开发者编写实现类并注册后,Tomcat在对应事件发生时自动调用回调方法02编写Java类实现监听器接口→重写回调方法→在web.xml中配置或使用@WebListener注解注册03与Servlet、Filter并称为JavaWeb三大组件,各自承担请求处理、请求过滤和事件监听的不同职责04典型应用:应用启动时初始化缓存数据、统计在线用户数、记录访问日志、定时任务触发等服务器运维监控·数据中心事件监听场景LIFECYCLELISTENERServletContextListener详解ServletContextListener监听Web应用的启动和关闭事件,contextInitialized在应用启动时执行初始化逻辑(如加载配置、创建连接池),contextDestroyed在应用关闭时执行资源清理。它是JavaWeb中最常用的监听器,承担应用级生命周期管理职责。核心回调方法01contextInitializedWeb应用启动后自动调用,适合执行数据库连接池初始化、配置文件加载、缓存预热02contextDestroyedWeb应用关闭前自动调用,适合执行数据库连接释放、线程池关闭、临时文件清理03ServletContext对象通过ServletCon

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论