当前位置:文档之家› EL+and+JSTL+中文教程(选自+JSP2[1].0技术手册)

EL+and+JSTL+中文教程(选自+JSP2[1].0技术手册)

EL+and+JSTL+中文教程(选自+JSP2[1].0技术手册)
EL+and+JSTL+中文教程(选自+JSP2[1].0技术手册)

第六章 Expression Language

 

清晨之风制作

6-1 EL简介

6-1 EL简介

EL全名为Expression Language,它原本是JSTL 1.0为方便存取数据所自定义的语言。当时EL

只能在JSTL标签中使用,如下:

程序执行结果为10。但是你却不能直接在JSP网页中使用:

Hi ! ${ username }

到了JSP 2.0之后,EL已经正式纳入成为标准规范之一。因此,只要是支持Servlet 2.4 / JSP

2.0的Container,就都可以在JSP网页中直接使用EL了。

除了JSP 2.0建议使用EL之外,JavaServer Faces( JSR-127 ) 也考虑将EL纳入规范,由此

可知,EL如今已经是一项成熟、标准的技术。

注意

假若您所用的Container只支持Servlet 2.3/JSP 1.2,如:Tomcat 4.1.29,您就不能在

JSP网页中直接使用EL,必须安装支持Servlet 2.4 / JSP 2.0的Container。

6-2 EL语法

EL语法很简单,它最大的特点就是使用上很方便。接下来介绍EL主要的语法结构:${https://www.doczj.com/doc/ae15038891.html,er.sex}

所有EL都是以${ 为起始、以} 为结尾的。上述EL范例的意思是:从Session的范围中,取得

用户的性别。假若依照之前JSP Scriptlet的写法如下:

User user = (User)session.getAttribute("user");

String sex = user.getSex( );

两者相比较之下,可以发现EL的语法比传统JSP Scriptlet更为方便、简洁。

6-2-1 .与 [ ] 运算符

EL提供 . 和 [ ] 两种运算符来存取数据。下列两者所代表的意思是一样的:${https://www.doczj.com/doc/ae15038891.html,er.sex}

等于

${https://www.doczj.com/doc/ae15038891.html,er["sex"]}

.和[ ] 也可以同时混合使用,如下:

${sessionScope.shoppingCart[0].price}

回传结果为shoppingCart中第一项物品的价格。

不过,以下两种情况,两者会有差异:

(1) 当要存取的属性名称中包含一些特殊字符,如.或–等并非字母或数字的符号,就一定要使用 [ ],例如:

${user.My-Name }

上述是不正确的方式,应当改为:

${user["My-Name"] }

(2) 我们来考虑下列情况:

${https://www.doczj.com/doc/ae15038891.html,er[data]}

此时,data是一个变量,假若data的值为"sex"时,那上述的例子等于${https://www.doczj.com/doc/ae15038891.html,er.sex};假若data的值为"name"时,它就等于${https://www.doczj.com/doc/ae15038891.html,}。因此,如果要动态取值时,就可以用上述的方法来做,但.无法做到动态取值。

接下来,我们更详细地来讨论一些情况,首先假设有一个EL:

${expr-a[expr-b]}

(1) 当expr-a的值为null时,它会回传null。

(2) 当expr-b的值为null时,它会回传null。

(3)当expr-a的值为一Map类型时:

●假若 !value-a.containsKey(value-b)为真,则回传null。

●否则回传value-a.get(value-b)。

(4) 当expr-a的值为List或array类型时:

●将value-b的值强制转型为int,假若不能转型为int时,会产生error。

●然后,假若value-a.get(value-b)或Array.get(value-a, value-b)产生ArrayIndexOutOfBoundsException或IndexOutOfBoundsException时,则回传null。

●假若value-a.get(value-b)或Array.get(value-a, value-b)产生其他的异常时,则会产生

error。

●最后都没有任何异常产生时,回传value-a.get(value-b)或Array.get(value-a, value-b)。

(5) 当expr-a的值为JavaBean对象时:

●将value-b的值强制转型为String。

●假若getter产生异常时,则会产生error。若没有异常产生时,则回传getter的结果。

6-2-2 EL变量

EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username 的变量。因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page范围找,假如找不到,再依序到Request、Session、Application范围。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null(见表6-1):

表6-1

属性范围在EL中的名称

Page PageScope

Request RequestScope

Session SessionScope

Application ApplicationScope

自动搜索顺序

我们也可以指定要取出哪一个范围的变量(见表6-2):

表6-2

范例说明

${https://www.doczj.com/doc/ae15038891.html,ername} 取出Page范围的username变量

${https://www.doczj.com/doc/ae15038891.html,ername} 取出Request范围的username变量

${https://www.doczj.com/doc/ae15038891.html,ername} 取出Session范围的username变量

${https://www.doczj.com/doc/ae15038891.html,ername} 取出Application范围的username变量其中,pageScope、requestScope、sessionScope和applicationScope都是EL的隐含对象,由它们的名称可以很容易猜出它们所代表的意思,例如:${https://www.doczj.com/doc/ae15038891.html,ername}是取出Session 范围的username变量。这种写法是不是比之前JSP的写法:

String username = (String) session.getAttribute("username");

容易、简洁许多。有关EL隐含对象在6-3节中有更详细的介绍。

6-2-3 自动转变类型

EL除了提供方便存取变量的语法之外,它另外一个方便的功能就是:自动转变类型,我们来看下面这个范例:

${param.count + 20}

假若窗体传来count的值为10时,那么上面的结果为30。之前没接触过JSP的读者可能会认为上面的例子是理所当然的,但是在JSP 1.2之中不能这样做,原因是从窗体所传来的值,它们的类型一律是String,所以当你接收之后,必须再将它转为其他类型,如:int、float等等,然后才能执行一些数学运算,下面是之前的做法:

String str_count = request.getParameter("count");

int count = Integer.parseInt(str_count);

count = count + 20;

接下来再详细说明EL类型转换的规则:

(1) 将A转为String类型

●假若A为String时:回传A

●否则,当A为null时:回传 ""

●否则,当A.toString( )产生异常时:错误!

●否则,回传 A.toString( )

(2) 将A转为Number类型的N

●假若A为null或 "" 时:回传0

●假若A为Character时:将A转为 new Short((short)a.charValue( ))

●假若A为Boolean时:错误!

●假若A为Number类型和N一样时:回传A

●假若A为Number时:

·假若N是BigInteger时:

·假若A为BigDecimal时:回传 A.toBigInteger( )

·否则,回传 BigInteger.valueOf(A.longValue( )) ·假若N是BigDecimal时:

·假若A为BigInteger时:回传 A.toBigDecimal( )

·否则,回传 BigDecimal.valueOf(A.doubleValue( )) ·假若N为Byte时:回传 new Byte(A.byteValue( ))

·假若N为Short时:回传 new Short(A.shortValue( ))

·假若N为Integer时:回传 new Integer(A.intValue( ))

·假若N为Long时:回传 new Long(A.longValue( ))

·假若N为Float时:回传 new Float(A.floatValue( ))

·假若N为Double时:回传 new Double(A.doubleValue( ))

·否则,错误!

●假若A为String时:

·假若N是BigDecimal时:

·假若 new BigDecimal(A)产生异常时:错误!

·否则,回传 new BigDecimal(A)

·假若N是BigInteger时:

·假若 new BigInteger(A)产生异常时:错误!

·否则,回传 new BigInteger(A)

·假若N.valueOf(A)产生异常时:错误!

·否则,回传 N.valueOf(A)

●否则,错误!

(3) 将A转为Character类型

●假若A为null或 "" 时:回传 (char)0

●假若A为Character时:回传 A

●假若A为Boolean时:错误!

●假若A为Number时:转换为Short后,然后回传Character

●假若A为String时:回传 A.charAt(0)

●否则,错误!

(4) 将A转为Boolean类型

●假若A为null或 "" 时:回传 false

●否则,假若A为Boolean时:回传 A

●否则,假若A为String,且Boolean.valueOf(A)没有产生异常时:回传Boolean.valueOf(A)

●否则,错误!

6-2-4 EL保留字

EL的保留字如表6-3:

表6-3

And eq gt true

Or ne le false

No lt ge null

instanceof empty div mod

所谓保留字的意思是指变量在命名时,应该避开上述的名字,以免程序编译时发生错误。

6-3 EL隐含对象

笔者在“第五章:隐含对象(Implicit Object)”中,曾经介绍过9个JSP隐含对象,而EL本身也有自己的隐含对象。EL隐含对象总共有11个(见表6-4):

表6-4

隐含对象类型说明

PageContext javax.servlet.ServletContext 表示此JSP的PageContext

PageScope java.util.Map 取得Page范围的属性名称所对应的值

RequestScope java.util.Map 取得Request范围的属性名称所对应的值

sessionScope java.util.Map 取得Session范围的属性名称所对应的值

applicationScope java.util.Map 取得Application范围的属性名称所对应的值

param java.util.Map

如同

ServletRequest.getParameter(String

name)。回传String类型的值

续表

隐含对象类型说明paramValues java.util.Map 如同

隐含对象类型说明

ServletRequest.getParameterValues(Stri ng

name)。回传String []类型的值

header java.util.Map 如同ServletRequest.getHeader(String name)。回传String类型的值

headerValues java.util.Map 如同ServletRequest.getHeaders(String name)。回传String []类型的值

cookie java.util.Map 如同HttpServletRequest.getCookies( )

initParam java.util.Map 如同

ServletContext.getInitParameter(String name)。回传String类型的值

这11个隐含对象(Implicit Object),笔者将它分成三类:

1. 与范围有关的隐含对象

applicationScope

sessionScope

requestScope

pageScope

2. 与输入有关的隐含对象

param

paramValues

3. 其他隐含对象

cookie

header

headerValues

initParam

pageContext

接下来笔者会依照上面的分类顺序,为读者介绍这些隐含对象。6-3-1 属性(Attribute)与范围(Scope)

与范围有关的EL隐含对象包含以下四个:pageScope、requestScope、sessionScope和applicationScope,它们基本上就和JSP的pageContext、request、session和application一样,所以笔者在这里只稍略说明。不过必须注意的是,这四个隐含对象只能用来取得范围属性值,即JSP 中的getAttribute(String name),却不能取得其他相关信息,例如:JSP中的request对象除可以存取属性之外,还可以取得用户的请求参数或表头信息等等。但是在EL中,它就只能单纯用来取得对应范围的属性值,例如:我们要在session中储存一个属性,它的名称为username,在JSP中使用session.getAttribute("username")来取得username的值,但是在EL中,则是使用${https://www.doczj.com/doc/ae15038891.html,ername}来取得其值的。接下来分别对这四个隐含对象做简短的说明:

● pageScope

范围和JSP的Page相同,也就是单单一页JSP Page的范围(Scope)。

● requestScope

范围和JSP的Request相同,requestScope的范围是指从一个JSP网页请求到另一个JSP网页请求之间,随后此属性就会失效。

● sessionScope

范围和JSP Scope中的session相同,它的属性范围就是用户持续在服务器连接的时间。

● applicationScope

范围和JSP Scope中的application相同,它的属性范围是从服务器一开始执行服务,到服务器关闭为止。

6-3-2 与输入有关的隐含对象

与输入有关的隐含对象有两个:param和paramV alues,它们是EL中比较特别的隐含对象。一般而言,我们在取得用户的请求参数时,可以利用下列方法:

request.getParameter(String name)

request.getParameterValues(String name)

在EL中则可以使用param和paramV alues两者来取得数据。

${https://www.doczj.com/doc/ae15038891.html,}

${https://www.doczj.com/doc/ae15038891.html,}

这里param的功能和request.getParameter(String name)相同,而paramV alues和request.getParameterV alues(String name)相同。如果用户填了一个表格,表格名称为username,则我们就可以使用${https://www.doczj.com/doc/ae15038891.html,ername}来取得用户填入的值。

为了让读者更加了解param和paramValues隐含对象的使用,再来看下面这个范例。此范例共有两个文件,分别为给用户输入值用的Param.html和显示出用户所传之值的Param.jsp。

Param.html

CH6 - Param.html

EL隐含对象 param、paramValues

姓名:

密码:

性别:

年龄:

兴趣:

看书

玩游戏

旅游

听音乐

看电视

Param.html的执行结果如图6-1所示。当我们把窗体填好后按下传送钮,它将会把信息传送到Param.jsp做处理。

图6-1 Param.html的执行结果,并填入信息

接下来,Param.jsp接收由Param.html传来的信息,并且将它显示出来:

Param.jsp

姓名: ${https://www.doczj.com/doc/ae15038891.html,ername}

密码: ${param.password}

性别: ${param.sex}

年龄: ${param.old}

兴趣: ${paramValues.habit[0]}

${paramValues.habit[1]}

由Param.html窗体传过来的值,我们必须指定编码方式,才能够确保Param.jsp能够顺利接收中文,传统的做法为:

<%

request.setCharacterEncoding("GB2312");

%>

假若是使用JSTL写法时,必须使用I18N格式处理的标签库,如下:

Param.jsp主要使用EL的隐含对象param来接收数据。但是必须注意:假若要取得多重选择的复选框的值时,必须使用paramV alues,例如:使用paramV alues来取得“兴趣”的值,不过这里笔者最多只显示两笔“兴趣”的值:

${https://www.doczj.com/doc/ae15038891.html,ername}

………

${paramValues.habit[0]}

${paramValues.habit[1]}

有关JSTL的使用,第七章有更加详细的说明。图6-2是Param.jsp的执行结果:

图6-2 Param.jsp的执行结果

6-3-3 其他隐含对象

介绍完上面六个隐含对象后,接下来将介绍最后五个隐含对象。

● cookie

所谓的cookie是一个小小的文本文件,它是以key、value的方式将Session Tracking的内容记录在这个文本文件内,这个文本文件通常存在于浏览器的暂存区内。JSTL并没有提供设定cookie的动作,因为这个动作通常都是后端开发者必须去做的事情,而不是交给前端的开发者。假若我们在cookie中设定一个名称为userCountry的值,那么可以使用${https://www.doczj.com/doc/ae15038891.html,erCountry}来取得它。

● header和headerValues

header储存用户浏览器和服务端用来沟通的数据,当用户要求服务端的网页时,会送出一个记载要求信息的标头文件,例如:用户浏览器的版本、用户计算机所设定的区域等其他相关数据。假若要取得用户浏览器的版本,即${header["User-Agent"]}。另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues来取得这些值。

注意

因为User-Agent中包含“-”这个特殊字符,所以必须使用“[]”,而不能写成

$(https://www.doczj.com/doc/ae15038891.html,er-Agent)。

● initParam

就像其他属性一样,我们可以自行设定web站台的环境参数(Context),当我们想取得这些参数

时,可以使用initParam隐含对象去取得它,例如:当我们在web.xml中设定如下:

那么我们就可以直接使用 ${https://www.doczj.com/doc/ae15038891.html,erid}来取得名称为userid,其值为mike的参数。下面是之前的做法:

String userid = (String)application.getInitParameter("userid");

● pageContext

我们可以使用 ${pageContext}来取得其他有关用户要求或页面的详细信息。表6-5列出了几个比较常用的部分。

表6-5

Expression 说明

${pageContext.request.queryString} 取得请求的参数字符串

${pageContext.request.requestURL} 取得请求的URL,但不包括请求之参数字符串${pageContext.request.contextPath} 服务的web application的名称

${pageContext.request.method} 取得HTTP的方法(GET、POST) ${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0) ${pageContext.request.remoteUser} 取得用户名称

${pageContext.request.remoteAddr } 取得用户的IP地址

${pageContext.session.new} 判断session是否为新的,所谓新的session,表示刚由server产生而client尚未使用

${pageContext.session.id} 取得session的ID

${pageContext.servletContext.serverInfo} 取得主机端的服务信息

我们来看下面这个范例:pageContext.jsp,相信对读者来说能更加了解pageContext的用法。 pageContext.jsp

\${pageContext.request.remoteUser}:${pageContext.request.remoteUser}

\${pageContext.request.remoteAddr }:${pageContext.request.remoteAddr}

\${pageContext.session.new}:${pageContext.session.new}

\${pageContext.session.id}:${pageContext.session.id}

pageContext.jsp的执行结果如图6-3,执行时必须在pageContext.jsp之后加上?test=1234,即PageContext.jsp?test=1234,这样${pageContext.request.queryString}才会显示test=1234。

图6-3 pageContext.jsp的执行结果

注意

因为 ${} 在JSP 2.0中是特殊字符,JSP容器会自动将它当做EL来执行,因此,假若要显

示 ${}时,必须在 $ 前加上 \ ,如:\${ XXXXX }

6-4 EL 算术运算符

EL算术运算符主要有以下五个(见表6-6):

表6-6

算术运算符说明范例结果

+ 加${ 17 + 5 } 22

-减${ 17 - 5 } 12

* 乘${ 17 * 5 } 85

/ 或 div 除${ 17 / 5 } 或 ${ 17 div 5 } 3

% 或 mod 余数${ 17 % 5 } 或 ${ 17 mod 5 } 2

接下来,我们依照下列几种情况,详细说明EL算术运算符的规则:

(1) A {+ ,- , *} B

●假若A和B为null:回传 (Long)0

●假若A或B为BigDecimal时,将另一个也转为BigDecimal,则:

·假若运算符为 + 时:回传 A.add(B)

·假若运算符为-时:回传 A.subtract(B)

·假若运算符为 * 时:回传 A.multiply(B)

●假若A或B为Float、Double或包含 e / E 的字符串时:

·假若A或B为BigInteger时,将另一个转为BigDecimal,然后依照运算符执行运算

·否则,将两者皆转为Double,然后依照运算符执行运算

●假若A或B为BigInteger时,将另一个也转为BigInteger,则:

·假若运算符为 + 时:回传 A.add(B)

·假若运算符为-时:回传 A.subtract(B)

·假若运算符为 * 时:回传 A.multiply(B)

●否则,将A和B皆转为Long,然后依照运算符执行运算

●假若运算结果产生异常时,则错误!

(2) A {/ , div} B

●假若A和B为null:回传 (Long)0

●假若A或B为BigDecimal或BigInteger时,皆转为BigDecimal,然后回传 A.divide(B,

BigDecimal.ROUND_HALF_UP)

●否则,将A和B皆转为Double,然后依照运算符执行运算

●假若运算结果产生异常时,则错误!

(3) A {% , mod} B

●假若A和B为null:回传 (Long)0

●假若A或B为BigDecimal、Float、Double或包含 e / E 的字符串时,皆转为Double,然

后依照运算符执行运算

●假若A或B为BigInteger时,将另一个转为BigInteger,则回传 A.remainder(B)

●否则,将A和B皆转为Long,然后依照运算符执行运算

●假若运算结果产生异常时,则错误!

(4) -A

●假若A为null:回传 (Long)0

●假若A为BigDecimal或BigInteger时,回传 A.negate( )

●假若A为String时:

·假若A包含 e / E 时,将转为Double,然后依照运算符执行运算

·否则,转为Long,然后依照运算符执行运算

·假若运算结果产生异常时,则错误!

●假若A为Byte、Short、Integer、Long、Float或Double

·直接依原本类型执行运算

·假若运算结果产生异常时,则错误!

●否则,错误!

Tomcat上的jsp-examples中,有一个EL算术运算符的范例 basic-arithmetic.jsp。它的程序很简单,所以不在这里多做说明,它的执行结果如图6-4所示。

图6-4 basic-arithmetic.jsp的执行结果

6-5 EL 关系运算符

EL关系运算符有以下六个运算符(见表6-7):

表6-7

关系运算符说明范例结果

= = 或 eq 等于${ 5 = = 5 } 或 ${ 5 eq 5 } true

!= 或 ne 不等于${ 5 != 5 } 或 ${ 5 ne 5 } false

< 或 lt 小于${ 3 < 5 }或 ${ 3 lt 5 } true

> 或 gt 大于${ 3 > 5 }或 ${ 3 gt 5 } false

<= 或 le 小于等于${ 3 <= 5 }或 ${ 3 le 5 } true

>= 或 ge 大于等于${ 3 >= 5 }或 ${ 3 ge 5 } false

注意

在使用EL关系运算符时,不能够写成:

${param.password1} = = ${param.password2}

或者

${ ${param.password1 } = = ${ param.password2 } }

而应写成

${ param.password1 = = param.password2 }

Spring_Security-3.0.1_中文自学教程

Spring Security-3.0.1 中文官方文档(翻译版) 这次发布的Spring Security-3.0.1 是一个bug fix 版,主要是对3.0 中存在的一些问题进行修 正。文档中没有添加新功能的介绍,但是将之前拼写错误的一些类名进行了修正,建议开发者以这一版本的文档为参考。 另:Spring Security 从2010-01-01 以后,版本控制从SVN 换成了GIT,我们在翻译文档的时候,主要是根据SVN 的变化来进行文档内容的比对,这次换成GIT 后,感觉缺少了之前那种文本比对工具,如果有对GIT 熟悉的朋友,还请推荐一下文本比对的工具,谢谢。 序言 I. 入门 1. 介绍 1.1. Spring Security 是什么? 1.2. 历史 1.3. 发行版本号 1.4. 获得Spring Security 1.4.1. 项目模块 1.4.1.1. Core - spring-security-core.jar 1.4.1. 2. Web - spring-security-web.jar 1.4.1.3. Config - spring-security-config.jar 1.4.1.4. LDAP - spring-security-ldap.jar 1.4.1.5. ACL - spring-security-acl.jar 1.4.1.6. CAS - spring-security-cas-client.jar 1.4.1.7. OpenID - spring-security-openid.jar 1.4. 2. 获得源代码 2. Security 命名空间配置 2.1. 介绍 2.1.1. 命名空间的设计 2.2. 开始使用安全命名空间配置 2.2.1. 配置web.xml 2.2.2. 最小 配置 2.2.2.1. auto-config 包含了什么? 2.2.2.2. 表单和基本登录选项 2.2. 3. 使用其他认证提供器 2.2. 3.1. 添加一个密码编码器 2.3. 高级web 特性 2.3.1. Remember-Me 认证 2.3.2. 添加HTTP/HTTPS 信道安全 2.3.3. 会话管理 2.3.3.1. 检测超时 2.3.3.2. 同步会话控制 2.3.3.3. 防止Session 固定攻击 2.3.4. 对OpenID 的支持 2.3.4.1. 属性交换

DC综合全过程及使用的命令

DC综合全过程及使用的命令 DC的初始化文件.synopsys.dc.setup,该文件是隐藏文件,需要用ls –a显示 读取文件 DC支持多种硬件描述格式,.db .v .vhd等 对于dcsh工作模式来说,读取不同的文件格式需要不同的参数 Read -format Verilog[db\vhdl ect] file //dcsh工作模式 对于tcl工作模式来说,读取不同文件格式使用不同的命令。

Read_db file.db //tcl工作模式读取db格式 Read_verilog file.v //tcl工作模式读取verilog格式 Read_vhdl file.v //tcl工作模式读取vhdl格式 读取源程序的另外一种方式是配合使用analyzer命令和elaborate命令; Analyzer是分析HDL的源程序并将分析产生的中间文件存于work(用户可以自己指定)的目录下 Elaborate则在产生的中间文件中生成verilog的模块或者VHDL的实体 缺省情况下,elaborate读取的是work目录中的文件 当读取完所要综合的模块后,需要使用link命令将读到DC存储区中的模块或实体连接起来 注意:如果在使用link命令后,出现unresolved design reference的警告信息,需要重新读取该模块,或者在.synopsys_dc.setup 文件中添加link_library,告诉DC到库中去找这些模块,同时还要注意search_path中的路径是否指向该模块或单元电路所在的目录 Link命令执行后,DC就将模块按照RTL级或者门级的描述将电路连接起来,之后的各种限制条件就可以对该电路的顶层模块施加 DC限制条件施加的对象 针对以下电路成分:输入输出端口、模块、子模块的实例化、单元电路、连线及电路的引脚。在使用DC命令的时候,不要使用模糊的对象,例如,如下面的电路: Set_load 3 Clk 由于在电路中含有名称为CLK的pin、port和net,因此,DC无法知道该处的load是施加在哪个对象上,注意到一般连线会驱动负载,该命令就改为: Set_load 3 [get_nets Clk] TCL mode Set_load 3 find(net,”Clk”)dc_shell mode 路径的划分与合法路径 DC综合的时候是基于路径的优化,对于DC来说,合法的路径必须满足以下条件 路径的起点为输入端口或者是触发器的数据端 路径终点为输出端口或者是触发器的时钟端 DC设定的限制条件的值都是无单位的,这些单位都是由工艺库中给定的 可以用report_lib lib_name来查看所有在工艺库中设定的各个参数的单位 定义电路的工作环境和综合环境

学习SpringMVC系列教程(一)Spring MVC入门

2.1、Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。 另外还有一种基于组件的、事件驱动的Web框架在此就不介绍了,如Tapestry、JSF等。 Spring Web MVC也是服务到工作者模式的实现,但进行可优化。前端控制器是DispatcherServlet;应用控制器其实拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;页面控制器/动作/处理器为Controller接口(仅包含ModelAndView handleRequest(request, response) 方法)的实现(也可以是任何的POJO类);支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常灵活的数据验证、格式化和数据绑定机制;提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。 2.2、Spring Web MVC能帮我们做什么 √让我们能非常简单的设计出干净的Web层和薄薄的Web层; √进行更简洁的Web层的开发;

√天生与Spring框架集成(如IoC容器、AOP等); √提供强大的约定大于配置的契约式编程支持; √能简单的进行Web层的单元测试; √支持灵活的URL到页面控制器的映射; √非常容易与其他视图技术集成,如Velocity、FreeMarker等等,因为模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用); √非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API; √提供一套强大的JSP标签库,简化JSP开发; √支持灵活的本地化、主题等解析; √更加简单的异常处理; √对静态资源的支持; √支持Restful风格。 2.3、Spring Web MVC架构

synopsys DC10.03图文安装配置详解

喾林原创 Synopsys DC10.03安装配置 1、需准备安装包: 1)、Synopsys DC(design compiler)安装包 2)、SCL 安装包(注:此包为synopsys license 管理)。 3)、Synopsys 图像安装工具:installer2.0及以上均可。 (注:图形安装操作简单,不易出错,故采用图形安装界面) 4)、Synopsys license 制作工具( EFA LicGen 0.4b 和Synopsys SSS Feature Keygen )。 2、开始安装DC : 1)、启动图形安装界面 于linux 系统下解压installer2.0包(在windows 下解压文件易损坏)。解压后运行setup.sh 得如图(一)所示界面。 图 (一)

喾林原创点击“start ”有如图(二)所示界面开始安装。在“Source ”栏选中DC 安装文件所在上层目录。“Done ”后“Next ”(此次“Next ”时间较长,耐心等待)。 图 (二) 之后可一直“NEXT ”到如图(三)所示。 图 (三)

在该界面勾选linux选项即可,继续下一步到如图(四)所示。选择安装路径后继续下一步直到结束。 喾林原创 图(四) 至此DC安装结束。 3、开始安装SCL: 此安装与DC安装步骤一直,几乎没有差别,唯一不同的就是安装路径不同。 4、license的制作: License的制作是在windows下制作的。

1)、打开EFA LicGen 0.4b文件夹运行LicGen.exe程序出现如图(五)所示界面。 喾林原创 图(五) 点击“OPEN”选择Synopsys.lpd文件,“打开”。回到图(五)所示界面。勾选上Custon、Use Daemon及最后一个Custon。

Java经典入门教程 强推

java基础教程:Java基础 疯狂代码 https://www.doczj.com/doc/ae15038891.html,/ ?:http:/https://www.doczj.com/doc/ae15038891.html,/BlogDigest/Article75483.html Java简介 Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。另一方面,Java技术也不断更新。 Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1x版发展到1.2版。目前常用的Java平台基于Java1.4,最近版本为Java1.7。 Java分为三个体系JavaSE(Java2 Platform Standard Edition,java平台标准版 ),JavaEE(Java 2 Platform,Enterprise Edition,java平台企业版),JavaME(Java 2 Platform Micro Edition,java平台微型版)。 2009年04月20日,oracle(甲骨文)宣布收购sun。 1991年,Sun公司的James Gosling。Bill Joe等人,为电视、控制考面包机等家用电器的交互操作开发了一个Oak(一种橡树的名字)软件,他是Java的前身。当时,Oak并没有引起人们的注意,直到1994年,随着互联网和3W的飞速发展,他们用Java编制了HotJava浏览器,得到了Sun公司首席执行官Scott McNealy的支持,得以研发和发展。为了促销和法律的原因,1995年Oak更名为Java。Java的得名还有段小插曲呢,一天,Java小组成员正在喝咖啡时,议论给新语言起个什么名字的问题,有人提议用Java(Java是印度尼西亚盛产咖啡的一个岛屿),这个提议得到了其他成员的赞同,于是就采用Java来命名此新语言。很快Java被工业界认可,许多大公司如IBM Microsoft.DEC等购买了Java的使用权,并被美国杂志PC Magazine评为1995年十大优秀科技产品。从此,开始了Java应用的新篇章。 Java的诞生时对传统计算机模式的挑战,对计算机软件开发和软件产业都产生了深远的影响: (1)软件4A目标要求软件能达到任何人在任何地方在任何时间对任何电子设备都能应用。这样能满足软件平台上互相操作,具有可伸缩性和重要性并可即插即用等分布式计算模式的需求。 (2)基于构建开发方法的崛起,引出了CORBA国际标准软件体系结构和多层应用体系框架。在此基础上形成了Java.2平台和.NET平台两大派系,推动了整个IT业的发展。 (3)对软件产业和工业企业都产生了深远的影响,软件从以开发为中心转到了以服务为中心。中间提供商,构件提供商,服务器软件以及咨询服务商出现。企业必须重塑自我,B2B的电子商务将带动整个新经济市场,使企业获得新的价值,新的增长,新的商机,新的管理。 (4)对软件开发带来了新的革命,重视使用第三方构件集成,利用平台的基础设施服务,实现开发各个阶段的重要技术,重视开发团队的组织和文化理念,协作,创作,责任,诚信是人才的基本素质。 总之,目前以看到了Java对信息时代的重要性,未来还会不断发展,Java在应用方面将会有更广阔的前景。 ; JAVA-名字起源 Java自1995诞生,至今已经14年历史。Java的名字的来源:Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。Java语言中的许多库类名称,多与咖啡有关,如JavaBeans(咖啡豆)、NetBeans(网络豆)以及ObjectBeans (对象豆)等等。SUN和JAVA的标识也正是一杯正冒着热气的咖啡。 据James Gosling回忆,最初这个为TV机顶盒所设计的语言在Sun内部一直称为Green项目。我们的新语言需要一个名字。Gosling注意到自己办公室外一棵茂密的橡树Oak,这是一种在硅谷很常见的树。所以他将这个新语言命名为Oak。但Oak是另外一个注册公司的名字。这个名字不可能再用了。 在命名征集会上,大家提出了很多名字。最后按大家的评选次序,将十几个名字排列成表,上报给商标律师。排在第一位的是Silk(丝绸

synopsys简易教程

以.cshrc 及用户根目录下的.synopsys_vss.setup .synopsys_dc.setup 已经配置为前提)1.创建工作目录; 2.编写vhdl源程序; 3.编写.synopsys_vss.setup 和.synopsys_dc.setup文件; 4.编译vhdl源程序; 5.运行vhdldbx 仿真器; 6.运行synopsys的综合器; 7.完成综合后的门级仿真; 以一个一位加法器为例,进行具体说明(用户界面为CDE): 1)创建adder 目录: 可以在资源管理器中完成,也可以在unix环境下完成:mkdir adder; 2)在adder目录下创建work目录; 3)编写.synopsys_vss.setup文件并存入adder目录;.synopsys_vss.setup的内容如下:WORK >DEFAULT DEFAULT:work TIMEBASE = NS 4)编写一位加法器的源程序(adder1.vhd)并存入adder目录下: library ieee; use ieee.std_logic_1164.all; entity adder1 is port(din1 : in std_logic; din2 : in std_logic; cin : in std_logic; dout: out std_logic; cout: out std_logic); end adder1; architecture rtl of adder1 is begin dout <= din1 xor din2 xor cin; cout <= (din1 and din2) or (cin and (din1 xor din2)); end rtl; 5)编写一位加法器的测试基准(即test_bench)并存入adder目录下:(tb_adder1.vhd)library ieee; use ieee.std_logic_1164.all; entity tb_adder1 is end tb_adder1; architecture rtl of tb_adder1 is component adder1 is port(din1 : in std_logic; din2 : in std_logic; cin : in std_logic;

最全最经典spring_mvc教程

spring mvc学习教程(一)-入门实例 引言 1.MVC:Model-View-Control 框架性质的C层要完成的主要工作:封装web请求为一个数据对象、调用业务逻辑层来处理数据对象、返回处理数据结果及相应的视图给用户。 2.简要概述springmvc Spring C 层框架的核心是DispatcherServlet,它的作用是将请求分发给不同的后端处理器,也即使用了一种被称为Front Controller 的模式(后面对此模式有简要说明)。Spring 的C 层框架使用了后端控制器来、映射处理器和视图解析器来共同完成C 层框架的主要工作。并且spring 的C 层框架还真正地把业务层处理的数据结果和相应的视图拼成一个对象,即我们后面会经常用到的ModelAndView 对象。 一、入门实例 1. 搭建环境 在spring的官方API文档中,给出所有包的作用概述,现列举常用的包及相关作用: org.springframework.aop-3.0.5.RELEASE.jar:与Aop编程相关的包 org.springframework.beans-3.0.5.RELEASE.jar:提供了简捷操作bean的接口org.springframework.context-3.0.5.RELEASE.jar:构建在beans包基础上,用来处理资源文件及国际化。 org.springframework.core-3.0.5.RELEASE.jar:spring核心包 org.springframework.web-3.0.5.RELEASE.jar:web核心包,提供了web层接口org.springframework.web.servlet-3.0.5.RELEASE.jar:web 层的一个具体实包,DispatcherServlet也位于此包中。 后文全部在spring3.0 版本中进行,为了方便,建议在搭建环境中导入spring3.0 的所有jar 包(所有jar 包位于dist 目录下)。 2.编写HelloWorld实例 步骤一、建立名为springMVC_01_helloword,并导入上面列出的jar 包。 步骤二、编写web.xml配置文件,代码如下: spring

Spring中文开发详细手册

Spring开发教程 Spring教程 (1) Spring框架概述 (2) Spring是什么? (2) Spring的历史 (3) Spring的使命(Mission Statement) (3) Spring受到的批判 (3) Spring包含的模块 (4) 总结 (5) Spring的IoC容器 (6) 用户注册的例子 (6) 面向接口编程 (7) (用户持久化类)重构第一步——面向接口编程 (8) 重构第二步——工厂(Factory)模式 (9) 重构第三步——工厂(Factory)模式的改进 (9) 重构第四步-IoC容器 (10) 控制反转(IoC)/依赖注入(DI) (10) 什么是控制反转/依赖注入? (10) 依赖注入的三种实现形式 (11) BeanFactory (13) BeanFactory管理Bean(组件)的生命周期 (14) Bean的定义 (15) Bean的之前初始化 (19) Bean的准备就绪(Ready)状态 (21) Bean的销毁 (21) ApplicationContext (21) Spring的AOP框架 (21) Spring的数据层访问 (21) Spring的声明式事务 (21) Spring对其它企业应用支持 (22)

名词解释 容器: 框架: 框架 容器 组件: 服务: Spring框架概述 主要内容:介绍Spring的历史,Spring的概论和它的体系结构,重点阐述它在J2EE中扮演的角色。 目的:让学员全面的了解Spring框架,知道Spring框架所提供的功能,并能将Spring 框架和其它框架(WebWork/Struts、hibernate)区分开来。 Spring是什么? Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 ?目的:解决企业应用开发的复杂性 ?功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 ?范围:任何Java应用 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 ■轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 ■控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 ■面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实

启动dc_shell工具的.synopsys.setup文档

设置启动dc_shell-t工具的 .synopsys.setup文件 Author:周建伟 Company:西安邮电大学SOC组 Date:2013.10.30 摘要:若你在读不进你的库,即在你的运行报告中总是有:warning:Can?t read link_library file …your_library.db?,这边文档会对你有一定的帮助

逻辑综合环境 启动文件 启动文件用来指定综合工具所需要的一些初始化信息。DC使用名为“.synopsys_dc.setup”的启动文件(位置:inst_dir/admin/setup/.synopsys_dc.setup)。启动时,DC会以下述顺序搜索并装载相应目录下的启动文件: DC安装目录($DC_PATH/admin/setup) 用户主目录 工具启动目录 注意:后装载的启动文件中的设置将覆盖先装载的启动文件中的相同设置 本文档重在讲述怎么设置工具启动目录 1、把inst_dir/admin/setup/.synopsys_dc.setup文件拷贝到你DC脚本目录下(也就是和你 脚本在同个目录下) 2、在.synopsys_dc.setup文件的第92行,即set link_force_case “check_reference”命令下 修改内容如下: A、set lib_path /library/smic18/feview~2/version2.2(注:lib_path为你smic18库安装 目录,不同于DC安装目录) B、set link_library [list * $lib_path/STD/Synopsys/smic18_ss.db \ $lib_path/IO/Synopsys/smic18IO_line_ss.db \ $lib_path/IO/Synopsys/smic18IO_stagger_ss.db ] C、set search_path [list . ${synopsys_root}/libraries/syn ${synopsys_root}/dw/syn_ver \ ${synopsys_root}/dw/sim_ver \ $lib_path/STD/Synopsys $lib_path/IO/Synopsys ] D、set target_library [list $lib_path/STD/Synopsys/smic18_ss.db \ $lib_path/IO/Synopsys/smic18IO_line_ss.db \ $lib_path/IO/Synopsys/smic18IO_stagger_ss.db ] E、set synthetic_library “” set command_log_file “./command.log” set designer “zjw” set company “soc of xupt”

Spring框架入门教程

Spring基础入门 一、基础知识 1.依赖注入、控制反转 依赖注入:在运行期,由外部容器动态地将依赖对象注入到组件中 控制反转:应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部窗口负责得。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。 2.spring 的主要特性。 (1)降低组件之间的耦合度,实现软件各层之间的解耦。 (2)可以使用容器提供的众多服务,如:事务管理服务、消息服务、JMS 服务、持久化服务等等。 (3)容器提供单例模式支持,开发人员不再需要自己编写实现代码。 (4)容器提供了AOP 技术,利用它很容易实现如权限拦截,运行期监控等功能。 (5)容器提供的众多辅作类,使用这些类能够加快应用的开发,如:JdbcTemplate、HibernateTemplate. (6)对主流的应用框架提供了集成支持。 3.常用技术 控制反转/依赖注入---面向切入编程---与主流框架的整合、管理--- 二、实例拓展 1.准备搭建环境 dist\spring.jar lib\jakata-commons\commons-loggin.jar 如果使用了切面编程,还需下列jar 文件: lib\aspectj\aspectjweaver.jar 和aspectjrt.jar lib\cglib\cglib-nodep-2.1.3.jar 如果使用了jsr-250 中的注解,还需要下列jar 文件: lib\j2ee\common-annotations.jar 2.搭建并测试环境 建立名为spring_01_base项目,根据需求导入jar包。建立一个Junit测试单元SpringEnvTest,测试代码如下: @Test public void testEnv() { ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); } beans.xml 配置文件在此省略(见下)。运行此测试如无错,则说明环境搭建成功。 说明:beans.xml 可以在类路径下进行配置,也可以在具体的目录下配置。可以是一个配置文件,也可以是多个配置文件组成String 数组传入。 3.实例 作如下准备工作:(1)建立UseDao接口,代码如下: package com.asm.dao; public interface UserDao { void save(); }

Spring基础教程

Spring教程 作者:钱安川(Moxie)

Spring教程 (1) Spring框架概述 (3) Spring是什么? (3) Spring的历史 (4) Spring的使命(Mission Statement) (4) Spring受到的批判 (4) Spring包含的模块 (5) 总结 (6) Spring的IoC容器 (6) 用户注册的例子 (7) 面向接口编程 (8) (用户持久化类)重构第一步——面向接口编程 (8) 重构第二步——工厂(Factory)模式 (9) 重构第三步——工厂(Factory)模式的改进 (10) 重构第四步-IoC容器 (11) 控制反转(IoC)/依赖注入(DI) (11) 什么是控制反转/依赖注入? (11) 依赖注入的三种实现形式 (12) BeanFactory (14) BeanFactory管理Bean(组件)的生命周期 (15) Bean的定义 (16) Bean的之前初始化 (19) Bean的准备就绪(Ready)状态 (21) Bean的销毁 (21) ApplicationContext (21) Spring的AOP框架 (21) Spring的数据层访问..................................................................................... 错误!未定义书签。Spring的声明式事务..................................................................................... 错误!未定义书签。Spring对其它企业应用支持......................................................................... 错误!未定义书签。 名词解释 容器: 框架: 组件: 服务:

Spring教程

Spring教程

Spring教程 (1) Spring框架概述 (3) Spring是什么? (3) Spring的历史 (4) Spring的使命(Mission Statement) (4) Spring受到的批判 (4) Spring包含的模块 (4) 总结 (6) Spring的IoC容器 (6) 用户注册的例子 (7) 面向接口编程 (8) (用户持久化类)重构第一步——面向接口编程 (8) 重构第二步——工厂(Factory)模式 (9) 重构第三步——工厂(Factory)模式的改进 (10) 重构第四步-IoC容器 (10) 控制反转(IoC)/依赖注入(DI) (11) 什么是控制反转/依赖注入? (11) 依赖注入的三种实现形式 (12) BeanFactory (14) BeanFactory管理Bean(组件)的生命周期 (14) Bean的定义 (15) Bean的之前初始化 (18) Bean的准备就绪(Ready)状态 (21) Bean的销毁 (21) ApplicationContext (21) Spring的AOP框架 (21) Spring的数据层访问 (21) Spring的声明式事务 (21) Spring对其它企业应用支持 (21) 名词解释 容器: 框架: 组件: 服务:

Spring框架概述 主要内容:介绍Spring的历史,Spring的概论和它的体系结构,重点阐述它在J2EE中扮演的角色。 目的:让学员全面的了解Spring框架,知道Spring框架所提供的功能,并能将Spring 框架和其它框架(WebWork/Struts、hibernate)区分开来。 Spring是什么? Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 ?目的:解决企业应用开发的复杂性 ?功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 ?范围:任何Java应用 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 ■轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 ■控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 ■面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。 ■容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean 可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。 ■框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。 所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它

Spring3.0 MVC 中文教程

Spring3 MVC - 3到Spring MVC框架简介 Spring3 MVC框架简介 Spring MVC是Spring的框架的Web组件。它提供了丰富的功能,为建设强大的Web应用程序。Spring MVC框架的架构,并在这样的高度可配置的方式,每一块的逻辑和功能设计。此外Spring可以毫不费力地与其他流行的Web框架,如Struts,WebWork的,的Java Server Faces和Tapestry集成。这意味着,你甚至可以告诉Spring使用Web框架中的任何一个。比Spring更不紧耦合的servlet或JSP 向客户端呈现视图。喜欢速度与其他视图技术集成,Freemarker的,Excel或PDF现在也有可能。 Spring3.0 MVC系列 ?第1部分:到Spring 3.0 MVC框架简介 ?第2部分:在Spring 3.0 MVC创建Hello World应用程序 ?第3部分:在Spring 3.0 MVC的形式处理 ?第4部分:Spring3 MVC的Tiles Support与Eclipse中的例子插件教程 ?第5部分:Spring3 MVC的国际化及本地化教程与范例在Eclipse ?第6部分:Spring3 MVC示例教程Spring主题 ?第7部分:创建Spring3 MVC Hibernate 3的示例在Eclipse中使用Maven的 在Spring Web MVC,你可以使用任何对象作为命令或表单支持对象,你不需要实现框架特定的接口或基类。Spring的数据绑定是高度灵活的:例如,将验证错误类型不作为应用系统错误,可以通过评估的不匹配。因此,你不必重复你的业务对象的属性,简单的无类型的字符串,在表单对象仅仅是为了处理无效的意见,或正确转换的字符串。相反,它往往是最好直接绑定到业务对象。 请求处理生命周期 Spring的Web MVC框架是,像许多其他Web MVC框架,要求为导向,围绕一个中心的servlet,它把请求分派给控制器,提供其他功能,有利于开发Web应用而设计的。Spring DispatcherServlet DispatcherServlet是Spring IoC容器完全集成,并允许我们使用的每一个Spring的其他功能。

Spring深入浅出教程

一、理论知识 1.依赖注入、控制反转 依赖注入:在运行期,由外部容器动态地将依赖对象注入到组件中 控制反转:应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部窗口负责得。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。 2.spring 的主要特性。 (1)降低组件之间的耦合度,实现软件各层之间的解耦。 (2)可以使用容器提供的众多服务,如:事务管理服务、消息服务、JMS 服务、持久化服务等等。 (3)容器提供单例模式支持,开发人员不再需要自己编写实现代码。 (4)容器提供了AOP 技术,利用它很容易实现如权限拦截,运行期监控等功能。 (5)容器提供的众多辅作类,使用这些类能够加快应用的开发,如:JdbcTemplate、HibernateTemplate. (6)对主流的应用框架提供了集成支持。 3.常用技术 控制反转/依赖注入---面向切入编程---与主流框架的整合、管理--- 二、基本实例 1.准备搭建环境 dist\spring.jar lib\jakata-commons\commons-loggin.jar 如果使用了切面编程,还需下列jar 文件: lib\aspectj\aspectjweaver.jar 和aspectjrt.jar lib\cglib\cglib-nodep-2.1.3.jar 如果使用了jsr-250 中的注解,还需要下列jar 文件: lib\j2ee\common-annotations.jar 2.搭建并测试环境 建立名为spring_01_base项目,根据需求导入jar包。建立一个Junit测试单元SpringEnvTest,测试代码如下: @Test public void testEnv() { ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); } beans.xml 配置文件在此省略(见下)。运行此测试如无错,则说明环境搭建成功。 说明:beans.xml 可以在类路径下进行配置,也可以在具体的目录下配置。可以是一个配置文件,也可以是多个配置文件组成String 数组传入。 3.实例 作如下准备工作:(1)建立UseDao接口,代码如下: package com.asm.dao; public interface UserDao { void save(); } (2)建立UserDao接口的实现类,UserDaoImpl package com.asm.dao.impl;

DC基本问题

1.14. translation这一步是用什么DC命令来实现的? 我们知道,DC综合过程包括3个步骤:translation + logic optimization + mapping transition 对应命令为 read_verilog(read_vhdl等) logic optimization 和 mapping 对应于 compile 1.15. 逻辑优化和映射(logic optimization + mapping)又是用什么DC命令来实现的? logic optimization 和 mapping 均在compile命令完成,但是可以指定使用特殊的优化方法:structural 和flatten,建议大家在synthesis时同时生成structural 和flatten格式的netlist,然后打开看看到底有什么不同之处。 1.17. 基于路径的综合的意思是什么? 路径(path),是DC中的一个重要概念。它包括4种路径方式: 1 input到FF的D端。 2 FF的clk到另一个FF的D端。 3 FF的clk到输出Q。 4 input到output。 基于路径的综合就是对这四种路径进行加约束,综合电路以满足这些约束条件。 1.24 reference 是指什么? 和cell 有什么区别? 当存在一个模块被多次例化,那么该模块就称为reference 1.25 如何读入一个design? 使用analyze + elaborate 或者 read_verilog、read -f verilog、 read_vhdl、read_file 命令。 1.26 analyze+ elaborate 和 read 命令有什么区别? read_file 是可以读取任何synopsys支持格式的;analyze和eloborate 只支持verilog和VHDL两个格式,但是他们支持在中间过程中加入参数而且以便以后可以加快读取过程。

Encounter使用入门教程

Encounter使用入门教程 本教程介绍一下自动布局布线工具Encounter的使用知识,开始以一个简单的十进制计数器版图的自动实现为例子,之后介绍包含block模块的复杂的版图自动实现。 在Designer Compiler使用入门教程中,笔者设计了一个十进制计数器,并经过Design Compiler对其进行综合后获得了门级综合网表文件counter.sv以及约束文件counter.sdc,根据这两个文件,我们就可以使用SOC Encounter实现十进制计数器的物理版图设计了。首先,我们要准备使用Encounter进行版图自动设计时所需要的数据: 时序库文件:fast.lib,slow.lib,tpz973gwc.lib,tpz973gbc.lib 物理库文件:tsmc18_6lm_cic.lef,tpz973g_5lm_cic.lef,tsmc18_6lm_antenna_cic.lef 门级网表文件:pad_counter.sv 时序约束文件:pad_counter.sdc IO位置放置文件:pad_counter.io //在设计导入Encounter中指定PAD的放置位置文件,不是必须文件 还有其它一些文件在后面用到时进行介绍。 一、网表中添加PAD、编写IO Assignment File 这里,pad_counter.sv是加入PAD后综合得到的门级网表。工程项目中设计制作完成后的芯片要进行封装,PAD就是芯片在封装时连接封装引线的地方。一般信号输入/输出PAD即I/O PAD要在综合前添加进入网表中,电源电压PAD 可以在综合时添加也可以在综合后添加。接下来就先介绍一下如何在网表中加入PAD,其实给网表加入PAD就是一般的module例化,和Verilog中一般的module 模块例化是一样的。 这里介绍在综合时给设计中加入I/O PAD。十进制计数器的Verilog源程序如下:module Cnt10(reset_n,clk,in_ena,cnt,carry_ena); input clk; input reset_n; input in_ena; output [3:0] cnt; output carry_ena; reg [3:0] cnt; reg carry_ena; always @(posedge clk or negedge reset_n) begin if(!reset_n) cnt<=4'b0; else if(in_ena && cnt==4'd10)

相关主题
文本预览
相关文档 最新文档