JavaWeb后台基础

一、JSP基础

概述:JSP是一个用于解决servlet程序难于输出静态HTML标签困难而诞生的,它巧妙的结合了servlet程序可编程的优点和静态文件可简便而大量输出静态标签的优点与一体。因此JSP中的组成元素有HTML、Java脚本、标签指令

本质:JSP本质就是servlet程序;它的转换过程如下: 第一次访问JSP--->JSP引擎(其实就是servlet)检查和编译该JSP页面---->编译为.java源程序和.class的文件并创建对应的servlet实例--->调用其_jspService(其实就是service)方法来响应。

源码分析:JSP编译成的.java源程序是继承HttpJspBase抽象类并且覆写了HttpJspBase里的jspInit和jspDestory方法;同时HttpJspBase抽象类又继承了HttpServlet和实现了HttpJspPage接口,并且覆写了HttpServlet里定义的servlet的生命周期方法并在这三个生命周期方法上添加了final的修饰符,同时HttpJspBase还实现了HttpJspPage的父接口里定义的jspInit和jspDestory这两个方法,其覆盖方法为jspInit和_jspInit、jspDestory和_jspDestory;其中注意的是在jsp编译成的源码里只是覆写了jspInit和jspDestory这两个,而剩下的两个是给JSP引擎使用的;同时JSP编译成的源码还覆写了HttpJspPage里定义的_jspService方法。还有注意的一点是:HttpJspBase里的方法调用,即HttpJspBase覆写的servlet生命周期方法里分别对应调用了jspInit、_jspInit这些方法,但在service中只调用了_jspService方法;因此JSP由JSP引擎编译后成servlet程序后之后它的响应是由servlet引擎来调用其_jspService方法响应的。

注意:对于JSP编译成的servlet源程序中JSP的九大内置对象只在_jspService方法内部有效而在JSP的声明里则不能使用九大内置对象

二、转发和包含与重定向 1、转发

1.1、ServletContext.getRequestDispatcher().forward(request,response); 这种方法的转发与常见的request.getRequestDispatcher().forward(request,response)并无本质区别。

1.2、pageContext.forward();这种方式的转发,其中的相对路径如果不是以“/”开头那么就是相当于当前访问的URL,以“/”开头就是web应用的根路径 <jsp:forward page="">JSP动态标签的动态转发带编译为源码后本质就是pageContext.forward这条语句。所以这两者无本质区别,但要注意动态标签的转发之后的比如模板元素或者其他脚本语言都不会再执行了因为在这条动态标签生成的源码后多了一条return语句。

转发注意:1.1的转发要求调用程序往servlet引擎缓存写的内容没有真的传送到浏览器,如果在转发之前传到了浏览器那么就会报错,如果没有传送到就可以调用转发,转发后会清空缓存里调用者程序写的内容,而调用之后如果还继续往缓存里写,那么这些内容也都会被视为无效。

1.2的转发要注意的是,调用程序往JSP内置对象out里的缓存里写的内容,在调用了转发后会被清空,但调用了转发后继续往out对象缓存写的内容是视为有效的

2、包含

2.1、ServletContext.getRequestDispatcher().include(); 与request.getRequestDispatcher().include()、pageContext.include()、<jsp:include page="">;这四个方法本质没区别,都属于动态包含 <%@include file="">而JSP的指令包含属于静态包含,指的是在JSP引擎编译JSP为servlet时把两个源程序合而为一,所以对于在被包含的JSP中声明的指令属性中除了pageEncoding和import可以不一样外其他的指令的属性值必须一样否则会报错。同时如果引入的是静态资源,那么被引入的资源的输出位置是看这个指令在调用程序里的位置

2.2、转发和包含特别注意:转发时调用程序可以设置响应头信息但设置的响应实体都无效,而被调用者,可以设置响应头但;而包含时调用者可以设置响应头与响应实体内容,但被调用者只能设置响应实体内容,设置的响应头无效

3、重定向 重定向本质上是两次不同的请求,而对于重定向时,调用者程序如果往servelt引擎里写了内容那么但只要未传送到浏览器就可以调用重定向,否则就会报错,而写入缓存里的内容也会被清空,而调用之后如果还往缓存里写的内容那么也会被视为无效。在这里关于重定向与转发的区别就不写了。

4、JSP的内置对象out的缓存

4.1、out、print与out、write的区别就是,如果输出的是null的字符串,前者会输出“null”的字符串而后者会包空指针异常。

4.2、而对于out对象它的输出首先是输出到out对象的缓存,如果out的缓存里有内容那么在以下三种情况会调用response.getWriter()方法把缓存的内容加载进servlet引擎的缓存里。 *JSP页面结束 *关闭了out对象的缓存 *out对象的缓存满了

转载于:https://juejin.im/post/5bdaa953f265da39186d24a8

JavaWeb是基于 SpringBoot2+Layui2.5.6+Thymeleaf++Shiro+MybatisPlus 研发的权限(RBAC)及内容管理系统,致力于做更简洁的后台管理框架,包含系统管理、代码生成、权限管理、站点、广告、布局、字段、配置等一系列常用的模块,整套系统一键生成所有模块(包括前端UI),一键实现CRUD,简化了传统手动抒写重复性代码的工作。 同时,框架提供长大量常规组件,如上传单图、上传多图、上传文件、下拉选择、复选框按钮、单选按钮,城市选择、富文本编辑器、权限颗粒度控制等高频使用的组件,代码简介,使用方便,节省了大量重复性的劳动,降低了开发成本,提高了整体开发效率,整体开发效率提交80%以上,JavaWeb框架专注于为中小企业提供最佳的行业基础后台框架解决方案,执行效率、扩展性、稳定性值得信赖,操作体验流畅,使用非常优化,欢迎大家使用及进行二次开发。 JavaWeb介绍: 1、模块化:全新的架构和模块化的开发机制,便于灵活扩展和二次开发。 2、模型/栏目/分类信息体系:通过栏目和模型绑定,以及不同的模型类型,不同栏目可以实现差异化的功能,轻松实现诸如资讯、下载、讨论和图片等功能。通过分类信息和栏目绑定,可以自动建立索引表,轻松实现复杂的信息检索。 3、JavaWeb企业级开发框架是一套基于SpringBoot2 + Layui开发出来的框架。 4、支持SQLServer、MySQL、Oracle、PostgreSQL、SQLite等多数据库类型。模块化设计,层次结构清晰。 5、Shiro权限认证,操作权限控制精密细致,对所有管理链接都进行权限验证,可控制到导航菜单、功能按钮。提高开发效率及质量。 6、常用类封装,日志、缓存、验证、字典、文件(本地、七牛云)。等等,目前兼容浏览器(Chrome、Firefox、360浏览器等) 7、适用范围:可以开发OA、ERP、BPM、CRM、WMS、TMS、MIS、BI、电商平台后台、物流管理系统、快递管理系统、教务管理系统等各类管理软件。 JavaWeb功能特性: 严谨规范: 提供一套有利于团队协作的结构设计、编码、数据等规范。 高效灵活: 清晰的分层设计、钩子行为扩展机制,解耦设计更能灵活应对需求变更。 严谨安全: 清晰的系统执行流程,严谨的异常检测和安全机制,详细的日志统计,为系统保驾护航。 组件化: 完善的组件化设计,丰富的表单组件,让开发列表和表单更得心应手。无需前端开发,省时省力。 简单上手快: 结构清晰、代码规范、在开发快速的同时还兼顾性能的极致追求。 自身特色: 权限管理、组件丰富、第三方应用多、分层解耦化设计和先进的设计思想。 高级进阶: 分布式、负载均衡、集群、Redis、分库分表。 命令行: 命令行功能,一键管理应用扩展。 基于SpringBoot 简化了大量项目配置和maven依赖,让您更专注于业务开发,独特的分包方式,代码多而不乱。 利用Thymeleaf模板引擎 对前台页面进行封装和拆分,使臃肿的html代码变得简洁,更加易维护。 JS封装 对常用js插件进行二次封装,使js代码变得简洁,更加易维护。 参数配置 灵活控制常用功能的开关,无需重启项目即可生效,实时刷新。 演示地址账号密码: 登录账号:admin 登录密码:123456 验证码:520
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值