版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
欢迎大家进入就业班进行培训姓名:杜宏电话::22597927第一天2框架介绍1、三大框架:是企业主流开发的一套架构2++2、什么是框架?为什么要学框架?框架是实现部分功能的代码(半成品),使用框架简化企业级软件开发学习框架,清楚的知道框架能做什么?还有哪些工作需要自己编码实现?3、什么是2?2是一款优秀框架:是一种思想,是一种模式,将软件分为模型、视图、控制器*由来是开发软件三层结构:层(表现层)、业务逻辑层、数据持久层(提供开发规范)开发更强调三层结构,层开发注重2就是层开发框架,符合模式*1、、、都是4、2和1关系没有关系,2全新框架,引入很多技术和思想,2保留1类似开发流程*2内核提供了很多核心功能:前端拦截机(),运行时表单属性验证,类型转换,强大的表达式语言(–),(反转控制)容器等2快速入门1、下载开发包课程以23.15.1讲解2、目录结构:2官方:文档:包:源码3、导入包到开发工程只需要导入2中所有包13个包4、编写页面请求页面<a"${}">访问2入门<>结果页面5、在配置2前端控制器()<> <>2<> <>2<><><> <>2<> <>/*<><>6、执行2过滤器后,读取2配置文件,将请求分发在下创建<"""/"""> <<a"${}">访问2入门<>> <将请求分发给一个> <的就是去掉扩展名> <"""21"><><>7、执行目标中方法8、在的方法中返回字符串,在中配置字符串及页面对应关系<"">1<>完成结果页面跳转2流程分析及工具配置1、运行流程请求核心控制器拦截器(实现代码功能)的结果页面*拦截器在定义*执行拦截器是中引用拦截器通过源代码级别断点调试,证明拦截器是执行2、配置提示问题如果安装编辑器,请不要用自带编辑器编写2配置文件提示来自于约束, < "2.3" ""> 如果可以上网,自动缓存,提供提示功能 如果不能上网,也可以配置本地提示***导入时,应该和配置版本一致3、关联2源码关联包4、插件使用提供在浏览器中查看2配置加载情况将解压222.3.7复制下访问查看2配置加载情况2配置学习路径1)、常量配置(配置文件顺序)、访问()、结果集(使用2编写简单案例)2)、请求数据3)、响应页面生成2配置文件加载顺序2配置文件由核心控制器加载(预处理,执行过滤)();[1]2();[2]();[3]自定义();[5]自定义配置提供();[6]();[7]加载结论:该文件保存在22.3.7中2包里面(常量的默认值)该文件保存在22.3.7(、拦截器、结果类型)该文件保存在2.3.7(在插件包中存在,配置插件信息)该文件是应用默认的配置文件(实际开发中,通常写)******************************该文件是的默认配置文件(配置常量)该文件是应用的配置文件(配置常量)*后加载文件中2常量会覆盖之前加载文件常量内容2的配置1)必须要为<>元素配置<>元素(2围绕进行的相关配置) 配置三个常用属性 <"""/"""> 包名称,在2的配置文件文件中包名不能重复,并不是真正包名,只是为了管理 和<>的属性,决定的访问路径(以/开始) 继承哪个包,通常开发中继承包(包在定义) *继承包后,可以使用包中定义拦截器和结果类型2)的通过<>元素配置 <"""21"> <>的和<>的属性共同决定的访问路径!!!!!!!! 例如: <""""""> <"""21"> 访问路径3)<>元素配置默认值<>的默认值“” <>的默认值类 <>的默认值默认和的默认处理类1)默认,解决客户端访问不存在的问题,客户端访问,找不到,默认就会执行<"元素的"/>2)默认处理类,客户端访问,已经找到匹配<>元素,但是<>元素没有属性,执行默认处理类<"完全类名"/> *在配置默认处理类2的常量配置1)2默认常量在中配置2)开发者自定义常量 (要求) 格式:<""""/> (要求) 格式:= 格式: <> <>2<> <>2<><> <><> <><> <> <>3)常用常量 <"18""8"/>相当于("8");解决请求乱码 <""""/>访问2框架访问路径扩展名(要求) *,,默认以结尾扩展名和不写扩展名都会分发给 <""""/>不缓存,浏览器会缓存静态内容,产品环境设置、开发环境设置 <""""/>提供详细报错页面,修改后不需要重启服务器(要求)2配置文件分离通过<"1"/>将2配置文件拆分请求提交2核心控制器请求分发给不同书写的的三种格式第一种可以是(()简单的对象)不需要继承任何父类,实现任何接口 *2框架读取获得完整类名 *=("完整类名")();*m=("完整类名")("");();通过反射执行方法第二种编写实现接口 接口中,定义默认五种逻辑视图名称 ="";数据处理成功(成功页面) ="";页面不跳转;效果一样 ="";数据处理发送错误(错误页面) ="";用户输入数据有误,通常用于表单数据校验(输入页面) ="";主要权限认证(登陆页面)*五种逻辑视图,解决处理数据后,跳转页面 第三种编写继承(推荐)在中使用表单校验、错误信息设置、读取国际化信息三个功能的配置(通配符)1)在配置<>元素时,没有指定属性,默认执行类中方法 <"1""231"/>2)在<>元素内部添加属性,指定执行中哪个方法 <"""24"""/>执行的方法 *将多个请求业务方法写入到一个类中 <"""24"""><> <"""24"""><>3)使用通配符*,简化配置 <a"${}">添加客户<> <a"${}">删除客户<> <"*""24""{1}"><>{1}就是第一个*匹配内容动态方法调用访问中指定方法,不进行配置1)在工程中使用动态方法调用,必须保证=常量值为2)在的访问路径中使用"!方法名" 页面 <a"${}">添加商品<> 配置 <"""24"><> 执行中的方法访问1、在中解耦合方式间接访问使用对象在2中已经及解耦合(没有依赖关系)*常见操作:表单提交请求参数获取,向、、三个范围存取数据=();1)();获得所有请求参数集合2)("","传智播客");/("")对范围存取数据3)();获得数据,对范围存取数据4)();获得数据,对应用访问存取数据2、使用接口注入的方式,操作(耦合):注入对象:注入对象:注入对象*程序要使用哪个的对象,实现对应接口3、在中直接通过获得():获得对象()():获得对象():获得对象*静态方法没有线程问题,结果类型处理请求后,返回字符串(逻辑视图名),需要在提供<>元素定义结果页面1、局部结果页面和全局结果页面<"""26"> <局部结果当前使用> <"">6<><><> <全局结果当前包中所有都可以用> <"">6<><>2、结果页面跳转类型 *在定义了一些结果页面类型 *使用默认是转发()1) :转发给2):调用另一个(同一次请求) <""""><>是一个的3):重定向到4):重定向到另一个 <""""><>总结1、2环境搭建(导入包、、)2、2运行流程3、配置文件加载顺序4、<><><>元素配置5、书写三种方式6、指定方法调用、通配符、动态方法调用7、访问8.关于标签的属性取值.作业登陆练习完成``(``(11),``(20),``(20),(``))``('1','','123');第二天处理请求参数2和定义关系:控制器:视图:可以作为模型,也可以是控制器2接受请求参数:属性驱动和模型驱动处理请求参数三种方式第一种:本身作为对象,通过成员封装(属性驱动) 页面: 用户名<""""/><> : 1{ ; (){ =; } }问题一:封装数据,会不会有线程问题?*2是多实例,为了在封装数据(1是单例的)问题二:在使用第一种数据封装方式,数据封装到属性中,不可能将对象传递给业务层*需要再定义单独,将属性封装到第二种:创建独立对象,页面通过表达式封装(属性驱动) 页面: 用户名<""""/><>基于表达式的写法 : 2{ ; (){ =; } (){ ; } }问题:谁来完成的参数封装 <"""2"/>第三种:使用接口,对请求数据进行封装(模型驱动)主流 页面: 用户名<""""/><> : 3<>{ =();必须手动实例化 (){ ; } }*2有很多围绕模型驱动的特性*<"""2"/>为模型驱动提供了更多特性对比第二种、第三种:第三种只能在中指定一个对象,第二种可以在中定义多个对象 <""""/> <""""/>封装数据到和1)封装数据到对象 页面: 产品名称<"""[0]"/><> : { <>; <>(){ ; } (<>){ =; } }2)封装数据到对象 页面: 产品名称<"""['']"/><>是的键值 : 2{ <,>; <,>(){ ; } (<,>){ =; } } 2类型转换(了解)1、2内部提供大量类型转换器,用来完成数据类型转换问题和和和和和和可以接收格式字符串数组可以将多个同名参数,转换到数组中集合支持将数据保存到或者集合案例:输入合法年龄和生日可以自动转换当输入转换为类型时 ::23([; 分析:输入20,转换类型20() 输入,转换出错()报错方法不存在异常自定义类型转换器1)自定义类型转换器 第一种实现接口 (<>,,,,,) 第二种继承 (<>,,) 第三种继承 (,[],)请求封装 (,o)数据回显 *类型转换器一直都是双向转换 页面提交请求参数,封装到需要转换 数据需要在页面回显需要转换 2)以1990/10/10为例,自定义日期转换器,完成转换 (<,>,, ){ 根据判断是请求封装还是数据回显 =(""); (){ 请求参数封装(是字符串) []=([]); =[0];转换为日期类型 { (); }(e){ (); } }{ 回显(是) =(); (); } ; } 3)注册类型转换器 局部注册:只对当前有效(针对属性) 全局注册:针对所有的日期类型有效(针对类型) 局部注册:在类所在包创建类名,格式:属性名称=类型转换器的全类名 全局注册:在下创建,格式:待转换的类型=类型转换器的全类名类型转换错误处理通过分析拦截器作用,得知当类型转换出错时,自动跳转视图,在视图页面中<>显示错误信息 *在所在包中,创建,在局部资源文件中配置提示信息:.属性名=错误信息请求参数校验校验的分类:客户端数据校验和服务器端数据校验客户端数据校验,通过完成校验(改善用户体验,使用户减少出错)服务器数据校验,使用框架内置校验功能(2内置校验功能)必须的2支持校验方式代码校验:在服务器端通过编写代码,完成数据校验配置校验:配置校验(主流)和注解配置校验手工代码校验请求参数步骤一:封装数据 步骤二:实现校验,必须继承类 步骤三:覆盖方法,完成对的业务方法数据校验 通过代码逻辑判断参数是否有效,如果参数非法,(提供) 拦截器跳转回页面 步骤四:在中通过<>显示错误信息*方法会对中所有业务方法进行校验,如果只想校验某一个方法 :方法名()配置方式数据校验配置方式数据校验(企业主流校验) 代码校验不适用于大型项目,流程数据复杂时,开发量和维护量都会很大配置校验原理:将很多校验规则代码已经写好,只需要在中定义数据所使用校验规则就可以了 步骤一:编写 步骤二:编写继承或者实现接口 步骤三:封装请求参数 *使用校验必须提供方法 步骤四:编写校验规则文件 在所在包编写类名对所有业务方法进行校验 引入2.3.7中1.0.3 < "1.0.3" "1.0.3"> 内置校验器定义文件2.3.7中2内建校验器*(必填校验器,要求被校验的属性值不能为)*(必填字符串校验器,要求被校验的属性值不能为,并且长度大于0,默认情况下会对字符串去前后空格)*(字符串长度校验器,要求被校验的属性值必须在指定的范围内,否则校验失败参数指定最小长度,参数指定最大长度,参数指定校验之前是否去除字符串前后的空格)*(正则表达式校验器,检查被校验的属性值是否匹配一个正则表达式,参数指定正则表达式,参数指定进行正则表达式匹配时,是否区分大小写,默认值为)*(整数校验器,要求的整数值必须在指定范围内,指定最小值,指定最大值)*(双精度浮点数校验器,要求的双精度浮点数必须在指定范围内指定最小值指定最大值)*(字段表达式校验器,要求满足一个表达式,参数指定表达式,该逻辑表达式基于进行求值,返回时校验通过,否则不通过)*(邮件地址校验器,要求如果被校验的属性值非空,则必须是合法的邮件地址)*(网址校验器,要求如果被校验的属性值非空,则必须是合法的地址)*(日期校验器,要求的日期值必须在指定范围内指定最小值指定最大值)案例必填校验器<""><>性别不能为空!<><>必填字符串校验器<""><""><><>用户名不能为空!<><>:字符串长度校验器<""> <"">10<> <"">2<> <""><> <><![[产品名称应在2-10个字符之间]]><><>:整数校验器<""> <"">1<> <"">150<> <>年龄必须在1-150之间<><>:日期校验器<""> <"">1900-01-01<> <"">2050-02-21<> <>生日必须在${}到${}之间<><>:网络路径校验器<""> <>传智播客的主页地址必须是一个有效网址<><>:邮件地址校验器<""> <>电子邮件地址无效<><>:正则表达式校验器<""><""><![[^13\d{9}$]]><><>手机号格式不正确!<><>:字段表达式校验<""><""><![[()]]><><>两次密码输入不一致<><>如何对指定的方法校验???格式类名(<>元素属性) 例如:校验中方法配置<"">校验文件名字:自定义校验规则(了解一下就行)步骤一:自定义校验器必须实现接口 通常自定义校验器继承和 *针对不是一个输入字段(两个密码一致) *针对是一个输入字段(用户名非空) 步骤二:注册校验器 在工程的下新建文件 引入2.3.7中1.0 步骤三:使用校验器 在所有包创建类名****实际开发中很少用到自定义校验器第三天2国际化1、国际化原理?什么是国际化? 同一款软件可以为不同用户,提供不同语言界面国际化软件 需要一个语言资源包(很多文件,每个文件针对一个国家或者语言,通过程序根据来访者国家语言,自动读取不同文件)2、资源包编写 文件命名:基本名称_语言(小写)_国家(大写)例如: 中国中文 美国英文3、根据不同(地域信息),读取不同国家文件=("",);国际化配置第一种全局国际化信息文件(所有都可以使用)最常用 *文件可以在任何包中 *需要在中配置全局信息文件位置 <"18"""><>在根目录 <"18"""><>在包国际化信息 在中使用:(""); 在中使用:<""/> 在配置文件中(校验):<""><>第二种范围信息文件(只能在某个中使用) 数据只能在对应中使用,在类所在包创建类名无需配置第三种范围信息文件(中所有都可以使用) 数据对包(包括子包)中的所有都有效,在包中创建无需配置第四种临时信息文件(主要在中引入国际化信息) 在指定读取哪个文件 <18n"27"> <""><> <18n>***向信息中传递参数{0}{1}动态消息文本 ("",[]{"用户名"});2拦截器拦截器介绍拦截器的使用,源自(面向切面编程)思想 拦截器采用责任链模式 *在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。 *责任链每一个节点,都可以继续调用下一个节点,也可以阻止流程继续执行在2中可以定义很多个拦截器,将多个拦截器按照特定顺序组成拦截器栈(顺序调用栈中的每一个拦截器)1、2所有拦截器都必须实现接口2、类实现了接口.并为,提供了一个空白的实现所有实际开发中,自定义拦截器只需要继承类,提供方法实现3、常用2拦截器 <""/>模型驱动 <""/>文件上传 <"">参数解析封装 <""/>类型转换错误 <"">请求参数校验 <"">拦截跳转视图自定义拦截器案例案例:登陆,对其它访问通过自定义拦截器进行权限控制 导入包(2、c3p0、、驱动) 工具类第一步:编写提供图书增删改查四个功能编写,提供四个业务方法第二步:完成登陆功能第三步:必须要登陆才能进行图书管理 使用进行权限控制过滤所有请求(所有资源访问) 使用拦截器进行权限控制主要拦截对访问(不能拦截)定义拦截器继承配置拦截器 方式一 <注册拦截器> <> <""""><> <> <"*""""{1}"> <使用拦截器> <当使用自定义拦截器后,默认拦截器就会失效> <""><> <""><> <> 方式二 <注册拦截器> <> <""""><> <自定义拦截器栈> <""> <""><> <""><> <> <> <设置当前包所有都使用自定义拦截器栈> <""><>2文件上传下载2文件上传提供拦截器,用于解析编码格式请求,解析上传文件的内容拦截器默认在栈中,默认会执行的在需要对上传文件内容进行接收 页面: <""""/> : { 接收上传内容 <""""/> ;这里变量名和页面表单元素属性一致 ; ; } *格式:上传表单项属性+、上传表单项属性+ *为三个对象提供方法通过提供进行文件复制,将上传文件保存到服务器端2文件上传问题解决配置视图,作为上传出错后跳转页面在文件上传时,如果发生错误,拦截器会设置错误信息,拦截器跳转到视图定义文件上传,采用技术*同时支持、上传技术(如果使用其它上传技术,单独下载包)通过常量设置文件上传总大小限制*2097152默认上传文件总大小2*超过文件总大小,跳转视图,通过</>回显错误信息在设置上传总大小<"""20000000"><>设置上传文件总大小,对所有上传有效,只想对当前进行设置,可以设置拦截器属性拦截器有3个属性可以设置. *:上传文件的最大长度(以字节为单位),默认值为2 *:允许上传文件的类型,各类型之间以逗号分隔 *:允许上传文件扩展名,各扩展名之间以逗号分隔如果针对进行参数设置,当出错时,在页面通过</>回显错误信息文件里预定义上传错误信息,通过覆盖对应显示中文信息 :{0} :{0}"{1}""{2}"{3} :{0}"{1}""{2}"{3} :{0}"{1}""{2}"{3}修改为 上传错误:{0} 上传文件太大:{0}"{1}""{2}"{3} 上传文件的类型不允许:{0}"{1}""{2}"{3} 上传文件的后缀名不允许:{0}"{1}""{2}"{3}多文件上传第一步:在下加入1.2.1、1.3.2。这两个文件可以从下载。第二步:把表的设置为:““,如下:<"""${}"""><""""><""""><>第三步:在类中添加以下属性,属性红色部分对应于表单中文件字段的名称:{[]得到上传的文件[]得到文件的类型[]得到文件的名称这里略省了属性的方法(){=();=("");{(>0){(0<){=([i]);([i],);}}}(e){();}"";}}2文件下载1)2完成文件下载,通过结果集类型()来完成的 定义<"""2"/>2)使用结果集完成文件下载 文件下载原理:服务器读取下载文件内容,通过响应流写回,设置、头信息{ ="";头信息(下载文件对应协议规定类型) *. ="";头信息(下载文件打开方式浏览器内部打开,以附件形式打开) ="";需要中提供方法返回提供下载文件内容} 提供返回值方法指定下载文件流配置结果集参数<"">${}<>在中提供 *()();配置结果集参数<"">${}<>在提供 *下载附件名乱码问题,和火狐解决不同 (,) { (("")){火狐浏览器 ="8?" +64()(("8")) +""; }{及其他浏览器 =(,"8"); } ; }表示式使用和值栈是(对象图导航语言)的缩写,它是一个开源项目。2框架使用作为默认的表达式语言。 *提供表达式 *3.0.5是一种比强大很多倍的语言提供五大类功能1、支持对象方法调用,如();2、支持类静态的方法调用和值访问3、访问上下文()和;(重点操作值栈)4、支持赋值操作和表达式串联5、操作集合对象。1、使用访问对象方法和静态方法 *在结合2标签库使用,<"表达式"/>执行表达式调用实例方法:对象.方法()<"''()"/>调用静态方法:@[类全名(包括包路径)]@[方法名]<"('您好','小明')"/> *使用静态方法调用必须设置2、访问上下文()和上下文()对象值栈问题一:什么是值栈? 是2提供一个接口,实现类值栈对象(是从值栈中获取数据的) 每个实例都有一个对象(一个请求对应一个对象) 在其中保存当前对象和其他相关对象(值栈中是有引用的) 框架把对象保存在名为“”的请求属性中中(值栈对象是一个属性)问题二:值栈的内部结构?值栈由两部分组成 :把动作和相关对象压入中 :把各种各样的映射关系(一些类型的对象)压入中 会把下面这些映射压入中 :该中包含当前请求的请求参数 :该中包含当前对象中的所有属性 :该中包含当前对象中的所有属性 :该中包含当前对象中的所有属性 :该按如下顺序来检索某个属性:,,中存在属性()、属性() *就是 *就是对应引入对象 *中还存在、、、、对象引用 *表达式,访问中数据时不需要#,访问、、、、对象数据必须写# *操作值栈默认指操作元素问题三:值栈对象的创建,和是什么关系? 值栈对象是请求时创建的 中(,); *创建对象过程中,创建值栈对象 *对象对对象有引用的(在程序中通过获得值栈对象) 类方法中将值栈对象保存到范围 (,()());问题四:如何获得值栈对象 获得值栈对象有两种方法 =()()(); 2=()();问题五:向值栈保存数据(主要针对) 两种方式 将数据保存的索引0位置,放置到第一个元素(0); (""); 在值栈创建参数,将数据保存到中 ("","传智播客"); 在中通过</>查看值栈的内容问题六:在中获取值栈的数据访问中数据不需要#访问其它对象数据加#通过下标获取中对象<"[0]"/>取值栈顶对象直接在中查找对象属性(自上而下自动查找):<""/>在中获取数据:<""/>:<""/>:<""/>:<""/>:<"[0]"/>第四天表达式使用和值栈1、值栈在开发中应用主流应用:值栈解决向传递数据问题向传递数据处理结果,结果数据有两种形式1)消息类型数据 ("","字段错误信息"); ("全局错误信息"); ("的消息信息");*针对某一个字段错误信息(常用于表单校验)、(普通错误信息,不针对某一个字段登陆失败)、通用消息 在中使用2提供标签显示消息信息 <""/> <> <>2)数据(复杂类型数据) 使用值栈();哪些数据默认会放入到值栈??? 1)每次请求,访问对象会被压入值栈的方法(); *如果想传递数据给,只有将数据保存到成员变量,并且提供方法就可以了 2)接口有一个单独拦截器 <"""2"/> 在拦截器中,将对象压入了值栈(); *如果实现接口,值栈默认栈顶对象就是对象2、值栈的数据通过访问问题七:为什么也能访问值栈中的数据的代码中=(); *对对象进行了包装, *重写的 =(s); (){ =(s); }访问范围的数据时,如果数据找不到,去值栈中找对象具备访问值栈数据的能力(查找的数据)3、表达式常见使用#、%、$符号使用 1)#的使用用法一#代表()上下文<""/>>()()()("");用法二:不写#默认在值栈中中进行查找<""/>在中查找属性*查询元素时,从的栈顶元素开始查找,如果访问指定栈中元素<"[1]"/>访问栈中第二个元素属性*访问第二个元素对象<"[1]"/>用法三:进行投影映射(结合复杂对象遍历)1)集合的投影(只输出部分属性<h1>遍历集合只要属性<1> <".{}"""> <""/> <>2)遍历时,对数据设置条件 <h1>遍历集合只要大于1500商品<1> <".{>1500}"""> <""/><""/> <>3)综合<h1>只显示价格大于1500商品名称<1> <".{>1500}.{}"""> <""/> <>用法四:使用#构造集合 经常结合2标签用来生成、、 <h1>使用#构造集合遍历<1> <"#{'':'','':'20','':''}"""> :<""/>,:<""/><> <>2)%的使用用法一:结合2表单表单使用,通过%通知,%{}中内容是一个表达式,进行解析<"""%{}"/>用法二:设置表达式不解析%{'表达式'}<"%{''}"/>3)$的使用用法一:用于在国际化资源文件中,引用表达式 在文件欢迎您,${} 在页面 <18n""> <""><> <18n> *自动将值栈的结合国际化配置信息显示用法二:在2配置文件中,引用表达式 <在提供方法> <"">${}<> *${}读取值栈中数据,在提供因为对象会被压入值栈, 是属性,从值栈获得结论:#使用表达式获取数据,%控制表达式是否解析,$用于配置文件获取值栈的数据2标签库就是2标签规范1、通用标签库的学习<>解析表达式,设置默认值,设置内容是否转义<>向四个数据范围保存数据<>遍历值栈中数据<><><>进行条件判断可以有多个<>进行重写(追踪),结合进行参数编码 *<"""/"""> <"""%{'协议简介'}"><> <> <""/><>对一个链接进行参数编码*<"""/">下载协议简介 <"""%{'协议简介'}"><> <>了解部分:支持赋值操作和表达式串联、操作集合对象 1)在值栈中保存一个对象<"1000'冰箱'()"/>自动查找值栈中和属性为其赋值 2)操作集合 <"[0]"/>访问集合第一个元素属性 <"['']"/>访问中为的值 {}直接构造元素、#{}直接构造元素 <"{'',''}""s"> <""/> <> <"#{'':'111','':'222'}"""> <""/> <>2、标签库的学习(标签)使用2标签好处:支持数据回显,布局排班(基于模板定义) 2表单标签属性。必须写%{}进行设值*******使用2表单标签前,必须配置..,<>表单标签 <"""/""""">""默认布局样式<>生成<""> <>生成<""><"""注册"/>生成<""><"""重置"/> 生成<"">*2除了支持之外,支持两种模板技术(扩展名)、(扩展名)<>生成<>多行文本框<>生成一组 *使用构造(看到值和提交值不同时) *<"#{'':'体育','':'读书','':'音乐'}"""><><>生成一组 *使用构造(看到内容和提交值相同时) *<"{'男','女'}"""><><>生成一个<> *<"{'北京','上海','南京','广州'}"""><>2开发密码框默认不回显<""""""/>3、页面元素主题设置设置2页面元素使用默认主题 默认模板引擎 修改主题方式一:<"""用户名“""><>只对当前元素有效 方式二:<"""""“"">对中所有元素有效 方式三: <""""><>修改默认主题样式,页面所有元素都有效优先级:方式一>方式二>方式三防止表单重复提交原理表单防止重复提交表单重复提交危害:刷票、重复注册、带来服务器访问压力(拒绝服务)1、在通过</>生成令牌号生成表单隐藏域将令牌号保存到2、通过2提供拦截器完成请求中令牌号和中令牌号比较<"""2"/> <"""2"> <><> <重新定义拦截器> <""><> <""><> <>3、当表单重复提交时,拦截器自动跳转""通过<>显示错误信息覆盖重复提交信息您已经重复提交表单,请刷新后重试2内置插件知识点:2的开发开发客户端和服务器交互数据格式*是最轻量级,体积最小服务器将程序处理结果,转换为格式发送给客户端*、工具类库*22.3.7案例一:输入用户名,鼠标点击密码(触发用户名元素离焦事件),使用将用户名发送到服务器判断是否存在1.4、1.6新特性比较多(企业主流1.4)使用2插件要点1:<>继承要点2:<>类型写**********2插件,默认将值栈顶端对象所有属性返回(方法)不想将属性返回,在方法上()案例二:服务器将商品对象列表返回如果实现,对象就是值栈栈顶对象,2插件默认将返回通过设置属性,修改插件返回根对象*<""><>将作为根对象返回只想要每个商品的属性方案一:在、的方法上添加()只要注解,属性将永远不能参及返回方案二:设置属性<"">\[\\]\<>第五天一、项目本地导入新建,覆盖对应和新建,覆盖,将中内容复制目录企业级应用软件,布局经常采用,左侧菜单树使用组件制作的目标功能:1、登陆2、添加用户(简历上传)3、组合条件员工信息列表查询4、员工信息详情查看(简历下载)5、员工信息删除6、员工信息编辑二、数据库设计#新建数据库2;#创建用户2'2';#授权2.*2;*****和作为应用数据库区别存在数据库概念,在企业开发中,针对一个项目创建一个单独数据库,创建单独用户,为用户授予数据库权限,一个数据库就是一个服务,在这个库中可以存在很多用户,每个用户有单独表空间,针对一个项目,只需要创建一个用户#用户表( ,#主键 (50),#用户姓名 (50),#登录名 (50),#密码# (10),#性别(例如:男,女) (50),#出生日期 (20),#学历(例如:研究生、本科、专科、高中) (50),#电话 (20),#兴趣爱好(例如:体育、旅游、逛街) (500),#上传路径(路径) (100),#上传文件名称(文件名) (500),#备注 ());#初始化数据:默认用户名和密码是()(1,'超级管理员','','');三、搭建开发环境2+++C3P0++导入包和配置文件创建包结构四、功能开发登陆功能内网应用系统通常不需要验证码技术1、登陆页面元素改造<>*的提交路径怎么写?企业中为了代码可维护性,通常一个业务模块()使用一个将登陆、员工增删改查对应业务方法写入到同一个2、登陆表单数据校验用户名非空,3-12位密码非空3、完成登陆逻辑,保存用户,跳转主页${}显示当前登陆用户五、功能开发员工添加1、员工添加页面元素改造<>日期输入,使用控件 *$('')({:''});<"">访问中方法2、数据校验校验出现跳转问题,登陆页面校验失败跳转,员工添加校验失败跳转只能配置一个 *<"""2"/>完成跳转可以通过注解,改为校验失败后跳转视图3、上传简历如果真实文件名保存,出现覆盖问题唯一文件名*在保存文件名路径和真实文件名六、组合条件查询查询员工列表1、查询页面改造<><"">提交请求的方法2、条件组合查询语句动态拼接 ="*1=1"; <>=<>();参数列表 (() ()()()>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年增资协议合同签订流程
- 2025年仓储货物出借协议
- 2025年圣诞节装饰协议
- 2025年商业责任不足额保险条款设定
- 二零二五版木屑生物质颗粒燃料研发与推广合同4篇
- 二零二五年度木工行业技术标准制定合作协议3篇
- 二零二五年度汽车抵押贷款购车二手车过户合同
- 二零二五年度科技创业项目股权众筹委托投资合同
- 二零二五年度车辆绿色出行补贴购买合同
- 二零二五年度经典实习合同(法律事务实习)
- 机电安装工程安全培训
- 洗浴部前台收银员岗位职责
- 2024年辅警考试公基常识300题(附解析)
- GB/T 43650-2024野生动物及其制品DNA物种鉴定技术规程
- 暴发性心肌炎查房
- 工程质保金返还审批单
- 【可行性报告】2023年电动自行车项目可行性研究分析报告
- 五月天歌词全集
- 商品退换货申请表模板
- 实习单位鉴定表(模板)
- 数字媒体应用技术专业调研方案
评论
0/150
提交评论