xmvip01
xmvip01
关注数: 0
粉丝数: 6
发帖数: 35
关注贴吧数: 4
DAO开发实战业务分析 DAO开发实战业务分析 课程介绍 本课程是由Java SE向Java WEB学习的过渡课程,为了更好的巩固Java SE中所学习到的各项技术,同时也为了更完整的阐述Java在整个项目开发中的核心意义,所以讲解了综合的DAO设计模式。 在学习本课程之前请确保已经学习了:《Oracle从入门到精通》、《Java8编程入门》、《Java8面向对象编程》、《Java8高级编程》几门课程,并且已经熟练的掌握了接口、类集、JDBC等技术的使用。 课程链接:DAO开发实战业务分析 课时列表 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27889%2F&urlrefer=ca8f423b05f45e488a433c56dcb015b9 课时1:软件分层设计 课时2:设计分析实例 课时3:程序开发准备(定义数据库连接类) 课时4:程序开发准备(定义VO类) 课时5:数据层设计与开发(定义数据层标准) 课时6:数据层设计与开发(数据层标准实现类) 课时7:数据层设计与开发(数据层工厂类) 课时8:业务层设计与开发(定义业务层标准) 课时9:业务层设计与开发(业务层标准实现类) 课时10:业务层设计与开发(业务层工厂类) 课时11:业务测试(使用主方法测试) 课时12:业务测试(使用Junit测试) 课时13:数据库连接控制加强 课时14:业务层结构优化 课时15:数据层结构优化
DAO开发实战业务分析 DAO开发实战业务分析 课程介绍http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27889%2F&urlrefer=ca8f423b05f45e488a433c56dcb015b9 本课程是由Java SE向Java WEB学习的过渡课程,为了更好的巩固Java SE中所学习到的各项技术,同时也为了更完整的阐述Java在整个项目开发中的核心意义,所以讲解了综合的DAO设计模式。 在学习本课程之前请确保已经学习了:《Oracle从入门到精通》、《Java8编程入门》、《Java8面向对象编程》、《Java8高级编程》几门课程,并且已经熟练的掌握了接口、类集、JDBC等技术的使用。 课程链接:DAO开发实战业务分析 课时列表 课时1:软件分层设计 课时2:设计分析实例 课时3:程序开发准备(定义数据库连接类) 课时4:程序开发准备(定义VO类) 课时5:数据层设计与开发(定义数据层标准) 课时6:数据层设计与开发(数据层标准实现类) 课时7:数据层设计与开发(数据层工厂类) 课时8:业务层设计与开发(定义业务层标准) 课时9:业务层设计与开发(业务层标准实现类) 课时10:业务层设计与开发(业务层工厂类) 课时11:业务测试(使用主方法测试) 课时12:业务测试(使用Junit测试) 课时13:数据库连接控制加强 课时14:业务层结构优化 课时15:数据层结构优化
使用API扩展应用功能API 使用API扩展应用功能APIhttp://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27895%2F&urlrefer=7a55767303ac6a1c920ca7869611be81 (Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。 程序功能 远程过程调用(RPC):通过作用在共享数据缓存器上的过程(或任务)实现程序间的通信。 标准查询语言(SQL):是标准的访问数据的查询语言,通过通用数据库实现应用程序间的数据共享。 文件传输:文件传输通过发送格式化文件实现应用程序间数据共享。 信息交付:指松耦合或紧耦合应用程序间的小型格式化信息,通过程序间的直接通信实现数据共享。 当前应用于 API 的标准包括ANSI 标准SQL API。另外还有一些应用于其它类型的标准尚在制定之中。API 可以应用于所有计算机平台和操作系统。这些API 以不同的格式连接数据。每种数据格式要求以不同的数据命令和参数实现正确的数据通信,但同时也会产生不同类型的错误。因此,除了具备执行数据共享任务所需的知识以外,这些类型的API 还必须解决很多网络参数问题和可能的差错条件,即每个应用程序都必须清楚自身是否有强大的性能支持程序间通信。相反由于这种API 只处理一种信息格式,所以该情形下的信息交付API 只提供较小的命令、网络参数以及差错条件子集。正因为如此,交付API 方式大大降低了系统复杂性,所以当应用程序需要通过多个平台实现数据共享时,采用信息交付API 类型是比较理想的选择。 教学课程:使用API扩展应用功能http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27895%2F&urlrefer=7a55767303ac6a1c920ca7869611be81
根据业务量弹性使用云资源 根据业务量弹性使用云资源 课程目标1.深刻理解云计算的弹性特征; 2.熟悉阿里云弹性伸缩产品的基本功能与特点; 3. 掌握阿里云弹性伸缩产品的基本操作,包括伸缩组、伸缩配置、伸缩规则以及定时任务; 4.报警任务的创建与配置; 5. 能够使用阿里云弹性伸缩产品实现平台的弹性架构设计。 适用人群云计算感兴趣的人,阿里云认证课程简介 一个网站从零开始到上百万、上千万的用户,要如何预备服务器资源? 您还在苦苦监控服务器集群,担心不健康的实例影响的网站的运营? 还在烦恼如何在高峰期增加服务器资源,在业务回落时减少服务器资源? 通过这门精心设计的在线课程+动手实验,让你可以轻松Get到这些技能, 可以根据您的业务需求和策略,经济地自动调整弹性计算资源的管理服务。 根据业务量弹性使用云资源 阿里云大学课程链接http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F36985%2F&urlrefer=a9a0e4fad37b3c15cdb86f62c0b7893c
使用API扩展应用功能教学课程 使用API扩展应用功能教学课程 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。程序功能 远程过程调用(RPC):通过作用在共享数据缓存器上的过程(或任务)实现程序间的通信。 标准查询语言(SQL):是标准的访问数据的查询语言,通过通用数据库实现应用程序间的数据共享。 文件传输:文件传输通过发送格式化文件实现应用程序间数据共享。 信息交付:指松耦合或紧耦合应用程序间的小型格式化信息,通过程序间的直接通信实现数据共享。 当前应用于 API 的标准包括ANSI 标准SQL API。另外还有一些应用于其它类型的标准尚在制定之中。API 可以应用于所有计算机平台和操作系统。这些API 以不同的格式连接数据。每种数据格式要求以不同的数据命令和参数实现正确的数据通信,但同时也会产生不同类型的错误。因此,除了具备执行数据共享任务所需的知识以外,这些类型的API 还必须解决很多网络参数问题和可能的差错条件,即每个应用程序都必须清楚自身是否有强大的性能支持程序间通信。相反由于这种API 只处理一种信息格式,所以该情形下的信息交付API 只提供较小的命令、网络参数以及差错条件子集。正因为如此,交付API 方式大大降低了系统复杂性,所以当应用程序需要通过多个平台实现数据共享时,采用信息交付API 类型是比较理想的选择。 教学课程:使用API扩展应用功能 教程课时: 课时1:使用股票API在应用中添加股指信息 14:53 课时2:使用天气API在应用中添加天气信息 15:11 阿里云大学官网(阿里云大学 - 官方网站,云生态下的创新人才工场) 使用API扩展应用功能教学课程 教学连接http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27895%2F&urlrefer=7a55767303ac6a1c920ca7869611be81
云端专有网络构建与管理 云端专有网络构建与管理http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F36950%2F&urlrefer=e5d29f000e1f9e1a86b900d6ae16bcdf 专有网络VPC(Virtual Private Cloud)是阿里云推荐的网络类型,越来越多的用户选择使用VPC,一是安全,VPC可实现数据链路层的隔离,为每个租户提供独立、隔离的安全网络,二是VPC让用户有了网络管理能力,比如IP规划、路由管理等。本认证通过视频课程和实验,帮助学员掌握云上专有网络的构建和管理。 01 计算机网络基础 主要介绍计算机网络基本概念、七层网络和各层常见协议与设备,以及虚拟局域网的相关知识。免费试听02 云上网络架构 主要介绍传统数据中心和云数据中心对网络架构的需求,以及云计算网络架构设计知识。免费试听03 云上专有网络与经典网络 主要介绍云上专有网络与经典网络的相关概念、区别和使用场景。开始学习04 在云端搭建专有网络 主要介绍如何在云端搭建专有网络,包括网络规划和搭建方法。开始学习05 经典网络向专有网络迁移 主要介绍已有的经典网络如何向专有网络迁移,包括迁移策略、不同的迁移方法等。 云端专有网络构建与管理http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F36950%2F&urlrefer=e5d29f000e1f9e1a86b900d6ae16bcdf
阿里云消息服务使用教程 阿里云消息服务使用教程http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27862%2F&urlrefer=6172b27a0af19e5efd3286b84bade0ee 一. 项目需求描述 最近公司不断在与客户外部系统对接,订单是其中的一个对接任务。公司现有一个专门负责处理订单的中心系统,但订单来源都是通过定时任务去其他系统拉取的。前不久完善的一版旧系统,加入了商城的业务,也同步了外部系统的订单,所以成为了订单的源头。现在就需要对订单系统进行改变,从原来的拉取订单变更为主动的接收订单,所以我们使用的了阿里云的消息服务。二. 项目业务设计 我们有三个系统涉及到订单:A. java商城系统,B. ocs订单中心系统;C. php商城系统。现在A系统可以拿到所有的订单来源,所以在各个订单出发点发送消息服务,也就是A系统是消息生产者。在B系统,我们订阅A系统发送的消息,从而消费消息,将订单入库,即B系统是消息消费者。三. 项目MQ服务配置 在第一篇博客中,我们了解到消息队列的模式分为队列和主题两种,我们采用的是主题模式。阿里的消息服务用起来也很方便,直接在管理控制台去配置一下即可。 1. 新建topic 四. 项目MQ Java SDK 将mq加入到项目中,也比较简单,官网上也有对应的demo。 1. 消息生产者工具类:读取配置文件中在消息服务控制台配置好的topic,producer及一些密钥,创建消息生产者。public OrderProducer getPlusOrderProducer() { if (orderProducer != null) { return orderProducer; } Properties producerProperties = new Properties(); producerProperties.setProperty(PropertyKeyConst.ProducerId, Global.getConfig("PID_UQI_ORDER_UPLUS")); producerProperties.setProperty(PropertyKeyConst.AccessKey, Global.getConfig("ACCESS_KEY")); producerProperties.setProperty(PropertyKeyConst.SecretKey, Global.getConfig("SECRET_KEY")); producerProperties.setProperty(PropertyKeyConst.ONSAddr, Global.getConfig("ONSADDR")); orderProducer = ONSFactory.createOrderProducer(producerProperties); orderProducer.start(); logger.debug("uplus订单生产者启动..."); return orderProducer; } 阿里云消息服务使用教程http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27862%2F&urlrefer=6172b27a0af19e5efd3286b84bade0ee
阿里云证书服务使用教程 阿里云证书服务使用教程http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27875%2F&urlrefer=9a8f8f1914ada32c819491f544e1f68c 云服务器 Elastic Compute Service ECS 是一种 处理能力可弹性伸缩的计算服务。 三个优点 简单易用 高效稳定 成本低 课时2--1分钟快速定制ECS 开通阿里云ECS的步骤 获得使用资格 实名认证,100元 根据需求选择配置 丰富的选择,提供默认推荐配置 下单&收获 1分钟下单,3分钟收获,跟逛淘宝一样 阿里云云服务器的基本概念 1. 云服务器实例 instance 由CPU,内存,操作系统,系统盘,数据盘(可选)组成 2. 地区与可用区 region & zone 云服务器所在的位置,如北京的某个机房,你可以在多个机房备份你的资产。 3. 磁盘 disk 用于存储数据,根据存储量选择磁容量,可随时扩容(考试经验:磁盘而不是系统盘) 4. 镜像 image 操作系统模板,一般有Windows和Linux两大类,各种版本。 5. 虚拟专有网络 VPC 公共云上划分给用户的专属区域,保障安全 6. 安全组 security group 云服务器的虚拟防火墙,隔离不需要的访问源 课时3--3分钟便捷管理ECS 阿里云云服务器服务具有便捷管理,完全掌控,随时随地的特点。 1. 远程登陆实例 在控制台直接登陆 2. 远程重启实例 在控制台随时重启ECS实例 3. 修改登陆密码 在控制台随时修改ECS密码 4. 提高性能 随时升级CPU,内存,带宽 5. 扩大存储 原磁盘扩容,添加新磁盘(考试经验:磁盘而不是系统盘) 课时4--5分钟轻松运维ECS ECS快照 磁盘数据在某一时间点的拷贝,其最常见的用途是备份数据,当应用程序或人为误删一些数据时,可以通过快照找回。 使用ECS快照恢复误删数据 1. 查看随ECS实例购买的数据盘(控制台) 2. 在磁盘中写入一个文件(远程终端) 3. 制作数据盘快照(控制台) 4. 模拟误删文件(远程终端) 5. 停止实例,对数据盘做快照回滚(控制台) 6. 重启实例,验证数据恢复成功(远程终端) 性能监控,自动报警 ECS解决方案的优点 阿里云监控可以实时监控ECS的各项性能 云监控不需要任何配置,支持多种监控类型,而且完全免费 通过控制台即可查看实时监控状态,以及设置警报策略 总结 控制台 + 远程管理,轻松搞定ECS运维 课时5--在线实验 推荐大家把握实战机会,不要只是为了考试,动手试一试,对于知识点理解更深刻,更容易过关。 证书 在线考试通过以后,会获得证书。 阿里云证书服务使用教程http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27875%2F&urlrefer=9a8f8f1914ada32c819491f544e1f68c
Linux系统Web应用安全加固 Linux系统Web应用安全加固教学http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F36961%2F&urlrefer=837c2ae7ba84f05ce2268358ee294dba Linux系统由于其出色的性能和稳定性、开放源代码的灵活性和可扩展性,以及较低廉的成本,而受到计算机工业界的广泛关注和应用。其系统的安全性就必须要加强。 一. 账户安全 1.1 锁定系统中多余的自建帐号 检查方法: 执行命令 #cat /etc/passwd #cat /etc/shadow 查看账户、口令文件,与系统管理员确认不必要的账号。对于一些保留的系统伪帐户如:bin, sys,adm,uucp,lp, nuucp,hpdb, www, daemon等可根据需要锁定登陆。 备份方法: #cp -p /etc/passwd /etc/passwd_bak #cp -p /etc/shadow /etc/shadow_bak 加固方法: 使用命令passwd -l <用户名>锁定不必要的账号。 使用命令passwd -u <用户名>解锁需要恢复的账号。 风险: 需要与管理员确认此项操作不会影响到业务系统的登录 1.2设置系统口令策略 检查方法: 使用命令 #cat /etc/login.defs|grep PASS查看密码策略设置 备份方法: cp -p /etc/login.defs /etc/login.defs_bak 加固方法: #vi /etc/login.defs修改配置文件 PASS_MAX_DAYS 90 #新建用户的密码最长使用天数 PASS_MIN_DAYS 0 #新建用户的密码最短使用天数 PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数 PASS_MIN_LEN 9 #最小密码长度9 风险:无可见风险 1.3禁用root之外的超级用户 检查方法: #cat /etc/passwd 查看口令文件,口令文件格式如下: login_name:password:user_ID:group_ID:comment:home_dir:command login_name:用户名 password:加密后的用户密码 user_ID:用户ID,(1 ~ 6000) 若用户ID=0,则该用户拥有超级用户的权限。查看此处是否有多个ID=0。 group_ID:用户组ID comment:用户全名或其它注释信息 home_dir:用户根目录 command:用户登录后的执行命令 备份方法: #cp -p /etc/passwd /etc/passwd_bak 加固方法: 使用命令passwd -l <用户名>锁定不必要的超级账户。 使用命令passwd -u <用户名>解锁需要恢复的超级账户。 风险:需要与管理员确认此超级用户的用途。 1.4 限制能够su为root的用户 检查方法: #cat /etc/pam.d/su,查看是否有auth required /lib/security/pam_wheel.so这样的配置条目 备份方法:#cp -p /etc/pam.d /etc/pam.d_bak 加固方法: #vi /etc/pam.d/su 在头部添加: auth required /lib/security/pam_wheel.so group=wheel 这样,只有wheel组的用户可以su到root #usermod -G10 test 将test用户加入到wheel组 风险:需要PAM包的支持;对pam文件的修改应仔细检查,一旦出现错误会导致无法登陆;和管理员确认哪些用户需要su。 当系统验证出现问题时,首先应当检查/var/log/messages或者/var/log/secure中的输出信息,根据这些信息判断用户账号的有效性。如果是因为PAM验证故障,而引起root也无法登录,只能使用single user或者rescue模式进行排错。 1.5 检查shadow中空口令帐号 检查方法: #awk -F: '( == "") { print }' /etc/shadow 备份方法:cp -p /etc/shadow /etc/shadow_bak 加固方法:对空口令账号进行锁定,或要求增加密码 风险:要确认空口令账户是否和应用关联,增加密码是否会引起应用无法连接。 二、最小化服务 2.1 停止或禁用与承载业务无关的服务 检查方法: #who –r或runlevel 查看当前init级别 #chkconfig --list 查看所有服务的状态 备份方法:记录需要关闭服务的名称 加固方法: #chkconfig --level <服务名> on|off|reset 设置服务在个init级别下开机是否启动 风险:某些应用需要特定服务,需要与管理员确认。 三、数据访问控制 3.1 设置合理的初始文件权限 检查方法: #cat /etc/profile 查看umask的值 备份方法: #cp -p /etc/profile /etc/profile_bak 加固方法: #vi /etc/profile umask=027 风险:会修改新建文件的默认权限,如果该服务器是WEB应用,则此项谨慎修改。 Linux系统Web应用安全加固教学http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F36961%2F&urlrefer=837c2ae7ba84f05ce2268358ee294dba
前端开发css基础 css样式表 前端开发css基础http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27934%2F&urlrefer=15e3596f65ae7157303dc3a3608a296b e2fsck 检查ext2/ext3文件系统的正确性 fdisk 对硬盘进行分区 fsck 检查文件系统并尝试修复错误 losetup 设置循环设备 ls 列出目录内容 mkdir 创建目录 mformat 对MS-DOS文件系统的磁盘进行格式化 mkbootdisk 建立目前系统的启动盘 mke2fs 建立ext2文件系统 mkisofs 制作iso光盘映像文件 mount/umount 加载文件系统/卸载文件系统 quota 显示磁盘已使用的空间与限制 sync 将内存缓冲区内的数据写入磁盘 tree 以树状图列出目录的内容系统操作: alias 设置指令的别名 chkconfig 检查,设置系统的各种服务 clock 调整 RTC 时间 date 显示或设置系统时间与日期 前端开发css基础http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27934%2F&urlrefer=15e3596f65ae7157303dc3a3608a296b
零基础学习python Python是什么? python学习教程http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27840%2F&urlrefer=cabc5b8fef6b4b6c86d2615d4d19b6e0 Python是一种编程语言,它的名字来源于一个喜剧。 也许最初设计Python这种语言的人并没有想到今天Python会在工业和科研上获得如此广泛的使用。 著名的自由软件作者Eric Raymond在他的文章《如何成为一名黑客》中,将Python列为黑客应当学习的四种编程语言之一,并建议人们从Python开始学习编程。这的确是一个中肯的建议,对于那些从来没有学习过编程或者并非计算机专业的编程学习者而言,Python是最好的选择之一。 易用与速度的完美结合 Python是一种用起来很方便的语言,很多初学Java的人都会被Java的CLASSPATH搞得晕头转向,花上半天的时间才搞明白原来是CLASSPATH搞错了自己的Hello World才没法运行。用Python就不会有这种问题,只要装上就能直接用。 Python是一种脚本语言,写好了就可以直接运行,省去了编译链接的麻烦,对于需要多动手实践的初学者而言,也就是少了出错的机会。而且Python还有一种交互的方式,如果是一段简单的小程序,连编辑器都可以省了,直接敲进去就能运行。 Python是一种清晰的语言,用缩进来表示程序的嵌套关系可谓是一种创举,把过去软性的编程风格升级为硬性的语法规定。再不需要在不同的风格间选择、再不需要为不同的风格争执。与Perl不同,Python中没有各种隐晦的缩写,不需要去强 python学习教程http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27840%2F&urlrefer=cabc5b8fef6b4b6c86d2615d4d19b6e0记各种奇怪的符号的含义。Python写的程序很容易懂,这是不少人的共识。 Python是一种面向对象的语言,但它的面向对象却不象C++那样强调概念,而是更注重实用。不是为了体现对概念的完整支持而把语言搞得很复杂,而是用最简单的方法让编程者能够享受到面向对象带来的好处,这正是Python能像Java、C#那样吸引众多支持者的原因之一。 Python是一种功能丰富的语言,它拥有一个强大的基本类库和数量众多的第三方扩展,使得Python程序员无需去羡慕Java的JDK。Python为程序员提供了丰富的基本功能使得人们写程序时用不着一切最底层做起。 说到这里,人们通常会用一种担心:脚本语言通常很慢。脚本语言从运行的速度讲的确会慢一些,但Python的速度却比人们想象得快很多。 虽然Python是一种脚本语言,但实际上也可以对它进行编译,就象编译Java程序一样将Python程序编译为一种特殊的ByteCode,在程序运行时,执行的是ByteCode,省去了对程序文本的分析解释,速度自然提升很多。 在用Java编程是,人们崇尚一种Pure Java的方式,除了虚拟机一切东西都用Java编写,无论是基本的数据结构还是图形界面,而Pure Java的SWING,却成为无数Java应用开发者的噩梦。 python学习教程http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27840%2F&urlrefer=cabc5b8fef6b4b6c86d2615d4d19b6e0
xml快速入门学习 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F36919%2F&urlrefer=49e7a1c75dcd3e2c6dad0ad3569a9024学习XML XML 代表Extensible Markup Language(eXtensible Markup Language的缩写,意为可扩展的标记语言)。 XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。XML是元标记语言 关于XML要理解的第一件事是,它不只是像超文本标记语言(Hypertext Markup Language,HTML)或是格式化的程序。这些语言定义了一套固定的标记,用来描述一定数目的元素。如果标记语言中没有所需的标记,用户也就没有办法了。这时只好等待标记语言的下一个版本,希望在新版本中能够包括所需的标记,但是这样一来就得依赖于软件开发商的选择了。 但是XML是一种元标记语言。用户可以定义自己需要的标记。这些标记必须根据某些通用的原理来创建,但是在标记的意义上,也具有相当的灵活性。例如,假如用户正在处理与家谱有关的事情,需要描述人的出生、死亡、埋葬地、家庭、结婚、离婚等,这就必须创建用于每项的标记。新创建的标记可在文档类型定义(Document Type Definition,在以后的篇幅中常简称为DTD)中加以描述。在本书的第二部分中将会学到有关DTD的更多的知识。现在,只需把DTD看作是一本词汇表和某类文档的句法。例如,在Peter Murray-Rust的Chemical Markup Language (化学标记语言,简写为CML)中的MOL.DTD文件中描述了词汇表和分子科学的句法:其中包括chemistry(化学)、 crystallography(结晶学)、solid state physics(固体物理)等词汇。它包括用于atoms(原子)、molecules(分子)、bonds(化学键)、spectra(光谱)等的标记。这个DTD可与分子科学领域中的许多不同的人共享。对于其他领域也有其他的DTD,用户还可以创建自己的DTD。 XML定义了一套元句法,与特定领域有关的标记语言(如MusicML、MathML和CML)都必须遵守。如果一个应用程序可以理解这一元句法,那么它也就自动地能够理解所有的由此元语言建立起来的语言。浏览器不必事先了解多种不同的标记语言使用的每个标记。事实是,浏览器在读入文档或是它的DTD时才了解了给定文档使用的标记。关于如何显示这些标记的内容的详细指令是附加在文档上的另外的样式单提供的。例如,考虑薛定格(Schrodinger)方程:科学论文中充满了这一类方程,但是科学家还必须等待多年,才能让浏览器的开发商支持书写最基本的数学公式所需的标记。音乐家也有同样的局限性,因为Netscape Navigator和Internet Explorer还都不支持乐谱。 有了XML就意味着不必等待浏览器的开发商来满足用户的需要了。用户可以创建自己需要的标记,当需要时,告诉浏览器如何显示这些标记就可以了。XML描述的是结构和语义,而不是格式化 关于XML要了解的第二件事是,XML标记描述的是文档的结构和意义。它不描述页面元素的格式化。可用样式单为文档增加格式化信息。文档本身只说明文档包括什么标记,而不是说明文档看起来是什么样的。 作为对照,HTML文档包括了格式化、结构和语义的标记。就是一种格式化标记,它使其中的内容变为粗体。是一种语义标记,意味着其中的内容特别重要。是结构标记,指明内容是表中的一个单元。事实上,某些标记可能具有所有这三种意义。标记可同时表示20磅的Helvetica字体的粗体、第一级标题和页面标题。 例如,在HTML中,一首歌可能是用定义标题、定义数据、无序的列表和列表项来描述的。但是事实上这些项目没有一件是与音乐有关的。用HTML定义的歌曲可能如下:Hot Copby Jacques Morali Henri Belolo and Victor WillisProducer: Jacques MoraliPublisher: PolyGram RecordsLength: 6:20Written: 978Artist: Village People 而在XML中,同样的数据可能标记为: Hot Cop Jacques Morali Henri Belolo Victor Willis Jacques Morali PolyGram Records 6:20 978 Village People 在这个清单中没有使用通用的标记如和,而是使用了具有意义的标记,如、、和等。这种用法具有许多优点,包括源码易于被人阅读,使人能够看出作者的含义。 XML标记还使非人类的自动机器人易于找出文档中的所有歌曲。在HTML中,机器人只能告诉我们这个元素是dt。机器人不能决定dt到底代表一首歌的题目还是定义,抑或只是一些设计者喜爱的缩进文本格式。事实上,单一文档中可以很好地包括带有三种意义的各种dt元素。 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F36919%2F&urlrefer=49e7a1c75dcd3e2c6dad0ad3569a9024学习XML
学习JQuery的知识要点 JQuery入门教学及提升http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F36917%2F&urlrefer=081c69f1f365829ad545ceecf42c0234 jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库( 或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。 jQuery 选择器允许您对 HTML 元素组或单个元素进行操作。 jQuery 选择器基于元素的 id、类、类型、属性、属性值等"查找"(或选择)HTML 元素。 它基于已经存在的CSS 选择器,除此之外,它还有一些自定义的选择器。 jQuery 中所有选择器都以美元符号开头:$()。 元素选择器 jQuery 元素选择器基于元素名选取元素。 $("p") 在页面中选取所有 <p> 元素 id 选择器 jQuery #id 选择器通过 HTML 元素的 id 属性选取指定的元素。 页面中元素的 id 应该是唯一的,所以您要在页面中选取唯一的元素需要通过 #id 选择器。 通过 id 选取元素语法如下: $("#test") class 选择器 jQuery 类选择器可以通过指定的 class 查找元素。 语法如下: $(".test") 事件处理 jQuery 事件方法语法 在 jQuery 中,大多数 DOM 事件都有一个等效的 jQuery 方法。 页面中指定一个点击事件: $("p").click(); 下一步是定义什么时间触发事件。您可以通过一个事件函数实现: $("p").click(function(){ // 动作触发后执行的代码!! }); 常用的 jQuery 事件方法 $(document).ready() $(document).ready() 方法允许我们在文档完全加载完后执行函数。该事件方法在jQuery 语法章节中已经提到过。 click() click() 方法是当按钮点击事件被触发时会调用一个函数。 该函数在用户点击 HTML 元素时执行。 在下面的实例中,当点击事件在某个 <p> 元素上触发时,隐藏当前的 <p> 元素: $("p").click(function(){ $(this).hide(); }); dblclick() 当双击元素时,会发生 dblclick 事件。 dblclick() 方法触发 dblclick 事件,或规定当发生 dblclick 事件时运行的函数: $("p").dblclick(function(){ $(this).hide(); }); mouseenter() 当鼠标指针穿过元素时,会发生 mouseenter 事件。 mouseenter() 方法触发 mouseenter 事件,或规定当发生 mouseenter 事件时运行的函数。 $("#p1").mouseenter(function(){ alert("You entered p1!"); }); mouseleave() 当鼠标指针离开元素时,会发生 mouseleave 事件。 mouseleave() 方法触发 mouseleave 事件,或规定当发生 mouseleave 事件时运行的函数: $("#p1").mouseleave(function(){ alert("Bye! You now leave p1!"); }); mousedown() 当鼠标指针移动到元素上方,并按下鼠标按键时,会发生 mousedown 事件。 mousedown() 方法触发 mousedown 事件,或规定当发生 mousedown 事件时运行的函数: $("#p1").mousedown(function(){ alert("Mouse down over p1!"); }); mouseup() 当在元素上松开鼠标按钮时,会发生 mouseup 事件。 方法触发 mouseup 事件,或规定当发生 mouseup 事件时运行的函数: $("#p1").mouseup(function(){ alert("Mouse up over p1!"); }); hover()JQuery的语法结构 JQuery的优点 JQuery的选择器 hover()方法用于模拟光标悬停事件。 当鼠标移动到元素上时,会触发指定的第一个函数(mouseenter);当鼠标移出这个元素时,会触发指定的第二个函数(mouseleave)。 $("#p1").hover(function(){ alert("You entered p1!"); }, function(){ alert("Bye! You now leave p1!"); }); focus() 当元素获得焦点时,发生focus事件。 当通过鼠标点击选中元素或通过tab键定位到元素时,该元素就会获得焦点。 focus()方法触发 focus 事件,或规定当发生focus事件时运行的函数。 $("input").focus(function(){ $(this).css("background-color","#cccccc"); }); blur() 当元素失去焦点时,发生 blur 事件。 blur() 方法触发 blur 事件,或规定当发生 blur 事件时运行的函数: $("input").blur(function(){ $(this).css("background-color","#ffffff"); });JQuery的语法结构 JQuery的优点 JQuery的选择器JQuery入门教学及提升http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F36917%2F&urlrefer=081c69f1f365829ad545ceecf42c0234
html 都没了数据操做语言教学 DML数据操作语言 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27828%2F&urlrefer=d531373006f9b688ac6eae33021e7130更多语言标签应用实例 关键字:SELECT 1、查询表中所有的记录。 mysql> select * from 表名; //*指代表中所有的列 mysql> select 列1,列2,... from 表名; //将表中所有的列都写出来和上面效果相同。 例:查询dept表中的所有数据 mysql> select * from dept; 或者 select deptno,deptname from dept; 2、查询表中的某一条记录。 mysql>select * from 表名 where 列名=字段值; 例:查询学生表(student)中名字(sname)叫'张三'的学生的学号(sno)、成绩(grade)信息。 mysql>select sno,grade from student where sname='张三';//当指定了要查询的信息,就不要用*号代替所有了。 3、过滤表中重复的数据(关键字distinct) mysql>select distinct 列名 from 表名; //返回该字段下的所有字段值,若有相同字段值,则只返回一个。 4、排序(关键字order by)。 mysql>select * from 表名 order by 列名 asc; //升序(默认),asc可省略不写。 mysql>select * from 表名 order by 列名 desc; //降序 例:按照学生表(student)中学生成绩(grade)的由高到低顺序输出学生的学号(sno)、姓名(sname)和成绩(grade). mysql>select sno,sname,grade from student order by grade desc; 5、分页查询(关键字limit)。 mysql>select * from 表名 limit (pageNo-1)*pagesize,pagesize; // pageNo-->要查询的页数,pageSize-->每页显示的记录数 例:查询dept表中第一页(每页2条数据)的记录。 mysql>select * from 表名 limit 0,2; 6、模糊查询(关键字like)。 mysql>select * from 表名 where 列名 like ' % '; //%指代任意字符 例:查询学生表(student)中姓刘的学生的信息。 mysql>select * from student where sname like '刘%'; 例:查询学生表中姓名第二个字为阳的学生信息。 mysql>select * from student where sname like '_阳%'; //_指代一个字符 7、范围查询(关键字between .. and .. , in())。 mysql>select * from 表名 where 列名 between 字段值(小) and 字段值(大);//包含两端的字段值 mysql>select * from 表名 where 列名 in (字段值1,字段值2,......); 例如:查询学生表(student)中语文成绩chinese在80~90分之间的所有学生信息(包含80和90) mysql>select * from student where chinese between 80 and 90; 例如:查询学生表(student)中数学成绩math为60分,70分,80分和90分的所有学生信息。 mysql>select * from student where math in (60,70,80,90); 8、使用别名。 mysql>select 字段名 <as> 别名,字段名 别名,... from 表名; //as可省略 例如:查询学生成绩表(sc)中学生姓名(sname)及总成绩,sname字段用姓名表示,所有科目得分总和用总分表示。 mysql>select sname as 姓名,chinese+math+english 总分 from sc; 9、分组查询(关键字group by)。 mysql>select 列名,count(列名) from 表名 group by 列名; 例如:查询每个部门的员工人数,根据部门编号(deptno)对员工进行分组,返回各部门员工人数。 mysql>select deptno,count(empno) from emp group by deptno; //empno--员工编号,emp--员工表 having:对分组后的结果进行条件限制 例如:查询每个部门员工人数大于2的所有记录,返回人数大于2人的部门编号及其部门人数。 mysql>select deptno,count(empno) from emp group by deptno having count(empno)>2; 10、表连接查询(同时涉及多个表的查询称为连接查询,用来连接两个表的条件称为连接条件)。 内连接:表1 join 表2 on 表1.列名=表2.咧名; 例:查询员工表(emp)中的员工号(empno)、员工姓名(empname)、部门号(deptno)和部门名称(deptname),部门名称字段在部门表(dept)中. mysql> select empno,empname,emp.deptno,deptname from emp join dept on emp.deptno=dept.deptno;http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27828%2F&urlrefer=d531373006f9b688ac6eae33021e7130更多语言标签应用实例 左外连接:表1 left join 表2 on 表1.列名=表2.列名; 表1作为主表,主表中的所有记录都会输出,和从表匹配不上的字段用null进行补齐。 例:以员工表(emp)为主表实现上述查询。 mysql> select empno,empname,emp.deptno,deptname from emp left join dept on emp.deptno=dept.deptno; 右外连接:表1 right join 表2 on 表1.列名=表2.列名; 表2为主表,主表中的所有记录都会输出,和从表匹配不上的字段用null进行补齐。 例:以部门表(dept)为主表实现上述查询。 mysql> select empno,empname,emp.deptno,deptname from emp right join dept on emp.deptno=dept.deptno; http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27828%2F&urlrefer=d531373006f9b688ac6eae33021e7130更多语言标签应用实例
MYsql数据库入门学习 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27828%2F&urlrefer=d531373006f9b688ac6eae33021e7130数据库常用语句标签教学 MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。现归属于Oracle(甲骨文)公司所有。 Mysql常用命令: 1、登录连接数据库。 mysql -u root -p 2、显示帮助命令清单。 mysql> \h; //(加分号和不加分号结束都不影响命令执行) 3、清除当前输入的语句(命令)。 mysql> \c 4、查询当前安装的MySQL服务器的版本号。 mysql> select version(); 5、查看MySQL服务器状态信息(包含版本号,下面两个命令执行效果相同)。 mysql> status; //(加分号和不加分号结束都不影响命令执行) mysql> \s 6、退出数据库。 mysql> \q; //(加分号和不加分号结束都不影响命令执行,会返回一个Bye) 7、数据库的导入导出。 导出数据库:mysqldump -u 用户名 -p 数据库名>数据库名.sql 导入数据库:source 数据库名.sql 8、显示所有数据库。 mysql> show databases; //(注意,最后有个s) 9、选择数据库。 mysql> use 数据库名; //会返回Database changed 10、查看当前选择的数据库中的所有的表 mysql> show tables; //(注意,最后有个s) 11、查看当前选择的数据库。 mysql> select database(); 一、DDL:数据定义语言 (Data Definition Language) 作用:定义数据库或者表结构的。 操作的对象:数据库或表的结构的。 关键字:CREATE、 ALTER、 DROP 1、创建数据库。 mysql> create database 数据库名; //如果要创建的数据库已经存在,或者没有创建它的适当权限,则此语句执行失败。 例:mysql> create database company;//创建一个公司数据库 2、删除数据库。 mysql> drop database 数据库名; 例:mysql>drop database company; //删除公司数据库 3、创建表结构。 mysql>create table 表名(列名 列的数据类型 [<列的完整性约束>],列名 列的数据类型 [<列的完整性约束>],......); 例:mysql>create table dept( //创建部门表 deptno int(11) primary key, //部门编号,int型,主键约束 deptname varchar(12) unique //部门名称,varchar类型,唯一性约束 ); 注意:创建表之前,必须先选择数据库,在选定的数据库中才能创建表。 列(column)有时候也称字段(field),同一个意思。 附:常用约束: a)主键约束:primary key --非空且唯一,一张表就定义一个主键 b)主键自增长:auto_increment c)非空:not null --不允许插入null值,可定义多个非空约束 d)唯一性:unique --不允许重复,但可以为空,可定义多个唯一约束 e)默认值:default 默认值 --指定缺省值,在没有添加值得情况下使用default后指定的默认值 f)外键:foreign key(列名) references 外键表名(外键列名); //注意:有外键时,创建表,先创建父表,再创建子表;插入数据,先插入父表,再插入子表;删除数据,先删除子表中的数据,再删除父表中的数据。 4、查看表结构。(下面三种方式实现效果相同) mysql> desc 表名; //常用 mysql> describe 表名; mysql> show columns from 表名; 5、修改表的名称。(下面两种写法都可以实现修改表名) mysql> alter table 原表名 rename to 新表名; mysql> rename table 原表名 to 新表名; 例:mysql> alter table dept rename to de; //将dept表名称改为de 6、修改表的编码字符集。 mysql>alter table 表名 character set 字符集; 例:mysql>alter table 表名 character set gbk; //修改表的编码字符集为gbk 7、向表中添加新的列。 mysql> alter table 表名 add <column> 列名 列的数据类型 [<列的完整性约束>];//column可省略 8、修改表中的某一列。 a)修改表中某一列的列名(同时可修改列的数据类型) mysql>alter table 表名 change 原列名 新列名 列数据类型; b)修改表中某一列的数据类型 mysql>alter table 表名 modify 列名 列新的数据类型; 9、删除表中的某一列。 mysql>alter table 表名 drop <column> 列名; //column可省略 10、删除表。 mysql>drop table 表名; //彻底删除表,数据库中不会保留表结构。注意与delete和truncate区别。 mysql>truncate 表名; 二、DML: 数据操作语言(Data Manipulation Language) 作用:操作表中的数据的。 关键字:INSERT、 UPDATE 、DELETE 1、向表中插入数据(每一行数据就是一条记录),以下三种插入数据的方法皆可。 mysql>insert <into> 表名 values(列值1,列值2,......); //into可以省略,插入的顺序必须和建表的顺序对应。 mysql>insert <into> 表名 (列名1,列名2,......)values(列值1,列值2,......); //建议使用 mysql>insert <into> 表名 values(列值1,列值2,......),(列值1,列值2,......),......;//一次性插入多条数据 例:向dept表中插入数据。 mysql>insert into dept(deptno,deptname)values(100,'销售部'); 2、修改某一列的所有字段值为新的字段值。 mysql>update 表名 set 列名=新字段值; mysql>update 表名 set 列名=新字段值,列名=新字段值...; //批量修改多个列的所有字段值都新字段值。 3、修改某一条记录的字段值。 mysql>update 表名 set列名=新字段值 where 列名=字段值; mysql>update 表名 set 列名=新字段值,列名=新字段值... where 列名=字段值; //批量修改多个字段的字段值都为该值。 例:将学生表(student)中学号(sno)为520的学生的年龄(sage)改为21岁。 mysql>update student set sage=21 where sno=520; 4、删除表中的某一条记录。 mysql>delete from 表名 where 列名=列值; 例:删除学生表(student)中名字(sname)为'张三'的学生的记录 mysql>delete from student where sname='张三'; //注意,由于学生名字有重复的可能,所以会把所有名字叫张三的学生信息都从student表中删除掉,所以删除单条记录的条件可以参照主键约束的列,或者唯一约束的列,或者在已确定没有重复的情况下自行确定where后面选的条件。 5、删除表。 mysql>delete from 表名; 附:drop、truncate、delete的区别? a)drop和truncate是DDL,而delete是DML。 b)truncate和delete只删除数据,不会删除表的结构,而drop会把数据和表结构都删除。 c)delete可以带where有条件的删除,可以回滚(rollback),但删除速度较truncate较慢。而truncate则不可以删除特定的数据,也不可以回滚(rollback),但删除速度比delete快。 建议:小心使用drop和truncate,尤其在数据没有备份的情况下。 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27828%2F&urlrefer=d531373006f9b688ac6eae33021e7130更多数据库常用语句标签教学
java入门基本自定义标签 java 1、编写**.tld文件 [html] <?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="java.sun./xml/ns/j2ee" xmlns:xsi="http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema-instance&urlrefer=8c31805956ebb9a7292762c26181562e" xsi:schemaLocation="java.sun./xml/ns/j2ee java.sun./xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <!-- 标签库的版本号 --> <tlib-version>1.0</tlib-version> <!-- 标签库的默认前缀 --> <short-name>candy</short-name> <!-- 标签库的默认URI --> <uri>/candy</uri> <!-- 带遮罩的网页对话框标签 --> <tag> <description>带遮罩的网页对话框标签</description> <name>msgdialog</name> <tag-class>candy.tld.MsgDialogTag</tag-class> <!-- 标签体可以是静态HTML元素,表达式语言,但不允许出现JSP脚本 --> <body-content>scriptless</body-content> <attribute> <description>对话框标题文字,默认为"温馨提示"</description> <name>title</name> <required>false</required> <!-- 可以使用JSP表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <description>遮罩的高度,默认为屏幕的高度,即100%</description> <name>height</name> <required>false</required> <!-- 可以使用JSP表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <description>对话框的顶部距离,默认为300px</description> <name>top</name> <required>false</required> <!-- 可以使用JSP表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <description>对话框的宽度,默认为500px</description> <name>boxwidth</name> <required>false</required> <!-- 可以使用JSP表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <description>基本URL</description> <name>basepath</name> <required>true</required> <!-- 可以使用JSP表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <description>临时ID后缀,避免ID冲突,默认为系统时间的毫秒数</description> <name>tmpid</name> <required>false</required> <!-- 可以使用JSP表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib> 2.编写工具类 [java] package candy.tld; import java.io.*; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.JspFragment; import javax.servlet.jsp.tagext.SimpleTagSupport; /** 带遮罩的网页对话框自定义标签类 */ public class MsgDialogTag extends SimpleTagSupport { String title = "温馨提示"; // 对话框标题文字 String height = "100%"; // 遮罩的高度,默认为屏幕的高度,即100% String top = "300px"; // 对话框的顶部距离,默认为100px String boxwidth = "330px";// 对话框的宽度,默认为500px String basepath = ""; // 基本URL String tmpid = null; // 临时ID后缀,避免ID冲突,默认为系统时间的毫秒数 /** 标签体处理 */ public void doTag() throws JspException, IOException { // 规范属性值 if (!height.endsWith("%")) height = height + "px"; if (!top.endsWith("px")) top = top + "px"; if (!boxwidth.endsWith("px")) boxwidth = boxwidth + "px"; int titlewidth = Integer.valueOf(boxwidth.replaceAll("px", "")) .intValue() - 22; if (tmpid == null) tmpid = String.valueOf(System.currentTimeMillis());// 临时ID后缀,避免ID冲突 // 取得现有标签体的内容 JspFragment body = this.getJspBody(); StringWriter writer = new StringWriter(); body.invoke(writer); // 构造带遮罩的网页对话框 StringBuffer sb = new StringBuffer(); sb.append("<style>"); sb.append("#msgbox" + tmpid + "{width:" + boxwidth + ";background: #D6D3CE; border:1px #848284 solid;padding:0px;margin:0 auto;}"); sb.append(".msgicon{float:left;background-image:url(" + basepath + "/img/msgtitle_icon.jpg); background-repeat:no-repeat; height:20px;width:20px;}"); sb.append(".msgtilte{float:left; text-align:left;background-image:url(" + basepath + "/img/msgtitle_back.jpg); background-repeat:repeat-x;line-height:20px;letter-spacing:2px; height:20px; width:" + titlewidth + "px;}"); // sb.append(".msgclose{float:left;background-image:url(" // + basepath // + "/img/btn_close.jpg); background-repeat:no-repeat; height:20px; width:20px; cursor:pointer;}"); sb.append(".msgmainbox{clear:both; border-top:1px #848284 solid;text-align:left;padding:20px;overflow: auto;}"); sb.append("</style>"); sb.append("<div id='mask" + tmpid + "' style='clear:both;top:0;left:0;position:absolute;z-index:10001;filter:alpha(opacity=70);background:#000;opacity: 0.7;-moz-opacity: 0.7;height:" + height + ";width:100%;'></div>"); sb.append("<div id='msgprompt" + tmpid + "' style='clear:both;top:" + top + ";left:0;position: absolute; z-index: 10002; width:100%;text-align:center'>"); sb.append("<div id='msgbox" + tmpid + "'>"); sb.append("<div class='msgicon'></div>"); sb.append("<div class='msgtilte'>" + title + "</div>"); // sb.append("<div class='msgclose' onClick='closemask" + tmpid // + "()'></div>"); sb.append("<div class='msgmainbox'>"); // 插入标签体中的提示信息内容 sb.append(writer.toString()。trim() + ""); sb.append("</div>"); sb.append("</div>"); sb.append("</div>"); // sb.append("<script language='javascript'>"); // sb.append("function closemask" + tmpid + "(){"); // sb.append("document.getElementById('mask" + tmpid // + "')。style.display='none';"); // sb.append("document.getElementById('msgprompt" + tmpid // + "')。style.display='none';"); // sb.append("}"); // sb.append("</script>"); sb.append("</div>"); // 输出处理结果到页面上 getJspContext()。getOut()。println(sb); } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getBasepath() { return basepath; } public void setBasepath(String basepath) { this.basepath = basepath; } public String getHeight() { return height; } public void setHeight(String height) { this.height = height; } public String getTop() { return top; } public void setTop(String top) { this.top = top; } public String getBoxwidth() { return boxwidth; } public void setBoxwidth(String boxwidth) { this.boxwidth = boxwidth; } public String getTmpid() { return tmpid; } public void setTmpid(String tmpid) { this.tmpid = tmpid; } } 3.页面导入标签 [html] <%@ taglib prefix="candy" uri="/candy" %> 4.页面调用标签 [html] <candy:msgdialog basepath="<%=request.getContextPath()%>"> 请输入登录密码解锁:<br><br> <input type="text" id="passText" > <input type="button" onclick="valSystemLock()" value="解锁" class="btn" style="margin-bottom: 8px;" /> <br> <span id="valmsg" style="color: red;"></span> </candy:msgdialog>
java入门以及基本自定义标签 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27924&urlrefer=fb6938ec8758bcefb3d8a836b99a5edc 名师 java入门课堂 1、编写**.tld文件 [html] <?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="java.sun./xml/ns/j2ee" xmlns:xsi="http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema-instance&urlrefer=8c31805956ebb9a7292762c26181562e" xsi:schemaLocation="java.sun./xml/ns/j2ee java.sun./xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <!-- 标签库的版本号 --> <tlib-version>1.0</tlib-version> <!-- 标签库的默认前缀 --> <short-name>candy</short-name> <!-- 标签库的默认URI --> <uri>/candy</uri> <!-- 带遮罩的网页对话框标签 --> <tag> <description>带遮罩的网页对话框标签</description> <name>msgdialog</name> <tag-class>candy.tld.MsgDialogTag</tag-class> <!-- 标签体可以是静态HTML元素,表达式语言,但不允许出现JSP脚本 --> <body-content>scriptless</body-content> <attribute> <description>对话框标题文字,默认为"温馨提示"</description> <name>title</name> <required>false</required> <!-- 可以使用JSP表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <description>遮罩的高度,默认为屏幕的高度,即100%</description> <name>height</name> <required>false</required> <!-- 可以使用JSP表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <description>对话框的顶部距离,默认为300px</description> <name>top</name> <required>false</required> <!-- 可以使用JSP表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <description>对话框的宽度,默认为500px</description> <name>boxwidth</name> <required>false</required> <!-- 可以使用JSP表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <description>基本URL</description> <name>basepath</name> <required>true</required> <!-- 可以使用JSP表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <description>临时ID后缀,避免ID冲突,默认为系统时间的毫秒数</description> <name>tmpid</name> <required>false</required> <!-- 可以使用JSP表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib> 2.编写工具类 [java] package candy.tld; import java.io.*; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.JspFragment; import javax.servlet.jsp.tagext.SimpleTagSupport; /** 带遮罩的网页对话框自定义标签类 */ public class MsgDialogTag extends SimpleTagSupport { String title = "温馨提示"; // 对话框标题文字 String height = "100%"; // 遮罩的高度,默认为屏幕的高度,即100% String top = "300px"; // 对话框的顶部距离,默认为100px String boxwidth = "330px";// 对话框的宽度,默认为500px String basepath = ""; // 基本URL String tmpid = null; // 临时ID后缀,避免ID冲突,默认为系统时间的毫秒数 /** 标签体处理 */ public void doTag() throws JspException, IOException { // 规范属性值 if (!height.endsWith("%")) height = height + "px"; if (!top.endsWith("px")) top = top + "px"; if (!boxwidth.endsWith("px")) boxwidth = boxwidth + "px"; int titlewidth = Integer.valueOf(boxwidth.replaceAll("px", "")) .intValue() - 22; if (tmpid == null) tmpid = String.valueOf(System.currentTimeMillis());// 临时ID后缀,避免ID冲突 // 取得现有标签体的内容 JspFragment body = this.getJspBody(); StringWriter writer = new StringWriter(); body.invoke(writer); // 构造带遮罩的网页对话框 StringBuffer sb = new StringBuffer(); sb.append("<style>"); sb.append("#msgbox" + tmpid + "{width:" + boxwidth + ";background: #D6D3CE; border:1px #848284 solid;padding:0px;margin:0 auto;}"); sb.append(".msgicon{float:left;background-image:url(" + basepath + "/img/msgtitle_icon.jpg); background-repeat:no-repeat; height:20px;width:20px;}"); sb.append(".msgtilte{float:left; text-align:left;background-image:url(" + basepath + "/img/msgtitle_back.jpg); background-repeat:repeat-x;line-height:20px;letter-spacing:2px; height:20px; width:" + titlewidth + "px;}"); // sb.append(".msgclose{float:left;background-image:url(" // + basepath // + "/img/btn_close.jpg); background-repeat:no-repeat; height:20px; width:20px; cursor:pointer;}"); sb.append(".msgmainbox{clear:both; border-top:1px #848284 solid;text-align:left;padding:20px;overflow: auto;}"); sb.append("</style>"); sb.append("<div id='mask" + tmpid + "' style='clear:both;top:0;left:0;position:absolute;z-index:10001;filter:alpha(opacity=70);background:#000;opacity: 0.7;-moz-opacity: 0.7;height:" + height + ";width:100%;'></div>"); sb.append("<div id='msgprompt" + tmpid + "' style='clear:both;top:" + top + ";left:0;position: absolute; z-index: 10002; width:100%;text-align:center'>"); sb.append("<div id='msgbox" + tmpid + "'>"); sb.append("<div class='msgicon'></div>"); sb.append("<div class='msgtilte'>" + title + "</div>"); // sb.append("<div class='msgclose' onClick='closemask" + tmpid // + "()'></div>"); sb.append("<div class='msgmainbox'>"); // 插入标签体中的提示信息内容 sb.append(writer.toString()。trim() + ""); sb.append("</div>"); sb.append("</div>"); sb.append("</div>"); // sb.append("<script language='javascript'>"); // sb.append("function closemask" + tmpid + "(){"); // sb.append("document.getElementById('mask" + tmpid // + "')。style.display='none';"); // sb.append("document.getElementById('msgprompt" + tmpid // + "')。style.display='none';"); // sb.append("}"); // sb.append("</script>"); sb.append("</div>"); // 输出处理结果到页面上 getJspContext()。getOut()。println(sb); } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getBasepath() { return basepath; } public void setBasepath(String basepath) { this.basepath = basepath; } public String getHeight() { return height; } public void setHeight(String height) { this.height = height; } public String getTop() { return top; } public void setTop(String top) { this.top = top; } public String getBoxwidth() { return boxwidth; } public void setBoxwidth(String boxwidth) { this.boxwidth = boxwidth; } public String getTmpid() { return tmpid; } public void setTmpid(String tmpid) { this.tmpid = tmpid; } } 3.页面导入标签 [html] <%@ taglib prefix="candy" uri="/candy" %> 4.页面调用标签 [html] <candy:msgdialog basepath="<%=request.getContextPath()%>"> 请输入登录密码解锁:<br><br> <input type="text" id="passText" > <input type="button" onclick="valSystemLock()" value="解锁" class="btn" style="margin-bottom: 8px;" /> <br> <span id="valmsg" style="color: red;"></span> </candy:msgdialog> /http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F27924%2F&urlrefer=50c707072432659f6834bd317afba595 名师 java入门课堂
c++的学习及扩展 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F43867%2F&urlrefer=ab5ee78ec7e5f1b83c30f8664c622368 c++的学习教程 C++在C的过程性编程的基础上增加了面向对象的编程(OOP)和泛型编程。其中泛型编程是之前学习中没有听说过的一个词,主要指的是利用模板特性进行的编程。 OOP:编程语言要处理的两个部分是算法和数据,OOP强调的是数据,C++中的类就是一种规范,用来描述对象的数据格式,而对象就是在类的规范下构造的数据结构。其中重要的概念有:重用代码、访问控制、多态、继承等。 泛型编码:泛型编程就是以独立于任何特定类型的方式编写代码,也就是可以理解为独立于特定类型的编程。恕我见识短浅,这是我第一次听到这个词,在之前所学的书中是没有提到的。其目标与OOP编程相同,使重用代码和通用概念的技术更简单。C++的数据有多种类型——整数、浮点数、字符、字符串、用户定义的、由多种类型组成的符合结构。例如,要对不同类型的数据进行排序,通常必须要为每种类型创建一个排序函数。而泛型编程就是针对这一问题,对语言进行扩展,只编写一个泛型函数就可完成对不同类型的数据的处理。C++模板提供了完成这种任务的机制。 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fclick.aliyun.com%2Fm%2F43867%2F&urlrefer=ab5ee78ec7e5f1b83c30f8664c622368 c++的学习教程
1
下一页