「java自毁」java自毁代码
本篇文章给大家谈谈java自毁,以及java自毁代码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、SIM卡是什么东东?
- 2、为什么飞船上总有自毁系统
- 3、自定义标签和jsp页面怎么实现
- 4、作为一名java程序员 目前的现状该怎么办?
- 5、如何用JAVA做自毁系统
- 6、软件测试工程师发展规划路线
SIM卡是什么东东?
SIM卡介绍
一、概述
移动电话机与SIM卡共同构成移动通信终端设备。无论是GSM系统还是CDMA系统,数字移动电话机用户在“入网”时会得到一张SIM卡(SubscriberIdentityModule)或UIM卡(UserIdentity Module)。SIM卡是一张符合GSM规范的“智慧卡”,可以插入任何一部符合GSM规范的移动电话中,实现“电话号码随卡不随机的功能”,而且通话费用自动计入持卡用户的账单上,与手机无关。
二、SIM卡硬件特性
1、外部特征
在实际使用中有两种功能相同而形式不同的SIM卡:
卡片式(俗称大卡)SIM卡,这种形式的SIM卡符合有关IC卡的ISO7816标准,类似IC卡。
嵌入式(俗称小卡)SIM卡,其大小只有25mm×15mm,是半永久性地装入到移动台设备中的卡。
“大卡”上真正起作用的是它上面的那张“小卡”,而“小卡”上起作用的部分则是卡面上的铜制接口及其内部胶封的卡内逻辑电路。目前国内流行样式是“小卡”,小卡也可以换成“大卡”(需加装一卡托)。“大卡”和“小卡”分别适用于不同类型的GSM移动电话,早期机型如摩托罗拉GC87C、308C等手机用的是“大卡”,而目前新出的机型基本上都使用“小卡”。
2、 SIM卡接口
SIM卡是通过卡面上铜制接口来连接卡内逻辑电路与移动终端的,SIM卡芯片有八个触点,通常与移动设备连接需要六个触点,具体接口定义如下图所示:
3、内部结构
SIM卡是一个装有微处理器的芯片卡,它的内部有5个模块,并且每个模块都对应一个功能:微处理器CPU(8位)、程序存储器ROM(3-- 8kbit)、工作存储器RAM(6--16kbit)数据存储器EEPROM(128--256kbit)和串行通信单元。这5个模块被胶封在SIM卡铜制接口后与普通IC卡封装方式相同。这五个模块必须集成在一块集成电路中,否则其安全性会受到威胁。因为,芯片间的连线可能成为非法存取和盗用SIM卡的重要线索。
SIM卡同手机连接时至少需要5条连接线(通常编程口未定义)
数据I/O口(Data)
复位(RST)
接地端(GND)
电源(Vcc)
时钟(CLK)如上图所示。
SIM卡的供电分为5V(1998年前发行)、5V与3V兼容、3V、1.8V等,当然这些卡必须与相应的移动电话机配合使用,即移动电话机产生的 SIM卡供电电压与该SIM卡所需的电压相匹配。卡电路中的电源VCC、地GND是卡电路工作的必要条件。卡电源用万用表就可以检测到。SIM卡插入移动电话机后,电源端口提供电源给SIM卡内各模块。
检测SIM卡存在与否的信号只在开机瞬时产生,当开机检测不到SIM卡存在时,将提示“InsertCard(插入卡)”;如果检测SIM卡已存在,但机卡之间的通信不能实现,会显示“CheckCard(检查卡)”;当SIM卡对开机检测信号没有响应时,移动电话也会提示“InsertCard(插入卡)”;当SIM卡在开机使用过程中掉电、由于松动接触不良或使用报废卡时,移动电话会提示“Bad Card/SIM Error”。
对于卡电路中的SIM¬_I/O、SIM_CLK、 SIM_RST,全部是由CPU的控制来实现的。虽然基站与网络之间的数据沟通随时随地进行着,但确定哪个时刻数据沟通往往很难。有一点可以肯定,当移动电话机开机时刻与网络进行鉴权时必有数据沟通,这时尽管时间很短,但测量一定有数据,所以我们在判定卡电路故障时,在这个时隙上进行监测为最佳监测时间。正常开机的移动电话机,在SIM卡座上用示波器可以测量到SIM_I/O、SIM_CLK、SIM_RST信号,它们一般是一个3V左右的脉冲。若检测不到,说明SIM卡座供电开关管周边电阻、电容元件脱焊、SIM卡卡座脱焊,也有可能是卡座接触不良,SIM卡表面氧化或是报废卡。
当手机开机时,手机需要与SIM卡进行数据交换,用示波器可以在SIM卡卡座上检测到一些数据信号,没插卡时,这些信号不会送出。可谓“瞬间即逝”,但可以用示波器捕捉到,以此判别SIM卡电路有无故障。SIM卡触点电性能表示触点低电平高电平Vcc-U=+5V±10%,I=10mA RST -0.3≤U≤+0.6V,I=200uA 4V≤U≤Vcc,I=20uA CLK -0.3≤U≤+0.6V,I=200uA -2.4V≤U≤Vcc,I=200uA GND - - Vpp - +5V±10% I/O输入 0V≤U≤0.4V,I=1mA 0.7V≤U≤Vcc,I=20uA I/O输出 0V≤U≤0.8V,I=1mA 3.8V≤U≤Vcc,I=20uA
电源开关时,SIM卡电气性能为:当开启电源期间,按以下次序激活各触点:RST低电平状态;Vcc加电;I/O口处于接收状态;Vpp加电;提供稳定的时钟信号。当关闭电源时,按如下次序工作:RST低电平状态;CLK低电平状态;Vpp去电;I/O口低电平状态;Vcc去电。
SIM 卡的存储容量有3kB、8kB、16kB、32kB、64kB等。目前多为16KB和32KB,STK卡(SIM application Tool Kit)是SIM卡的一种,它能为移动电话机提供增值服务,如移动梦网业务等。(将在后章节具体介绍)SIM卡能够储存多少电话号码取决于卡内数据存储器 EEPROM的容量(有2K、3K、8K容量),若有8KB的存储容量,可供储存以下信息:
*100组电话号码及其对应的性名文字;
*15组短信息(ShortMessage);
*25组以上最近拨出的号码;
*4位SIM卡密码(PIN)。
几种主要的SIM卡的结构数据
三、SIM卡软件特性
SIM卡采用新的单片机及存储器管理结构,因此处理功能大大增强。其智能特性的逻辑结构是树型结构。全部特性参数信息都是用数据字段方式表达,SIM卡中存有三类数据信息:
(1)与持卡者相关的信息以及SIM卡将来准备提供的所有业务信息,这种类型的数据存储在根目录下。
(2)GSM应用中特有的信息,这种类型的数据存储在GSM目录下。
(3)GSM应用所使用的信息,此信息可与其它电信应用或业务共享,位于电信目录下。
即在根目录下有三个应用目录,一个属于行政主管部门应用目录,两个属于技术管理的应用目录,分别是GSM应用目录和电信应用目录。所有的目录下均为数据字段,有二进制的和格式化的数据字段。数据字段中的信息有的是永存性的即不能更新的,有的是暂存的,需要更新的。每个数据字段都要表达出它的用途、更新程度、数据字段的特性(如识别符)、类型是二进制的还是格式化的等。
下面按GSM的Phasel(阶段1)和Phase2(阶段2)两种情况对SIM卡的数据格式进行说明:
(1) Phasel
1 GSM系统参数
在阶段l时,所选GSM系统参数数据项目如图所示。其中6F38业务表中选有五项开放业务:
GSM阶段1系统参数数据所选项
标识符 名称 长度
6FAD 管理(Administrative) 3
6F38 业务表(Service Table) 4
6F07 IMSI 9
6F7B 禁止PLMN(Forbidden PLMN) 12
6F7E TMSI LAI 11
6F20 Kc, n 9
6F30 PLMN选择(PLMN Selector) 24
6F74 BCCH信息(BCCH Information) 16
6F78 接入控制(Access Control) 2
业务1(Servicel):PIN码取消(PINDisabling)
业务2(Service 2):缩位拨号(Abbreviated Dialing Numbers)
业务4(Service 4):短消息存储(Short Message Storage)
业务6(Service 6):容量配置参数(Capability Configuration Parameters)
业务7(Service 7):PLMN选择(PLMN Selector)
业务3、业务5和业务8在Phase 1中不开放,6F78接入控制采用低级等级。
2 电信业务参数
GSM阶段1电信业务所选项
标识符 名称 长度
6F3A 缩位拨号(Abbreviated Dialing Numbers) 50 × 22
6F3D 容量配置参数(Capability Config Parameters) 1 × 14
6F3C 短消息存储(Short Message Storage) 5 ×176
6F39 话费计数(Charging Counter) 2
(2) Phase 2
1 GSM系统参数
在阶段2时,GSM系统参数数据所选项目如图所示。其中6F38业务表在Phasel的基础上增加的业务有:
GSM阶段2系统参数数据所选项
标识符 名称 长度
6F05 语种选择(Language Preference) 4
6F07 IMSI 9
6F20 Kc, n 9
6F30 PLMN选择(PLMN Selector) 42
6F31 HPLMN搜索(HPLMN Search) 1
6F38 业务表(Service Table) 4
6F45 小区广播消息标识(Cell Broad Message ID) 8
6F74 BCCH消息(BCCH Information) 16
6F78 接入控制(Access Control) 2
6F7B 禁止PLMN(Forbidden PLMN) 12
6F7E TMSI LAI 11
6FAD 管理数据(Admin Data) 3
6FAE Phase 识别(Phase Identify) 2
业务9 (Service 9):MSISDN
业务10 (Service l0):扩展1文件(Extension l file)
业务12 (service l2):短消息参数(short Message Parameters)
业务13 (Service l3):最后拨号存储(Last Number Dialed)
业务14 (service l4):小区广播消息识别(cell Broadcasting Message Identifier fi1e)
业务3、业务5、业务8和业务11在Phase2中不开放,6F78接入控制采用低级等级。
2 电信业务参数
GSM阶段2电信业务所选项
标识符 名称
6F3A 缩位拨号(Abbreviated Dialing)
6F3C 短消息存储(Short Message Storage)
6F3D 容量配置参数(Capability Config)
6D40 MSISDN
6F42 短消息存储参数(SMS Parameters)
6F43 短消息存储状态(SMS Status)
6F44 最后拨号存储(Last Number Dialed)
6F4A 扩展1文件(Extension 1 file)
四、SIM卡应用
1、SIM卡编号
SIM卡背面的20位数字所代表的含义如下:
前6位(898600):中国的代号;
第7位:业务接入号,对应于135、136、137、138、139中的5、6、7、8、9;
第8位:SIM卡的功能位:暂定为0;
第9、10位:各省的编码;
第11、12位:年号;
第13位:供应商代码;
第14—19位:用户识别码;
第20位:校验位。
2、 SIM卡密码
(1)、PIN码
PIN码(PersonalIdentityNumber):个人识别码,也叫PIN1码,长4位,由用户自己设定(初始值为1234或0000),属于SIM卡的密码,用来保护SIM卡的安全,防止SIM卡未经授权而被使用。初始状态是不激活的。启动该功能后,每次用户重新开机,GSM系统就要和手机之间进行自动鉴权,判断SIM卡的合法性,只有在系统认可后,才为该用户提供服务。
用户在启动PIN码保护功能后不慎将PIN码忘记,在错误的输入三次PIN码后SIM自动上锁,手机无法接入网络,提示要求输入PUK码。此时若您不知道PUK码,那么请不要再尝试输入PIN码了,请携带有关凭证和手机到当地运营商的营业厅去解开,也可拨打服务电话获得。若您输入10次错误的PIN 码,那么SIM卡的自毁程序将自动启动,将SIM烧毁,使用户得不偿失。
(2)、PIN2码
PIN2码:PIN2码也是SIM卡的密码,它跟网络计费和SIM卡内部资料的修改有关。手机上的“计费”功能需要PIN2码支持。GSM协议支持手机随时查询已通话的支出,目前国内运营商在部分地区开通此项业务,用户可以得到自己的PIN2码。
(3)、PUK码
PUK码(PINUnblockingKey):PUK码是解PIN码的万能锁,每张SIM卡有各自对应的PUK码,长8位,可以交由用户自己管理,也可以由网络运营商控制。目前国内运营商基本都已开通查询PUK码的业务,用户可以自己管理PUK码。
(4)、PUK2码
PUK2码(PIN2 Unblocking key):PUK码是解PIN2码的万能锁,每张SIM卡有各自对应的PUK2码,长8位,可以交由用户自己管理,也可以由网络运营商控制。目前国内部分地区的运营商开通了PUK2码的业务,用户可以自己管理PUK2码。
3、SIM卡使用
SIM卡在日常使用中一是请勿将卡弯曲,卡上的金属芯片更应小心保护,保持金属芯片清洁(可用酒精棉球轻擦),避免沾染尘埃及化学物品;二是为保护金属芯片,请避免经常将 SIM卡从手机中抽出;请勿将SIM卡置于超过85度或低于-35度的环境中;在取出或放入SIM卡前,请先关闭手机电源;三是最好不要用手去触摸那些触点,以防止静电损坏。
SIM卡的使用是有一定年限的。一般来说,它的物理寿命是取决于客户的插拔次数,约在1万次左右;而集成电路芯片的寿命取决于数据存储器的写入次数,不同厂家其指标有所不同,就Motorola生产的SIM卡经试验室试验约为5万次。SIM卡的平均寿命约为4年。
4、SIM卡知识进阶
(1)、SIM卡内保存的数据可以归纳为以下四种类型:
1由SIM卡生产厂商存入的系统原始数据。
2由GSM网络运营部门或者其他经营部门在将卡发放给用户时注入的网络参数和用户数据。包括:
*鉴权和加密信息Ki(Kc算法输入参数之一密匙号);
*国际移动用户识别码(IMSI);
*A3:IMSI认证算法;
*A5:加密密匙生成算法;
*A8:密匙(Kc)生成前,用户密匙(Kc)生成算法;(这三种算法均为128位)
3用户自己存入的数据。如短消息、固定拨号、缩位拨号、性能参数、话费记数等。
4用户在用卡过程中自动存入和更新的网络接续和用户信息类数据。包括最近一次位置登记时的手机所在位置区识别号(LAI),设置的周期性位置更新间隔时间,临时移动用户号(TMSI)等。
这些数据都存放在各自的目录项内,第一类数据放在根目录,当电源开启后首先进入根目录,再根据指令进入相关的子目录,每种目录极其内部的数据域均有各自的识别码保护,只有经过核对判别以后才能对数据域中的数据进行查询,读出和更新。上面第一类数据通常属永久性的数据,由SIM卡生产厂商注入以后无法更改,第二类数据只有网络运行部门的专门机构才允许查阅和更新,再第三、四类数据中的大部分允许用户利用任何手机对其进行读/写操作。
(2)、在下一章节中需要用到国际移动设备识别码IMEI和国际移动用户识别码IMSI,这里先做一简单介绍。
国际移动设备识别码IMEI(InternationalMobileEquipment Identification Number)是区别移动台设备的标志,储存在移动设备中,可用于监控被窃或无效的移动设备。IMEI组成如图所示,移动终端通过键入*#06#可以查得。其总长为15位,每位数字仅使用0—9的数字。
TAC:型号装配码,由欧洲型号标准中心分配。
FAC:装配厂家号码。
SNR:产品序号,用于区别同一个TAC和FAC中的每台移动设备。
SP:备用。
国际移动用户识别码IMSI(InternationalMobileSubscriberIdentification Number)是区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。IMSI组成如图所示,其总长度不超过15位,每位数字仅使用0 —9的数字。
MCC:移动用户所属国家代号,占3位数字,中国的MCC规定为460。
MNC:移动网号码,最多由两位数字组成。用于识别移动用户所归属的移动通信网。
MSIN:移动用户识别码,用以识别某一移动通信网中的移动用户。
四、安全缺陷分析
1、安全分析
(1)、SIM卡
SIM卡中最敏感的数据是保密算法A3、A8算法、密钥Ki、PIN、PUK和Kc。A3、A8算法是在生产SIM卡的同时写入的,一般人无法读取 A3、A8算法;HN码可由客户在手机上自行设定;PUK码由运营者持有;Kc是在加密过程中由Ki导出;Ki需要根据客户的IMSI和写卡时用的母钥 (Kki),由运营部门提供的一种高级算法DES,即Ki=DES(IMSI,Kki),经写卡机产生并写入SIM卡中,同时要将IMSI、Ki这一对数据送入GSM网路单元AUC鉴权中心。
如何保证Ki在传送过程中安全保密是一件非常重要的事情。Ki在写卡时生成,同时加密,然后进入HLR/AUC后再解密,那么连写卡和HLR/AUC的操作人员也不知道Ki的真实数据。
一般流行的做法是用一高级方程DES对Ki进行加密,DES方程需要一把密钥Kdes,加密和解密都用同一把密钥。由运营部门提供DES方程给HLR/AUC设备供应商,运营部门制定严格的保密制度,管理好密钥Kdes就能保证Ki传递的安全性,此过程如图所示。
SIM卡写卡流程
由此可见,SIM卡自身的加密措施是十分完备的。
(2)、空中接口
GSM系统为了保证通信安全,尤其是空中接口不受侵犯,采取了特别的鉴权与加密措施,来确保移动台的合法性以及防止第三者对通话进行窃听。所使用的加解密算法以及安全措施从理论上来说是不可逆的。这里主要介绍SIM卡,对GSM系统对于空中接口的控制与管理就不详细叙述了。
2、 SIM卡整体复制
目前出现了许多MAGICSIM、SUPERSIM等手机智能卡,配合专用的SIM卡读写卡起便可实现在1张空白的卡上同时“烧”进不同地区的16个手机卡号,可供用户使用手机STK功能*随时切换使用其中任何一个号码使用,也可将一个号码“烧”进多张手机SIM卡。设备如图所示
上图是这类SIM卡内部简单电路,是使用单片机PIC16F84和一片扩展存储器24LC16(2K)构成的。
下面,从理论层来进行分析:
下图为GSM系统设备识别程序,通过IMEI对用户设备的合法性进行验证。
在EIR中只用三种设备清单:
白名单:合法的移动设备号;
灰名单:是否允许使用由运营商决定;
黑名单:禁止使用的移动设备号;
目前,移动运营商在用户入网时并没有对移动电话机的国际移动设备识别码(IMEI码)实行验证,其次,GSM系统为了防止非法监听进而盗用IMSI,在无线链路上需要传送IMSI时,均使用临时移动用户识别码TMSI来代替IMSI。仅在位置更新失败或MS得不到TMSI时才使用IMSI。因此,这就对 SIM卡整体复制以及SIM卡的非法盗用提供了先决条件。同时,也使得GSM系统对移动台的鉴权形同虚设。
实验证明:使用两部手机,一部使用原SIM卡,另一部使用superSIM16复制卡,在一部机拔出的时候,另一部无法工作;一部机在发短息的时候,另一部无法同时发信息;两机同时待机,短信息和电话一般会到后开机的那一部手机上;如果关闭掉其中一部手机,有可能会出现暂时收不到短信息(信息延时)的情况,或者网络出现机主关机的情况;如两机均设置了自动选网,同号待机时等同于轮流待机(感觉为随机)。
*STK
STK(SIMTOOLKIT),简称“用户识别应用发展工具”,可以理解为一组开发增值业务的命令,一种小型编程语言,它允许基于智能卡的用户身份识别模块SIM运行自己的应用件。
STK卡不是一般的通常使用的SIM卡,而是基于Java语言平台的Simera32K卡片。STK是一种小型编程语言的软件,可以固化在SIM卡中。它能够接收和发送GSM的短消息数据,起到SIM卡与短消息之间的接口的作用,同时它还允许SIM卡运行自己的应用软件。这些功能经常被用于在可通过软件激活的电话显示屏上,用友好的文本菜单代替机械的“拨号-收听-应答”方式,从而允许用户通过按键轻松进行复杂的信息检索操作或交易。
“移动梦网卡”就是是在普通STK功能上联合ICP应用服务的多功能STK应用SIM卡。该产品将ICP短信应用服务以菜单的形式移植到STK卡中,增强了手机的通信能力,使手机不仅仅是一个孤立的通信工具,而且成为了一种综合的信息终端,让用户可以在手机上方便地使用移动互联网业务。目前,“移动梦网卡”提供的功能有传情服务、IP电话、股票助理、新闻信息、定位服务、娱乐休闲、实用工具、生活服务、全球通话费查询等,并根据需要不断在开发新的服务项目。
3、SIM卡模拟器
由于SIM卡内部属于单片机范畴,早在1998年,国外就出现了使用 TurboPascal编写的SIM卡模拟程序以及相应的外部接口电路。它跳过了SIM卡,将手机与计算机结合到了一起。通过外部电路将手机与计算机RS -232接口相连,在计算机上运行SIM卡模拟程序,模拟SIM卡处理的全过程。
SIM卡模拟器不同于SIM卡整体复制,它将卡内数据读出,并以数据格式保存在计算机上。运行模拟程序时,这些以数据格式保存的卡内数据就相当与一张张实实在在的SIM卡。所不同的是,对照SIM卡内部的数据格式说明,能实现对SIM卡内部数据的修改和SIM卡复制等功能。这样一来,就使得SIM卡的安全性完全丧失,并对GSM系统的安全性造成一定的威胁。
五、总结
虽然SIM卡同样存在安全隐患,但比起早期模拟通信系统来说已经有了长足的发展。SIM卡技术的引入,使得GSM系统在安全方面得到了极大改进。并使得无线电通信从不保密的禁区中解放出来。
参考:1、《移动通信》西安电子科技大学出版社
2、部分资料来源与互联网
为什么飞船上总有自毁系统
一没有任何可信的证据指出是被击落的,没有证据证明作为宣传摆出来的东西是实物,没有证据证明坠毁的时候是外观完好的。二自毁系统什么那都是看电影看多了的YY的。
伊朗方面有必要收集任何可能的政治筹码,和政治宣传材料。尤其是现在被联合国新一轮的制裁。那么高调的来回炒这点事目的无非是这个,实际能得到什么技术是次要的。
说到底F-14完好无损的实物都入手有30多年了,也没看伊朗能逆向仿制一架,连武器集成都办不到。
自定义标签和jsp页面怎么实现
jsp自定义标签用法,供大家参考,具体如下:
什么是标记
使用HTML语言我们可以这样去编辑我们的网页:
HTML
HEAD
TITLE
HELLO WORLD
/TITLE
/HEAD
BODY
HELLO WORLD
/BODY
/HTML
在这里我们把/HEAD,TITLE,BODY称为标记。HTML 标记( HTML Markup)是HTML文档的控制语言,用于指定浏览器显示和打印文档的方式.它是用小于号""和大于号""括起来的短语和符号,如 Html、/Body等。许多HTMl标记以成对的方式出现,如TITLE /TITLE、Body/Body 等。在JSP中我们也可以定制自己的标记,以供JSP页面使用,如下例所示:
!—login.jsp--
%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %
html
head
titlelogin/title
/head
body
tagclass:login width="200" height= "100"
/tagclass:login
/body
/html
在上例中/tagclass:login就是一个JSP定制标记符。widtht、height是这个标记的属性。%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %是一个标记库定义指令,在稍后我们将会讨论。在JSP中定制标记符,实质上就是以标记的形式封装了一个俱有独立功能的Java类。标记的使用减少了直接嵌入JSP页面的Java代码,方便了页面的布局,并且有利于代码的复用,提高了开发的效率。
JSP服务器解析标记的过程
那么当一个标记被嵌入JSP页面后,JSP服务器是如何对这个标记进行解析的呢?各对象的含义如下所示:
Client: 表示客户端。
JSP-Server:JSP服务器。
JSP-Page:JSP页面。
TLD: 标记库描述文件,定义标记和标记的各种属性和处理文件等。
TagClass 标记处理程序
当一个用户访问一个JSP页面时,这个请求被发送到JSP服务器,JSP服务器会根据这个请求去调用相应的页面,如果这个页面中有自定义的标记, JSP服务就会根据页面指令%@ taglib去访问TLD得到处理程序的相关信息,接着调用该处理程序的构造器方法,启动标记符处理程序,并读取标记符的属性和相应值。对每个没有设置属性的,调用相应的set方法。当标记符第一次使用时,它的任何属性都不会做过设置,因此对每个属性都调用set方法。属性设置完以后,JSP服务器调用处理程序的doStartTag(),然后再调用doEndTag()方法。最后JSP服务器会继续处理剩下的页面,在页面结尾调用release ()方法,清理占用的所有资源。
TLD文件
TLD(TLD:Tag Library Descriptor标记库描述符)文件,标准的XML格式的标记定义文件,被用来存放标记符的信息,下面就是一个典型的TLD文件。
?xml version="1.0" encoding="ISO-8859-1" ?
!—XML的版本及其字符集--
!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
" "
!—文档类型定义--
taglib
!—此标记说明我们开始描述一个标记库--
tlibversion1.0/tlibversion
!—标记库的版本--
jspversion1.1/jspversion
!—所使用的JSP的版本--
shortnametagclass/shortname
!—缺省的名称--
tag
namelogin/name
!—标记的名称--
tagclass
tagclass.login.login
!—处理这个Tag的相应的类的名称--
/tagclass
info
!—对本标记符的描述--
/info
attribute
!—开始定义标记的属性--
nameheight/name
!—属性的名称--
requiredtrue/required
!—表示这个属性是不是必须的--
rtexprvaluetrue/rtexprvalue
!—表示这个属性是否可以用JSP的程序段的结果输出--
/attribute
attribute
namewidth/name
requiredtrue/required
rtexprvaluetrue/rtexprvalue
/attribute
/tag
/taglib
在这个TLD文件中定义了只有一个标记符的标记符库,这个名为login的标记符会调用一个Applet以验证用户的合法性。处理这个标记的类就是 tagclass.login.login。width、height是这个标记的两个属性。属性是在使用标记符时作为参数发送的值。我们可以在上面的示例中增加几个标记,也可以为每个标记添加几个属性。我们开发标记符库时不一定非要从头开始,自己编写一个全新TLD。我们可以使用某个集成的开发的环境,也可以修改上面的例子。
TagLib指令
那么当JSP服务器在解析一个标记符时,它是如何定义一个标记库的呢?这就是TagLib指令的主要责任。
Taglib 指令
定义一个标记库以及其自定义标记的前缀.
JSP 语法
复制代码 代码如下:
%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %
例子
%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %
html
head
titlelogin/title
/head
body
tagclass:login width="200" height= "100"
/tagclass:login
/body
/html
描述
% @ taglib %指令声明此JSP文件使用了自定义的标记,同时引用标记库,
也指定了他们的标记的前缀。 你必须在使用自定义标记之前使用% @ taglib %指令。
属性
uri="URIToTagLibrary" :Uniform Resource Identifier (URI)根据标记的前缀对自定义的标记进行唯一的命名,URI可以是一个相对或绝对的路径。
prefix="tagPrefix":在自定义标记之前的前缀。如上例中的/tagclass:login
标记符的处理程序(Tag handle)
我们还是以一个例子来看下如何实现一个Tag handle。首先是看一下它的类图:
让我们再看一下它的代码:
package tagclass.login;
import javax.servlet.jsp.tagext.TagSupport;
import javax.servlet.jsp.*;
import java.io.*;
public class login extends TagSupport
{
public login()
{
super();
}
public int doStartTag() throws JspTagException
{
JspWriter out = pageContext.getOut();
try
{
out.println("APPLET CODEBASE=applet/login/ CODE=login.class width=200 height=100 /APPLET");
}
catch(Exception e)
{
}
return SKIP_BODY;
}
publicc int doEndTag()throws JsptagException
{
return EVAL_PAGE;
}
public void release()
{
super.release();
}
public void setWidth(String language)
{
this.width = width;
}
public String getWidth()
{
return this.width;
}
public void setHeight(String height)
{
this.height=height;
}
public String getHeight()
{
return this.height;
}
private String width;
private String height;
}
从以上我们可以看出,实现一个简单的标记符处理程序有几个要求:①增加一个类,使之继承 java.Servlet.jsp.tagext.TagSupport类。这个类提供了java.Servlet.jsp.tagext.Tag接口所要求的所有的方法。另外,还需要使用一些基本的API,使JSP容器能够调用我们自己提供的标记符处理程序。②必须为每个标记符属性分别创建一个 getattribute和setattribute方法,JSP容器需要使用这些方法处理程序传递参数。③要为标记符处理程序创建一个构造器和自毁器。JSP需要使用构造器启动处理程序。自毁器是在realease()方法中定义的。在处理程序的生命周期结束时,需要调用自毁器释放所占用的资源。④创建两个名为doStartTag()和doEndTag()的方法,执行具体的处理和输出动作。这两个方法是在处理自定义标记符的起始位置和结束位置调用的。它们的返回值是在Tag Interface里定义的静态int,这几个静态值分别是:
SKIP_BODY隐含0 :跳过了开始和结束标签之间的代码。
EVAL_BODY_INCLUDE隐含1:将body的内容输出到存在的输出流中
SKIP_PAGE隐含5 : 忽略剩下的页面。
EVAL_PAGE隐含6:继续执行下面的页
当然标记符也有它自己的缺点。很不方便的封装过程,有限的功能。对于一些不太复杂和功能单一的逻辑描述,需要传递的参数要求不高时,使用JSP标记,要方便的多。对于大多数的商业逻辑应用,还是使用bean要好的多,也宜于servlet控制。
附:文章中所用示例的完整代码
JSP代码:login.jsp
%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %
html
head
title/title
/head
body
tagclass:login width="200" height= "100"
/tagclass:login
/body
/html
标记符描述库:taglib.tld
?xml version="1.0" encoding="ISO-8859-1" ?
!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
" "
taglib
tlibversion1.0/tlibversion
jspversion1.1/jspversion
shortnametagclass/shortname
tag
namelogin/name
tagclass
tagclass.login.login
/tagclass
info
/info
attribute
nameheight/name
requiredtrue/required
rtexprvaluetrue/rtexprvalue
/attribute
attribute
namewidth/name
requiredtrue/required
rtexprvaluetrue/rtexprvalue
/attribute
/tag
/taglib
标记符处理程序:login.java
package tagclass.login;
import javax.servlet.jsp.tagext.TagSupport;
import javax.servlet.jsp.*;
import java.io.*;
public class login extends TagSupport
{
public login()
{
super();
}
public int doStartTag() throws JspTagException
{
JspWriter out = pageContext.getOut();
try
{
out.println("APPLET CODEBASE=applet/login/ CODE=login.class width=200 height=100 /APPLET");
}
catch(Exception e)
{
}
return SKIP_BODY;
}
publicc int doEndTag()throws JsptagException
{
return EVAL_PAGE;
}
public void release()
{
super.release();
}
public void setWidth(String language)
{
this.width = width;
}
public String getWidth()
{
return this.width;
}
public void setHeight(String height)
{
this.height=height;
}
public String getHeight()
{
return this.height;
}
private String width;
private String height;
}
标记符处理程序中所使用的Applet : login.java
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class login extends Applet implements ActionListener
{
private String s_username;
private String s_userpassword;
private Button b_ok;
private Button b_register;
private Label l_username;
private Label l_userpassword;
private TextField t_username;
private TextField t_userpassword;
private GridLayout g_gridlayout;
public void init()
{
b_ok=new Button("ok");
b_register=new Button("register");
l_username= new Label("name");
l_userpassword=new Label("password");
t_username=new TextField();
t_userpassword=new TextField();
b_ok.addActionListener(this);
b_register.addActionListener(this);
g_gridlayout=new GridLayout(3,2,10,10);
this.setLayout(g_gridlayout);
//this.setBackground(Color.blue);
add(l_username);
add(t_username);
add(l_userpassword);
add(t_userpassword);
add(b_ok);
add(b_register);
}
public void actionPerformed(ActionEvent ev)
{
String s_label=ev.getActionCommand();
if (s_label.equals("ok"))
{
t_username.setText("name");
}
if (s_label.equals("register"))
{
t_userpassword.setText("password");
}
}
public void paint(Graphics g)
{
}
}
作为一名java程序员 目前的现状该怎么办?
对于您的现状我想说三点
第一:环境
每个人生下来都是一样的,但是生长的环境造就的不同的人!如你所说,公司项目经理不懂开发,公司程序员不想开发,在这样的环境下,每个人的进步应该是很糟糕的!俗话说没有能力改变环境,只能去适应环境,所以,如果你继续待下去,可能对于这种情况就习以为常了!
第二:前途
不像当项目经理的程序员不是好程序员,现在项目开发都是需要团队合作的,在您的描述中,团队真的很差很差,你也学不到什么有用的知识,也没有什么好的经验,对于您以后的发展非常不利。
第三:选择
人生中肯定会有各种各样的选择。一年的时间来说,真的还很年轻。年轻人是需要有激情,为自己的想法而努力。现在在沿海城市很多公司在招程序员,虽然说一年的工作经验是少了点,但是,如果你有想法,基础扎实,一定可以找到一份适合你的工作。当初你选择程序员这个行业的时候,相信你也是因为喜欢变成才会选择。现在就像你当初一样,因为愿意,所以选择。每个程序员也不想遇到一个只知道溜须拍马的项目经理和糟糕透了的团队。只有在好的团队才会有好的发展。希望你好好考虑!
如何用JAVA做自毁系统
java大多数是做企业软件和微型软件(如手机软件)这种东西, C/C++大多是做应用程序和嵌入式这种东西的, 无论做哪种语言都是软件工程师, 不过我分析你是不是想做那种科研类的工程师呀, 那样的话半路出家有点太晚了。
软件测试工程师发展规划路线
1. 软件测试工程师发展规划路线
1.1. 测试基础
了解测试的基础技能, 掌握主流缺陷管理工具的使用, 熟练测试环境的操作与运维
爱码小士 测试基础
测试计划 / 测试用例 黑盒用例设计等价类 / 边界值 / 场景分析 / 判定表 / 因果图分析 / 错误推断
缺陷 缺陷生命周期 / 缺陷分级 / 缺陷管理工具禅道 / Jira
数据库 Mysql / 环境搭建 / 增删改查 / 关联查询 / 存储过程
Linux 系统搭建 / 基本指令 / 日志分析 / 环境搭建
1.2. Linux 必备知识
Linux 作为现在最流行的软件环境系统, 一定需要掌握, 目前的招聘要求都需要有 Linux 能力。
爱码小士 Linux 必备知识
Linux 系统简介与准备 Linux 作为现在最流行的软件环境系统, 一定得会, 从 CenterOS 版本系统进行介绍, 安装, 目录结构等基础内容学起, 也为后续自建测试环境准备。
Linux 远程工具 Xshell 详细介绍如何入门使用 Linux, 并进行常规的远程管理, 文件传输操作, 涉及其中的工具 Xshell, Xftp
Linux 文件属性与管理 Linux 文件, 目录基本属性, 文件操作, 文件管理, 目录操作, 目录管理。切忌自毁行为操作, 如何预防意外操作
Linux 用户与组管理 如何在 Linux 中新增, 删除, 修改用户与组, 并赋予相应权限, 不再因为权限问题而卡壳
Linux 文件编辑器 Linux 文件编辑器 vi 的使用, 命令模式, 输入模式, 操作实例, 快捷键, 管道命令, 使用心得。在一个没有图形化的系统下到底如何编辑的呢?
Linux 常用系统设置 网络设置, 环境变量, 磁盘管理, 时间设置, 系统资源, 防火墙, 应有尽有, 不用担心毫无头绪。
Linux 安装软件 Linux 安装命令, 以及如何通过 tar, gz 等网络上下载的安装文件进行安装, 如 MySQL 数据库安装。
Linux Docker 容器 Docker 容器技术讲解, image 镜像管理, 仓库, 容器创建, 启动, 操作, 镜像打包, 赶上行业流行技术
1.3. Shell 脚本
掌握 Shell 脚本: 包括 Shell 基础与运用、Shell 逻辑控制、Shell 逻辑函数
爱码小士 Shell
Linux Shell 基础与应用 shell 脚本编程介绍, 环境类型, 变量, 参数, 运算符, 数组的使用, 零距离接触脚本
Linux Shell 逻辑控制 shell 逻辑应用, test 命令, 流程控制, 数据输入与输出, 脚本逻辑不再单调, 玩出花样
Linux Shell 函数 shell 脚本函数写法, 文件互相调用, 脚本实战应用, 懂得开发, 测试, 运维都可以做什么
Windows 脚本批处理 Linux 玩够了, 再来看看 Windows 常规命令用法, 批处理脚本写法, 实战应用, 并不是到哪都是 Linux, Windows 脚本也是常用脚本之一, 看到这里可能你就用的 Windows
1.4. 互联网程序原理
自动化必经之路: 前端开发基础知识以及互联网网络必备知识四、互联网程序原理
爱码小士 互联网程序原理
Web 前端开发基础 HTML、CSS 基本内容学习。为什么测试课程有开发? 对不起, 如果不会, 自动化可能不欢迎, 很多自动化测试问题都出自于开发基础
Web 前端开发脚本 JavaScript 最主流的脚本学习, 同样的, 这也会在自动化测试中涉及, 在一些工具中其实也经常用到动态脚本, 也是 JavaScript 语言
开发者调试工具测试应用 虽然浏览器的 F12 被命名为开发者工具, 但实际上测试不管在功能测试还是自动化测试中, 都起到了很关键的作用。如解析 HTML, 定位元素, 调试脚本, 监控网络抓包等等
互联网程序网络架构 通过网络架构详细理解互联网程序的诞生, 逻辑细节, 互联网通讯原理又是如何将数据传递到其他计算机的, TCP, UCP, HTTP, 等等协议的关系又是什么。
HTTP 协议数据结构分析 完整解析 HTTP 协议数据结构, 包括 Request、Response 数据格式, Header 的定义和用法各种状态代表什么, 如何辨别错误。分析协议中参数的位置, rest 结构, 各种常见的 body 数据形式, 解析方式, 常见数据解析错误的原因。
Cookie 与 Session 机制 解读 Cookie 到底是什么, 和 Session 存在什么样的关系, 如何测试 Cookie 与 Session, 需要注意什么
1.5. MySQL 数据库
软件测试工程师必备 MySQL 数据库知识, 不仅仅停留在基本的 “增删改查”。
爱码小士 MySQL 数据库
MySQL 数据库测试应用 MySQL 环境搭建, 客户端 Navicat 的基本使用与数据操作, 学习并巩固基本的 SQL 语法, 增删改查缺一不可, 掌握各种条件的使用方法
MySQL 高级查询 查询升级, 掌握多表查询, 子查询, 查询分组, 统计函数的使用, 并对经典面试题进行学习与分析
MySQL 自定义函数 既然有内置函数, 当然也不缺自定义函数的位置, 也是经常会使用到的, 这就好比任意一种开发语言一样都离不开函数的定义与使用
MySQL 存储过程 SP 数据库必不可少的存储过程, 通常也叫 SP, 如何定义? 如何测试? 怎么样使用更安全, 测试到底用存储过程还能做什么更多便于测试的内容
MySQL 事物与编程 数据库事务使用案例, 索引的原理与使用, 数据库 SQL 编程在测试中的应用, 如何用其快速精准的产生大量指定的测试数据
1.6. 抓包工具
Fiddler, Wireshark, Sniffer, Tcpdump 各种抓包工具适用于各种项目, 总有一款适合你的
爱码小士 抓包工具
抓包原理与方式 只有了解抓包的原理, 才能真正去用好一个适合的工具, 选择合适的方向和方法, 否则都是徒劳的
抓包工具选择 抓包工具的分类与功效, 什么样的项目适合哪种工具, 如何去辨别工具的优势
Fiddler 基础功能 作为专业的 HTTP 体系的抓包工具, 详细介绍其工具原理, 如何过滤数据, 如何搜索想要的数据, 如何对 web, 非 web, 手机, HTTPS 协议等各种环境进行抓包
Fiddler 高级功能 学会使用其进行接口测试, 断电, 脚本等方式进行数据的修改, 替换, 模拟数据进行接口 Mock 测试, 创建自己定义的菜单功能
Wireshark 与其说是抓包, 更是一种抓包后的分析工具, 在各个系统下利用其它与系统一体化的抓包工具进行数据抓取整理并展示, 有着强大的过滤和分析功能
Sniffer 黑 科技 抓包工具, 有多种版本, 非常专业的抓包工具
Tcpdump Linux、Android 系列的系统中的抓包插件神器
1.7. 接口测试工具
接口测试神器, 你绕不开的强大工具: Jmeter。小巧灵活: Postman
爱码小士 接口测试工具
Jmeter 接口测试入门 Jmeter 简介, 环境准备, 目录结构介绍 , 如何录制脚本, 以及基础组件的使用, 线程、作用域、HTTP 请求、定时器、断言等等
Jmeter 接口测试进阶使用 Jmeter 逻辑控制、前置处理器、后置处理器、监视器、结果树, 如何参数化、正则表达式关联、事务、检查点等等。并带领大家对带有 token 等动态数据的项目进行实战演练
Jmeter 接口测试高级功能 Jmeter 脚本思考时间、随机时间、线程启动间隔、并发集合点、联机远程调用, webservice、websocket、jdbc、命令调用等等
Postman 接口测试工具使用 行业标准 HTTP、rest 接口测试神器, 基本请求、分组保存、动态变量、脚本、数据关联、参数化、自动断言、批量运行、持续集成。思路类似其他接口工具, 避免泛滥学习
1.8. Web 自动化测试 JavaPython
了解自动化的目的, 熟练掌握 TestNGunittest 自动化框架, 以及断言与日志处理
爱码小士 Web 自动化测试 JavaPython
自动化框架思路引导 我们做自动化到底为了什么? 节省人力、加快速度、还是让机器代替手动、还是提升自我。应该如何建立思路, 而非无脑进坑任机器摆布
JavaPython3 开发环境及基本语法 JavaPython 开发环境搭建, 基础语法入门, 让不会代码的以最快速度入门, 方便适应后续自动化测试开发内容学习, 代码够用即可, 并不是学得越多越好
JavaPython3 集合类型与面向对象开发 JavaPython 各种基本类型、集合数据类型的理解与操作, 循环语句、判断语句, 面向对象的开发, 函数的使用, 类的使用
Selenium3 环境与浏览器驱动配置 基于 selenium3 的 web 自动化环境搭建, 正确的浏览器配置, 不再为起不了浏览器而烦恼。支持 IE、Firefox、Chrome 等等
Selenium3 多种定位及动态操作 selenium3 常见定位方法, 属性和值的获取, 如何动态判断不一定存在的元素, 复杂的网页结构, 需要多步骤操作的元素等等
特殊情况处理 (js、特殊控件等) selenium3 自动化测试中, 常见的特殊情况处理, 如日期、控件、智能等待、文件上传下载、网页嵌套结构, 各种弹窗的处理方式, cookie 处理, JavaScript 脚本调用等
TestNGunittest 自动化框架使用 Python unittest、Java TestNG 自动化框架的使用, 环境处理、基本使用逻辑, 数据驱动模型, 数据库数据载入等
自动化框架断言与日志处理 自动化中最重要的是什么? 作为测试当然是断言, 没有断言的自动化毫无用处, 如何展示日志与结果是自动化测试的根本
PageObject 框架设计模式 PageObject 框架设计模式, 到底是做什么的? 如何更好的快速管理控件, 从此做起
1.9. 接口与移动端自动化
专业接口调用、测试解决方案。组建完整的 web 和接口自动化框架, Appium 整体使用
爱码小士 接口与移动端自动化
接口自动化方案 Requests Python Requests、Java HTTPclient 接口框架, 都是专业的接口调用、测试的解决方案, 使用简单快速, 结合工具的使用方式和功能, 快速上手并对其操作, 解决其中的疑难杂症
web + 自动化框架整合 自动化测试是相通的, 如何将 web 与接口、甚至更多的测试类型和方向结合起来, 组成完整的自动化框架
Appium 环境搭建 Appium 环境相对复杂, 针对 Android 系统进行完整的环境搭建演练, 解决环境上的问题, 并进行基本的自动化操作
Appium 自动化实战与框架结合 Appium 整体使用与 web 自动化类似, 引导使用典型功能, 并针对一款 APP 进行实战操作
1.10. 敏捷测试 TestOps 构建
揭开 TestOps 的神秘面纱, 持续集成 Jenkins 框架烂熟于心
爱码小士 敏捷测试 TestOps 构建
构建敏捷测试运维架构体系 敏捷测试是什么? 为什么需要敏捷, 行业都提到的 devops 又是什么? TestOps 能做什么
持续集成 Jenkins 框架实战 持续集成最常见的一套框架, 介绍 Jenkins 操作、权限、系统管理等, 常用构建与运行实例讲解
静态扫描测试 Sonar 一款自动化的代码扫描工具, 便捷式快速扫描代码中的问题, 做到提前发现, 统一规范, 自动化中的代码测试神器
1.11. 性能测试 安全测试
软件测试的彼岸: 性能测试和安全测试, 选个方向努力爬坑吧!
爱码小士 测试基础
性能测试学习路线 如何学习性能测试, 性能测试到底该怎么学习, 使用什么工具? 工具并不代表性能, 接口的基础对性能测试非常重要, 而工具只是辅助, 更多的是思路和策略。你不会并不是分析而是准备阶段
loadrunner 脱离浏览器录制专题 IE 无法启动被测网站? 打不开浏览器? 程序无法在浏览器中被打开? 这些都没关系, 还是一样能录制, 但录制是偷懒专用的, 对于学习有一定的辅助作用, 也会带入无法脱离的坑
性能测试工具操作实践 loadrunner、jmeter, 有了前面的基础使用, 看懂脚本不是问题, 带上关键的参数化、动态数据关联、事物、日志, 大部分的脚本都可以搞定进行实践
系统监控方案实施 工具自带监控? 系统监控? JVM 内部监控? 数据库监控? 各种监控的意义何在, 如何在各种情况下精准监控数据
安全测试起源与工具介绍 应该如何进行安全测试, 安全测试都有哪些分类? 都会用到什么样的工具, 各自的作用又是什么, 如 web 漏洞扫描, 端口扫描, 系统扫描等
web 安全测试手工实战 接口测试在安全中的作用, 不会手动的安全测试, 那就永远无法理解自动化以后产出的结果
安全扫描工具测试实践 实际介绍以及使用 APPscan、awvs 等专业安全扫描工具
企业安全建设 (SDLC) 企业应该如何进行安全建设, 制定更安全的软件生命周期。从哪些方面进行着手
关于java自毁和java自毁代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-26,除非注明,否则均为
原创文章,转载请注明出处。