- Revit图纸文字识别与实例属性快速更新
ZOZO_888
BIMRevit建筑模型revitrevit二次开发bim统一建模语言c#开发语言程序人生
-----❤------❤-----❤-----❤-----❤又是进步的一天啊❤------❤------❤------❤------❤-----#创作灵感#在Revit项目中,图纸的管理常常涉及大量的数据更新和信息同步,尤其是需要从图纸中提取文字信息并批量更新相关实例的属性。通过开发一个Revit插件,我们可以自动化这一过程。本文将介绍如何利用RevitAPI实现图纸文字识别、实例的自动匹配与分
- 不懂编程?节点包来凑——Dynamo常用节点包推荐(上)
九哥BIMer
Dynamo案例百解pythonDynamo
由于篇幅有限,本次文章我们分上、下两篇,来分享给大家。Dynamo作为一款辅助三维设计工具,他可以通过图形化的编程,帮我们解决很多在设计或者建模过程中遇到的小问题;同时他作为一款可视化编程软件,学起来也不太难,但是,很多时候,Dynamo自带的那些节点并不能满足我们日常工作的需要,因为这些节点,也就涉及到RevitAPI的九牛一毛,所以会编程又显得尤为重要了。但是,Dynamo作为一款可视化编程工
- 在Visual Studio中搭建Dynamo Python开发环境,效率飞一般的增长
九哥BIMer
Dynamo案例百解visualstudioDynamopython
最近在学习Dynamo中PythonScript的用法,发现这个东西用起来太不友好了,不支持自动缩进,不支持自动填充和提示。用过VisualStudio做二开的都知道,在引用了Revitapi以后,就可以自动填充和提示了。本来英语就不好,写代码经常敲错单词,忘记缩进,在PythonScript中写代码,实在是太痛苦了,每次照着教程写,都要改好几次才能正常运行,于是就希望能找到一种方法,提高代码的书
- Revit API 开发 (9): BRepBuilder 创建原生几何图形
极客BIM工作室
RevitAPI
前言原生集合图形的好处不言而喻,如何创建一个复杂的原生图形,RevitAPI也提供了对应的功能。流程如何使用BRepBuilder创建一个圆柱体,并且用DirectShape在Revit中创建。代码请参考RevitSDK。BRepBuilder开始和结束BRepBuilderbrepBuilder=newBRepBuilder(BRepType.Solid);brepBuilder.Finish(
- Revit SDK 介绍:PrintLog 打印日志
极客BIM工作室
RevitSDK介绍C#
前言这个例子介绍了如何使用打印相关的事件。内容事件机制也是老生常谈了,Revit提供了大量的可供注册的事件:RevitAPI:Events事件总览注册和print相关的事件://IExternalApplication.OnStartupm_eventsReactor=newEventsReactor();application.ControlledApplication.ViewPrinting
- Revit SDK 介绍:RayTraceBounce 光线反弹
极客BIM工作室
C#
前言这个例子模拟光线反弹。内容通过修改参数,从(0,0,0)点向(1,0,0)方向射出光线,经过若干次反弹之后的结果。如图所示:在RevitAPI中,用ReferenceIntersector::Find来计算射线上相交的几何。核心逻辑,简化了代码,只保留重要部分://从起点startpt出发,做rayLimit次射线Autodesk.Revit.DB.XYZstartpt=m_origin;fo
- Revit SDK:DistanceToSurfaces 计算球到各表面的距离
极客BIM工作室
RevitSDK介绍c#
前言这里例子用AVF根据距离的远近给个各个表面上色。内容运行结果,根据到球的距离远近,给各个构件的表面(分析结果)给与不同颜色:例子中使用了IUpdater来进行更新,参考RevitAPI:IUpdater自动更新接口。核心逻辑:
- Revit SDK 介绍:AutoRoute 自动路由
极客BIM工作室
RevitSDK介绍C#
前言这个例子介绍如何用RevitAPI创建自动路由,本质上就是通过API创建机电管道。内容将出风口和风机自动连接,最终效果。下面按步骤将其组装起来:风机立管及连接件生成红框内容的核心逻辑:ducts.Add(Duct.Create(m_document,ductTypeId,lvl.Id,conns[0],points[0]));ducts.Add(Duct.Create(m_document,s
- Revit SDK 介绍:AvoidObstruction 避免碰撞
极客BIM工作室
RevitSDK介绍C#
前言这个例子介绍如何让碰撞在一起的管道避免碰撞,即对管道进行调整。内容调整前:调整后:从结果来看,所有的碰撞都被调整了。作为一个例子,不会去考虑是否合理,仅仅是展示了一下RevitAPI的能力。在resolver.Resolve()中处理调整的逻辑遍历所有的管道检查管道是否和其它管道有交叉如果管道有交叉,创建U行翻弯,拆分原来的管道并与U行翻弯连接Resolve遍历所有的管道publicvoidR
- Revit SDK 介绍:多线程计算 MultithreadedCalculation
极客BIM工作室
RevitSDK介绍
前言Revit对于多线程,说实话支持的并不好。不过如果真的要用,也不是没有办法。本文以SDK的例子MultithreadedCalculation做个介绍。MultithreadedCalculation如果是RevitAPI初学者,建议不要看我这篇博客。下面只有几个我认为的关键点,详细逻辑不难,但是有点多,就不写了。功能本质是C#的最基本的Thread多线程,且是单纯的计算。Threadthre
- Revit SDK 介绍:DuplicateGraphics
极客BIM工作室
RevitSDK介绍c#
前言这个例子介绍如何直接在Revit的画布里面绘制任意用户想要的三维图形。或者说,RevitAPI暴露了让用户直接参与生成渲染数据的接口。内容程序运行的效果如下,它的逻辑:选择一个或多个构件,比如墙,点击完成通过类DirectContext3D::DrawContext在画布绘制选中构件注意:不是所有构件都能被绘制出来,比如门窗,原因在于这个例子没有考虑这种情况,用户可以自己修改代码来实现。另外,
- Revit SDK 介绍:BRepBuilderExample
极客BIM工作室
RevitSDK介绍几何学
前言这个例子是通过RevitAPI来直接创建几何图形。和这篇博客内容相似:RevitAPI开发(9):BRepBuilder创建原生几何图形内容最终效果:创建立方体完整代码详见:Revit2021SDK\Samples\GeometryAPI\BRepBuilderExample\CS\CreateCube.cs步骤:创建6个平面的几何Plane;用步骤1的Plane创建6个平面的BRep拓扑;创
- revit二次开发知识分享(七)几何体的布尔运算
baobao熊
Revit二次开发知识分享
revitAPI中只提供了几何体相关的布尔运算,是下面的这些方法(如图)方法后缀是否加ModifyingOriginalSolid的区别在于,没加是对几何体进行操作,并且操作完后生成一个新的几何体,而对原本的几何体没有改变任何东西。如果加了,就是直接对原本的几何体进行操作。今天主要是介绍ExecuteBooleanOperation方法的使用。先上操作后讲解JustDoIt!!!Solids=Bo
- Revit AVF纹理UV处理
新缸中之脑
uv计算机视觉人工智能
这一周结束得太快了……在我们进入周末之前,这里有一些引人注目的话题:使用AVF解释纹理UV映射人体细胞的详细3D模型推荐:用NSDT设计器快速搭建可编程3D场景。1、使用AVF解释纹理UV映射不久前在RevitAPI讨论论坛中提出了一个问题,并在IExportContext中将UV转换为范围(0,1)进行了部分讨论。那时,我在关于自定义导出器中规范化UV的博客文章讨论中总结并保留了该讨论的初始部分
- 不懂编程?节点包来凑——Dynamo常用节点包推荐(上)
九哥BIMer
由于篇幅有限,本次文章我们分上、下两篇,来分享给大家。Dynamo作为一款辅助三维设计工具,他可以通过图形化的编程,帮我们解决很多在设计或者建模过程中遇到的小问题;同时他作为一款可视化编程软件,学起来也不太难,但是,很多时候,Dynamo自带的那些节点并不能满足我们日常工作的需要,因为这些节点,也就涉及到RevitAPI的九牛一毛,所以会编程又显得尤为重要了。但是,Dynamo作为一款可视化编程工
- Rhino.Inside.Revit节点包FunBIM v0.1 beta版介绍
九哥BIMer
Hello大家好!我是九哥~Rhino.Inside.Revit已经发布有一段时间了,但是对于RevitAPI的开发还是太少了,很多常用的API都还没有现成的节点,当然官方也一直在更新,功能越来越丰富,同时也发布了RIR的API,方便写代码。基于此呢,我整理了一些我偶尔会用到的功能,封装成了自定义节点,目前还不多,差不多有一百个左右吧!当然了,我并不会开发,只是用了一些简单Python代码,存成了
- Revit二次开发之添加选项卡和按钮
letmebaby
我们日常在revit开发中经常会用到按钮,可以通过revitAPI提供的接口创建按钮,今天我简单介绍一下如何创建两种按钮,一种是单命令按钮,另一种是含下拉菜单的按钮。
- Dynamo PythonScript 代码速查手册By九哥
九哥BIMer
你好,这里是BIM的乐趣,我是九哥今天给大家带来的是我的知识工程的第二套知识库,这套知识库不是教程,是一套完整的笔记,里面包含了大量的Python代码。当然这里也没有实现太多的具体逻辑,单纯的是通过Python在Dynamo中实现一些RevitAPI的方法,我的目的就是省事,写代码的时候,抄过来就能用,很是方便~(以Dynamo自带节点以外的功能点为主)下面截一张总目录图,目前大概有300个节点左
- 在Visual Studio中搭建Dynamo Python开发环境,效率飞一般的增长
九哥BIMer
最近在学习Dynamo中PythonScript的用法,发现这个东西用起来太不友好了,不支持自动缩进,不支持自动填充和提示。用过VisualStudio做二开的都知道,在引用了Revitapi以后,就可以自动填充和提示了。本来英语就不好,写代码经常敲错单词,忘记缩进,在PythonScript中写代码,实在是太痛苦了,每次照着教程写,都要改好几次才能正常运行,于是就希望能找到一种方法,提高代码的书
- Dynamo与Revit API之间的转换——Dynamo Python系列教程(五)
九哥BIMer
今天来聊聊Dynamo与Revit之间图元转换的基础知识,这些需要你牢牢记住哦,不然在Pythonscript中写代码,经常会报错的~通常来讲,所有来自Dynamo节点的几何图形都不是Revit的几何对象,所以它们需要与RevitAPI一起使用进行转换。Dynamo的几何图形单位是米,而Revit使用的英尺,这里要引入转换工具,用下面的方法:importclrclr.AddReference("R
- 什么是API?——Dynamo Python系列教程(八)
九哥BIMer
前几天有小伙伴留言,希望聊聊API,于是呢,就简单整理了一些资料,咱们分几篇文章来介绍RevitAPI。今天呢,先来聊聊啥是API。API一般被称作“应用程序接口”,你进入应用程序的窗口。维基百科上对它的解释为:‘电脑操作系统(Operatingsystem)’或‘程序库’提供给应用程序调用使用的代码”API适用于程序员大多数人将通过其用户界面使用应用程序。单击按钮,从下拉菜单中选择项目,或者直接
- Revit API简介——Dynamo Python系列教程(九)
九哥BIMer
Revit的API已经开发了近二十年。RevitAPI简介Revit在本世纪初就有了一个可访问的API,可以用来驱动软件的几乎所有方面。由于Revit应用程序非常复杂,而且是为适应多种受众(结构、MEP等)而构建的,所以它的API非常大,需要一段时间才能直观地掌握,也就不足为奇了。我经常发现,最简单的方法是把Revit看作一个数据库,我们在使用应用程序时不断更新它。数据库存储我们的内容(它的元素I
- 如何阅读Revit的API文档——Dynamo Python系列教程(十)
九哥BIMer
好消息:“BIM的乐趣”微信群恢复运营了,有兴趣的小伙伴可以在文章底部扫码入群哦~Revit的API很大,其文档也很大,本次文章简单教你如何阅读它。虽然Autodesk的官方文档RevitAPI可以在其SDK中找到一个.chm文件,但我建议大家访问http://APIDocs.co来了解RevitAPI。这个由软件开发人员GuiTalarico创建的站点记录了Revit、Rhino、Grassho
- 在b站学习Revit二次开发week1
2021Mar22ndDay1准备:Revit2016VS2012+.NET4.5c#documentation(https://docs.microsoft.com/en...revit2016SDK(http://usa.autodesk.com/adsk/...插件:AddinManager--直接修改插件代码不用重启revitLookup--看API对象revitAPI开发论坛参考文献:同
- Revit—部分枚举中文名称获取LabelUtils
临风小红楼
Revit二次开发实践“出”坑c#
在二次开发过程中,可能会遇到取BuiltInCategory,BuiltInParameter等枚举的汉化中文显示的需求。RevitAPI提供了一个工具,LabelUtils。该工具能对一些常用的的内置枚举可以获取指定的语言显示。重点再说一遍:LabelUtilspublicclassLabelUtils:IDisposable{~LabelUtils();publicboolIsValidObj
- RevitAPI进阶之独立进程内读取、写入Revit文件.
Str_Y
Revit
如何不开启Revit读取,写入Revit文件呢?最优方案当前是利用TeighaBIM进行读写,但是无奈于这是第三方框架,要收费。那么欧特克有没有提供给我们合适的手段呢,答案是肯定的,其实欧特克内部做BIM交换时就用了此方法。publicclassProgram{staticreadonlystringWorkPath=Path.GetDirectoryName(typeof(Program).As
- Dynamo For Revit: 如何移动一个element
极客BIM工作室
DynamoForRevitRevitAPIDynamoForRevitRevitAPIPython
Dynamo提供的nodes里面,没有可以直接移动某个element的。那么我们就通过PythonScript来手动写一个。整体代码importclr#ImportRevitAPIclr.AddReference("RevitAPI")importAutodeskfromAutodesk.Revit.DBimport*#ImportDocumentManagerandTransactionMana
- Dynamo For Revit & Revit API: Room 房间边界和几何图形
极客BIM工作室
DynamoForRevitRevitAPI
前言本文通过DynamoForRevit和RevitAPI介绍如何获取房间的边界和几何图形。内容通过Dynamo节点,Room.CenterBoundary、Room.CoreBoundary和Room.FinishBoundary可以迅速得到房间的边界。但这三个结果不完全一样。本图对应的是Revit官方示例文件中的房间:API获取边界到底是什么造成了这个差异呢?从API梳理一下。Room房间Ro
- Revit API 几何专题 1:几何类库概述 GeometryObject
极客BIM工作室
RevitAPIGeometry专题RevitAPI
几何类库RevitAPI提供了一套完整的几何库。既然是几何库,那就逃不过这些概念:点、线、面、体。那么,对于任意的几何库,实际上,你要关系的东西逃不过下面的表格,(点/线/面/体)与(点/线/面/体)之间的关系。比较复杂的是(面/体)与(点/线/面/体)之间的关系。这些类的基类都是GeometryObject。对应的点、线、面、体:点:Point线:Curve、Edge、PolyLine、Prof
- Dynamo For Revit:Python 基础 - library 引用和 UnwrapElement
极客BIM工作室
DynamoForRevit
前言本文介绍DynamoForRevit中的PythonNode的基础-library引用和UnwrapElement。(主要是我自己经常忘了,还要重新找)内容如何引用普通的Python库,以及RevitAPI。普通的Python库新建一个Python节点,内容如下。#LoadthePythonStandardandDesignScriptLibrariesimportsysimportclrcl
- java杨辉三角
3213213333332132
java基础
package com.algorithm;
/**
* @Description 杨辉三角
* @author FuJianyong
* 2015-1-22上午10:10:59
*/
public class YangHui {
public static void main(String[] args) {
//初始化二维数组长度
int[][] y
- 《大话重构》之大布局的辛酸历史
白糖_
重构
《大话重构》中提到“大布局你伤不起”,如果企图重构一个陈旧的大型系统是有非常大的风险,重构不是想象中那么简单。我目前所在公司正好对产品做了一次“大布局重构”,下面我就分享这个“大布局”项目经验给大家。
背景
公司专注于企业级管理产品软件,企业有大中小之分,在2000年初公司用JSP/Servlet开发了一套针对中
- 电驴链接在线视频播放源码
dubinwei
源码电驴播放器视频ed2k
本项目是个搜索电驴(ed2k)链接的应用,借助于磁力视频播放器(官网:
http://loveandroid.duapp.com/ 开放平台),可以实现在线播放视频,也可以用迅雷或者其他下载工具下载。
项目源码:
http://git.oschina.net/svo/Emule,动态更新。也可从附件中下载。
项目源码依赖于两个库项目,库项目一链接:
http://git.oschina.
- Javascript中函数的toString()方法
周凡杨
JavaScriptjstoStringfunctionobject
简述
The toString() method returns a string representing the source code of the function.
简译之,Javascript的toString()方法返回一个代表函数源代码的字符串。
句法
function.
- struts处理自定义异常
g21121
struts
很多时候我们会用到自定义异常来表示特定的错误情况,自定义异常比较简单,只要分清是运行时异常还是非运行时异常即可,运行时异常不需要捕获,继承自RuntimeException,是由容器自己抛出,例如空指针异常。
非运行时异常继承自Exception,在抛出后需要捕获,例如文件未找到异常。
此处我们用的是非运行时异常,首先定义一个异常LoginException:
/**
* 类描述:登录相
- Linux中find常见用法示例
510888780
linux
Linux中find常见用法示例
·find path -option [ -print ] [ -exec -ok command ] {} \;
find命令的参数;
- SpringMVC的各种参数绑定方式
Harry642
springMVC绑定表单
1. 基本数据类型(以int为例,其他类似):
Controller代码:
@RequestMapping("saysth.do")
public void test(int count) {
}
表单代码:
<form action="saysth.do" method="post&q
- Java 获取Oracle ROWID
aijuans
javaoracle
A ROWID is an identification tag unique for each row of an Oracle Database table. The ROWID can be thought of as a virtual column, containing the ID for each row.
The oracle.sql.ROWID class i
- java获取方法的参数名
antlove
javajdkparametermethodreflect
reflect.ClassInformationUtil.java
package reflect;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.Modifier;
import javassist.bytecode.CodeAtt
- JAVA正则表达式匹配 查找 替换 提取操作
百合不是茶
java正则表达式替换提取查找
正则表达式的查找;主要是用到String类中的split();
String str;
str.split();方法中传入按照什么规则截取,返回一个String数组
常见的截取规则:
str.split("\\.")按照.来截取
str.
- Java中equals()与hashCode()方法详解
bijian1013
javasetequals()hashCode()
一.equals()方法详解
equals()方法在object类中定义如下:
public boolean equals(Object obj) {
return (this == obj);
}
很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、I
- 精通Oracle10编程SQL(4)使用SQL语句
bijian1013
oracle数据库plsql
--工资级别表
create table SALGRADE
(
GRADE NUMBER(10),
LOSAL NUMBER(10,2),
HISAL NUMBER(10,2)
)
insert into SALGRADE values(1,0,100);
insert into SALGRADE values(2,100,200);
inser
- 【Nginx二】Nginx作为静态文件HTTP服务器
bit1129
HTTP服务器
Nginx作为静态文件HTTP服务器
在本地系统中创建/data/www目录,存放html文件(包括index.html)
创建/data/images目录,存放imags图片
在主配置文件中添加http指令
http {
server {
listen 80;
server_name
- kafka获得最新partition offset
blackproof
kafkapartitionoffset最新
kafka获得partition下标,需要用到kafka的simpleconsumer
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.
- centos 7安装docker两种方式
ronin47
第一种是采用yum 方式
yum install -y docker
 
- java-60-在O(1)时间删除链表结点
bylijinnan
java
public class DeleteNode_O1_Time {
/**
* Q 60 在O(1)时间删除链表结点
* 给定链表的头指针和一个结点指针(!!),在O(1)时间删除该结点
*
* Assume the list is:
* head->...->nodeToDelete->mNode->nNode->..
- nginx利用proxy_cache来缓存文件
cfyme
cache
user zhangy users;
worker_processes 10;
error_log /var/vlogs/nginx_error.log crit;
pid /var/vlogs/nginx.pid;
#Specifies the value for ma
- [JWFD开源工作流]JWFD嵌入式语法分析器负号的使用问题
comsci
嵌入式
假如我们需要用JWFD的语法分析模块定义一个带负号的方程式,直接在方程式之前添加负号是不正确的,而必须这样做:
string str01 = "a=3.14;b=2.71;c=0;c-((a*a)+(b*b))"
定义一个0整数c,然后用这个整数c去
- 如何集成支付宝官方文档
dai_lm
android
官方文档下载地址
https://b.alipay.com/order/productDetail.htm?productId=2012120700377310&tabId=4#ps-tabinfo-hash
集成的必要条件
1. 需要有自己的Server接收支付宝的消息
2. 需要先制作app,然后提交支付宝审核,通过后才能集成
调试的时候估计会真的扣款,请注意
- 应该在什么时候使用Hadoop
datamachine
hadoop
原帖地址:http://blog.chinaunix.net/uid-301743-id-3925358.html
存档,某些观点与我不谋而合,过度技术化不可取,且hadoop并非万能。
--------------------------------------------万能的分割线--------------------------------
有人问我,“你在大数据和Hado
- 在GridView中对于有外键的字段使用关联模型进行搜索和排序
dcj3sjt126com
yii
在GridView中使用关联模型进行搜索和排序
首先我们有两个模型它们直接有关联:
class Author extends CActiveRecord {
...
}
class Post extends CActiveRecord {
...
function relations() {
return array(
'
- 使用NSString 的格式化大全
dcj3sjt126com
Objective-C
格式定义The format specifiers supported by the NSString formatting methods and CFString formatting functions follow the IEEE printf specification; the specifiers are summarized in Table 1. Note that you c
- 使用activeX插件对象object滚动有重影
蕃薯耀
activeX插件滚动有重影
使用activeX插件对象object滚动有重影 <object style="width:0;" id="abc" classid="CLSID:D3E3970F-2927-9680-BBB4-5D0889909DF6" codebase="activex/OAX339.CAB#
- SpringMVC4零配置
hanqunfeng
springmvc4
基于Servlet3.0规范和SpringMVC4注解式配置方式,实现零xml配置,弄了个小demo,供交流讨论。
项目说明如下:
1.db.sql是项目中用到的表,数据库使用的是oracle11g
2.该项目使用mvn进行管理,私服为自搭建nexus,项目只用到一个第三方 jar,就是oracle的驱动;
3.默认项目为零配置启动,如果需要更改启动方式,请
- 《开源框架那点事儿16》:缓存相关代码的演变
j2eetop
开源框架
问题引入
上次我参与某个大型项目的优化工作,由于系统要求有比较高的TPS,因此就免不了要使用缓冲。
该项目中用的缓冲比较多,有MemCache,有Redis,有的还需要提供二级缓冲,也就是说应用服务器这层也可以设置一些缓冲。
当然去看相关实现代代码的时候,大致是下面的样子。
[java]
view plain
copy
print
?
public vo
- AngularJS浅析
kvhur
JavaScript
概念
AngularJS is a structural framework for dynamic web apps.
了解更多详情请见原文链接:http://www.gbtags.com/gb/share/5726.htm
Directive
扩展html,给html添加声明语句,以便实现自己的需求。对于页面中html元素以ng为前缀的属性名称,ng是angular的命名空间
- 架构师之jdk的bug排查(一)---------------split的点号陷阱
nannan408
split
1.前言.
jdk1.6的lang包的split方法是有bug的,它不能有效识别A.b.c这种类型,导致截取长度始终是0.而对于其他字符,则无此问题.不知道官方有没有修复这个bug.
2.代码
String[] paths = "object.object2.prop11".split("'");
System.ou
- 如何对10亿数据量级的mongoDB作高效的全表扫描
quentinXXZ
mongodb
本文链接:
http://quentinXXZ.iteye.com/blog/2149440
一、正常情况下,不应该有这种需求
首先,大家应该有个概念,标题中的这个问题,在大多情况下是一个伪命题,不应该被提出来。要知道,对于一般较大数据量的数据库,全表查询,这种操作一般情况下是不应该出现的,在做正常查询的时候,如果是范围查询,你至少应该要加上limit。
说一下,
- C语言算法之水仙花数
qiufeihu
c算法
/**
* 水仙花数
*/
#include <stdio.h>
#define N 10
int main()
{
int x,y,z;
for(x=1;x<=N;x++)
for(y=0;y<=N;y++)
for(z=0;z<=N;z++)
if(x*100+y*10+z == x*x*x
- JSP指令
wyzuomumu
jsp
jsp指令的一般语法格式: <%@ 指令名 属性 =”值 ” %>
常用的三种指令: page,include,taglib
page指令语法形式: <%@ page 属性 1=”值 1” 属性 2=”值 2”%>
include指令语法形式: <%@include file=”relative url”%> (jsp可以通过 include