首先了解下OGNL的概念

OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。

此外,还得先需弄懂OGNL的一些知识:

1.OGNL表达式的计算是围绕OGNL上下文进行的。
OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类表示。它里面可以存放很多个JavaBean对象。它有一个上下文根对象。
上下文中的根对象可以直接使用名来访问或直接使用它的属性名访问它的属性值。否则要加前缀“#key”。
2.Struts2的标签库都是使用OGNL表达式来访问ActionContext中的对象数据的。如:<s:propertyvalue="xxx"/>。
3.Struts2将ActionContext设置为OGNL上下文,并将值栈作为OGNL的根对象放置到ActionContext中。
4.值栈(ValueStack) :
可以在值栈中放入、删除、查询对象。访问值栈中的对象不用“#”。
Struts2总是把当前Action实例放置在栈顶。所以在OGNL中引用Action中的属性也可以省略“#”。
 
5.调用ActionContext的put(key,value)放入的数据,需要使用#访问。

OGNL中重要的3个符号:#、%、$:

#、%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分,需要时间的积累才渐渐弄清楚……
1.#符号

#符号的用途一般有三种。

—    访问非根对象属性,例如#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute("msg") 。

—    用于过滤和投影(projecting)集合,如persons.{?#this.age>25},persons.{?#this.name=='pla1'}.{age}[0]。

—    用来构造Map,例如示例中的#{'foo1':'bar1', 'foo2':'bar2'}。

2.%符号

%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值,这个类似js中的eval,很暴力。

3.$符号

$符号主要有两个方面的用途。

—    在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。

—    在Struts 2框架的配置文件中引用OGNL表达式,例如:

  1. <validators>
  2. <fieldname="intb">
  3. <field-validatortype="int">
  4. <paramname="min">10</param>
  5. <paramname="max">100</param>
  6. <message>BAction-test校验:数字必须为${min}为${max}之间!</message>
  7. </field-validator>
  8. </field>
  9. </validators>

下面通过代码对OGNL有更深的了解:

action类OgnlAction.java:
  1. package com.tjcyjd.test.action;
  2. import java.util.Date;
  3. import java.util.LinkedList;
  4. import java.util.List;
  5. import javax.servlet.http.HttpServletRequest;
  6. import org.apache.struts2.ServletActionContext;
  7. import org.apache.struts2.convention.annotation.Action;
  8. import org.apache.struts2.convention.annotation.Namespace;
  9. import org.apache.struts2.convention.annotation.ParentPackage;
  10. import org.apache.struts2.convention.annotation.Result;
  11. import org.apache.struts2.convention.annotation.Results;
  12. import org.springframework.stereotype.Controller;
  13. import com.opensymphony.xwork2.ActionContext;
  14. import com.opensymphony.xwork2.ActionSupport;
  15. @Controller
  16. @Namespace("/test")
  17. @ParentPackage("struts-default")
  18. @Results( { @Result(name = "success", location = "/other_test/showognl.jsp"),
  19. @Result(name = "fail", location = "/bbs/admin_login.jsp"),
  20. @Result(name = "input", location = "/bbs/admin_login.jsp") })
  21. publicclass OgnlAction extends ActionSupport {
  22. privatestaticfinallong serialVersionUID = -1494290883433357310L;
  23. private List<Person> persons;
  24. @Action("ognlTest")
  25. public String ognlTest() throws Exception {
  26. // 获得ActionContext实例,以便访问Servlet API
  27. ActionContext ctx = ActionContext.getContext();
  28. // 存入application
  29. ctx.getApplication().put("msg", "application信息");
  30. // 保存session
  31. ctx.getSession().put("msg", "seesion信息");
  32. // 保存request信息
  33. HttpServletRequest request = ServletActionContext.getRequest();
  34. request.setAttribute("msg", "request信息");
  35. // 为persons赋值
  36. persons = new LinkedList<Person>();
  37. Person person1 = new Person();
  38. person1.setName("pla1");
  39. person1.setAge(26);
  40. person1.setBirthday(new Date());
  41. persons.add(person1);
  42. Person person2 = new Person();
  43. person2.setName("pla2");
  44. person2.setAge(36);
  45. person2.setBirthday(new Date());
  46. persons.add(person2);
  47. Person person3 = new Person();
  48. person3.setName("pla3");
  49. person3.setAge(16);
  50. person3.setBirthday(new Date());
  51. persons.add(person3);
  52. return SUCCESS;
  53. }
  54. public List<Person> getPersons() {
  55. return persons;
  56. }
  57. publicvoid setPersons(List<Person> persons) {
  58. this.persons = persons;
  59. }
  60. }

jsp页面showognl.jsp:

  1. <%@ page language="java"contentType="text/html; charset=utf-8"pageEncoding="utf-8" %>
  2. <%@ taglib prefix="s"uri="/struts-tags" %>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/ xhtml1/DTD/xhtml1-transitional.dtd">
  4. <htmlxmlns="http://www.w3.org/1999/xhtml">
  5. <head>
  6. <title>Struts2 OGNL 演示</title>
  7. </head>
  8. <body>
  9. <h3>访问OGNL上下文和Action上下文</h3>
  10. <!-使用OGNL访问属性值-->
  11. <p>parameters: <s:propertyvalue="#parameters.msg"/></p>
  12. <p>request.msg: <s:propertyvalue="#request.msg"/></p>
  13. <p>session.msg: <s:propertyvalue="#session.msg"/></p>
  14. <p>application.msg: <s:propertyvalue="#application.msg"/></p>
  15. <p>attr.msg: <s:propertyvalue="#attr.msg"/></p>
  16. <hr/>
  17. <h3>用于过滤和投影(projecting)集合</h3>
  18. <p>年龄大于20</p>
  19. <ul>
  20. <!-判断年龄-->
  21. <s:iteratorvalue="persons.{?#this.age>20}">
  22. <li><s:propertyvalue="name"/> - 年龄:<s:propertyvalue="age"/></li>
  23. </s:iterator>
  24. </ul>
  25. <p>姓名为pla1的年龄: <s:propertyvalue="persons.{?#this.name=='pla1'}.{age}[0]"/></p>
  26. <hr/>
  27. <h3>构造Map</h3>
  28. <s:setname="foobar"value="#{'foo1':'bar1', 'foo2':'bar2'}"/>
  29. <p>The value of key "foo1" is <s:propertyvalue="#foobar['foo1']"/></p>
  30. <hr/>
  31. <h4>%符号的用法</h4>
  32. <s:setname="foobar"value="#{'foo1':'bar1', 'foo2':'bar2'}"/>
  33. <p>The value of key "foo1" is <s:propertyvalue="#foobar['foo1']"/></p>
  34. <p>不使用%:<s:urlvalue="#foobar['foo1']"/></p>
  35. <p>使用%:<s:urlvalue="%{#foobar['foo1']}"/></p>
  36. <hr/>
  37. <%
  38. request.setAttribute("req", "request scope");
  39. request.getSession().setAttribute("sess", "session scope");
  40. request.getSession().getServletContext().setAttribute("app",
  41. "aplication scope");
  42. %>
  43. 1.通过ognl表达式获取 属性范围中的值
  44. <br>
  45. <s:propertyvalue="#request.req"/>
  46. <br/>
  47. <s:propertyvalue="#session.sess"/>
  48. <br/>
  49. <s:propertyvalue="#application.app"/>
  50. <br/>
  51. <hr>
  52. 2.通过<spanstyle="background-color: #fafafa;">ognl表达式创建list 集合 ,并且遍历出集合中的值
  53. <br>
  54. <s:setname="list"value="{'eeeee','ddddd','ccccc','bbbbb','aaaaa'}"></s:set>
  55. <s:iteratorvalue="#list"var="o">
  56. <!-- ${o }<br/> -->
  57. <s:property/>
  58. <br/>
  59. </s:iterator>
  60. <br/>
  61. <hr>
  62. 3.通过ognl表达式创建Map 集合 ,并且遍历出集合中的值
  63. <br>
  64. <s:setname="map"
  65. value="#{'1':'eeeee','2':'ddddd','3':'ccccc','4':'bbbbb','5':'aaaaa'}"></s:set>
  66. <s:iteratorvalue="#map"var="o">
  67. <!--      ${o.key }->${o.value }<br/>   -->
  68. <!-- <s:property value="#o.key"/>-><s:property value="#o.value"/><br/>   -->
  69. <s:propertyvalue="key"/>-><s:propertyvalue="value"/>
  70. <br/>
  71. </s:iterator>
  72. <br/>
  73. <hr>
  74. 4.通过ognl表达式 进行逻辑判断
  75. <br>
  76. <s:iftest="'aa' in {'aaa','bbb'}">
  77. aa 在 集合{'aaa','bbb'}中;
  78. </s:if>
  79. <s:else>
  80. aa 不在 集合{'aaa','bbb'}中;
  81. </s:else>
  82. <br/>
  83. <s:iftest="#request.req not in #list">
  84. 不 在 集合list中;
  85. </s:if>
  86. <s:else>
  87. 在 集合list中;
  88. </s:else>
  89. <br/>
  90. <hr>
  91. 5.通过ognl表达式 的投影功能进行数据筛选
  92. <br>
  93. <s:setname="list1"value="{1,2,3,4,5}"></s:set>
  94. <s:iteratorvalue="#list1.{?#this>2}"var="o">
  95. <!-- #list.{?#this>2}:在list1集合迭代的时候,从中筛选出当前迭代对象>2的集合进行显示 -->
  96. ${o }<br/>
  97. </s:iterator>
  98. <br/>
  99. <hr>
  100. 6.通过ognl表达式 访问某个类的静态方法和值
  101. <br>
  102. <s:propertyvalue="@java.lang.Math@floor(32.56)"/>
  103. <s:propertyvalue="@com.rao.struts2.action.OGNL1Action@aa"/>
  104. <br/>
  105. <br/>
  106. <hr>
  107. 7.ognl表达式 迭代标签 详细
  108. <br>
  109. <s:setname="list2"
  110. value="{'aa','bb','cc','dd','ee','ff','gg','hh','ii','jj'}"></s:set>
  111. <tableborder="1">
  112. <tr>
  113. <td>索引 </td>
  114. <td>值</td>
  115. <td>奇?</td>
  116. <td> 偶?</td>
  117. <td>首?</td>
  118. <td> 尾?</td>
  119. <td>当前迭代数量</td>
  120. </tr>
  121. <s:iteratorvalue="#list2"var="o"status="s">
  122. <trbgcolor="<s:if test="#s.even">pink</s:if>">
  123. <td>
  124. <s:propertyvalue="#s.getIndex()"/>
  125. </td>
  126. <td>
  127. <s:property/>
  128. </td>
  129. <td>
  130. <s:iftest="#s.odd">Y</s:if>
  131. <s:else>N</s:else>
  132. </td>
  133. <td>
  134. <s:iftest="#s.even">Y</s:if>
  135. <s:else>N</s:else>
  136. </td>
  137. <td>
  138. <s:iftest="#s.first">Y</s:if>
  139. <s:else>N</s:else>
  140. </td>
  141. <td>
  142. <s:iftest="#s.isLast()">Y</s:if>
  143. <s:else>N</s:else>
  144. </td>
  145. <td>
  146. <s:propertyvalue="#s.getCount()"/>
  147. </td>
  148. </tr>
  149. </s:iterator>
  150. </table>
  151. <br>
  152. <hr>
  153. 8.ognl表达式:  if/else if/else 详细<br>
  154. <% request.setAttribute("aa",0); %>
  155. <s:iftest="#request.aa>=0 && #request.aa<=4">
  156. 在0-4之间;
  157. </s:if>
  158. <s:elseiftest="#request.aa>=4 && #request.aa<=8">
  159. 在4-8之间;
  160. </s:elseif>
  161. <s:else>
  162. 大于8;
  163. </s:else>
  164. <br>
  165. <hr>
  166. 9.ognl表达式: url 详细<br>
  167. <% request.setAttribute("aa","sss"); %>
  168. <s:urlaction="testAction"namespace="/aa/bb">
  169. <s:paramname="aa"value="#request.aa"></s:param>
  170. <s:paramname="id">100</s:param>
  171. </s:url>
  172. <br/>
  173. <s:setname="myurl"value="'http://www.baidu.com'"></s:set>
  174. value以字符处理:   <s:urlvalue="#myurl"></s:url><br>
  175. value明确指定以ognl表达式处理:    <s:urlvalue="%{#myurl}"></s:url>
  176. <br>
  177. <hr>
  178. 10.ognl表达式: checkboxlist 详细<br>
  179. 1> .list 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
  180. name:checkboxlist的名字<br>
  181. list:checkboxlist要显示的列表<br>
  182. value:checkboxlist默认被选中的选项,checkedchecked=checked<br>
  183. <s:checkboxlistname="checkbox1"list="{'上网','看书','爬山','游泳','唱歌'}"value="{'上网','看书'}"></s:checkboxlist>
  184. <br>
  185. 以上生成代码:<br>
  186. <xmp>
  187. <inputtype="checkbox"name="checkbox1"value="上网"id="checkbox1-1"checked="checked"/>
  188. <labelfor="checkbox1-1"class="checkboxLabel">上网</label>
  189. <inputtype="checkbox"name="checkbox1"value="看书"id="checkbox1-2"checked="checked"/>
  190. <labelfor="checkbox1-2"class="checkboxLabel">看书</label>
  191. <inputtype="checkbox"name="checkbox1"value="爬山"id="checkbox1-3"/>
  192. <labelfor="checkbox1-3"class="checkboxLabel">爬山</label>
  193. <inputtype="checkbox"name="checkbox1"value="游泳"id="checkbox1-4"/>
  194. <labelfor="checkbox1-4"class="checkboxLabel">游泳</label>
  195. <inputtype="checkbox"name="checkbox1"value="唱歌"id="checkbox1-5"/>
  196. <labelfor="checkbox1-5"class="checkboxLabel">唱歌</label>"
  197. </xmp>
  198. 2> .Map 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
  199. name:checkboxlist的名字<br>
  200. list:checkboxlist要显示的列表<br>
  201. listKey:checkbox 的value的值<br>
  202. listValue:checkbox 的lablel(显示的值)<br>
  203. value:checkboxlist默认被选中的选项,checkedchecked=checked<br>
  204. <s:checkboxlistname="checkbox2"list="#{1:'上网',2:'看书',3:'爬山',4:'游泳',5:'唱歌'}"listKey="key"listValue="value"value="{1,2,5}"></s:checkboxlist>
  205. <br>
  206. 以上生成代码:<br>
  207. <xmp>
  208. <inputtype="checkbox"name="checkbox2"value="1"id="checkbox2-1"checked="checked"/>
  209. <labelfor="checkbox2-1"class="checkboxLabel">上网</label>
  210. <inputtype="checkbox"name="checkbox2"value="2"id="checkbox2-2"checked="checked"/>
  211. <labelfor="checkbox2-2"class="checkboxLabel">看书</label>
  212. <inputtype="checkbox"name="checkbox2"value="3"id="checkbox2-3"/>
  213. <labelfor="checkbox2-3"class="checkboxLabel">爬山</label>
  214. <inputtype="checkbox"name="checkbox2"value="4"id="checkbox2-4"/>
  215. <labelfor="checkbox2-4"class="checkboxLabel">游泳</label>
  216. <inputtype="checkbox"name="checkbox2"value="5"id="checkbox2-5"checked="checked"/>
  217. <labelfor="checkbox2-5"class="checkboxLabel">唱歌</label>
  218. </xmp>
  219. <hr>
  220. </body>
  221. </html>

总结OGNL的使用方法:

访问属性

名字属性获取:<s:property value="user.username"/><br>

地址属性获取:<s:property value="user.address.addr"/><br>

访问方法

调用值栈中对象的普通方法:<s:property value="user.get()"/><br>

访问静态属性和方法

调用Action中的静态方法:<s:property value="@struts.action.LoginAction@get()"/>

调用JDK中的类的静态方法:<s:property value="@java.lang.Math@floor(44.56)"/><br>

调用JDK中的类的静态方法(同上):<s:property value="@@floor(44.56)"/><br>

调用JDK中的类的静态方法:<s:property value="@java.util.Calendar@getInstance()"/><br>

调用普通类中的静态属性:<s:property value="@struts.vo.Address@TIPS"/><br>

访问构造方法

调用普通类的构造方法:<s:property value="new struts.vo.Student('李晓红' , '美女' , 3 , 25).username"/>

1.5. 访问数组

获取List:<s:property value="testList"/><br>

获取List中的某一个元素(可以使用类似于数组中的下标获取List中的内容):

<s:property value="testList[0]"/><br>

获取Set:<s:property value="testSet"/><br>

获取Set中的某一个元素(Set由于没有顺序,所以不能使用下标获取数据):

<s:property value="testSet[0]"/><br> ×

获取Map:<s:property value="testMap"/><br>

获取Map中所有的键:<s:property value="testMap.keys"/><br>

获取Map中所有的值:<s:property value="testMap.values"/><br>

获取Map中的某一个元素(可以使用类似于数组中的下标获取List中的内容):

<s:property value="testMap['m1']"/><br>

获取List的大小:<s:property value="testSet.size"/><br>

访问集合 – 投影、选择(? ^ $)

利用选择获取List中成绩及格的对象:<s:property value="stus.{?#this.grade>=60}"/><br>

利用选择获取List中成绩及格的对象的username:

<s:property value="stus.{?#this.grade>=60}.{username}"/><br>

利用选择获取List中成绩及格的第一个对象的username:

<s:property value="stus.{?#this.grade>=60}.{username}[0]"/><br>

利用选择获取List中成绩及格的第一个对象的username:

<s:property value="stus.{^#this.grade>=60}.{username}"/><br>

利用选择获取List中成绩及格的最后一个对象的username:

<s:property value="stus.{$#this.grade>=60}.{username}"/><br>

利用选择获取List中成绩及格的第一个对象然后求大小:

<s:property value="stus.{^#this.grade>=600}.{username}.size"/><br>

集合的伪属性

OGNL能够引用集合的一些特殊的属性,这些属性并不是JavaBeans模式,例如size(),length()等等. 当表达式引用这些属性时,OGNL会调用相应的方法,这就是伪属性.

集合

伪属性

Collection(inherited by Map, List & Set)

size ,isEmpty

List

iterator

Map

keys , values

Set

iterator

Iterator

next , hasNext

Enumeration

next , hasNext , nextElement , hasMoreElements

Lambda   :[…]

格式::[…]

使用Lambda表达式计算阶乘:

<s:property value="#f = :[#this==1?1:#this*#f(#this-1)] , #f(4)"/><br>

OGNL中#的使用

#可以取出堆栈上下文中的存放的对象.

名称

作用

例子

parameters

包含当前HTTP请求参数的Map

#parameters.id[0]作用相当于

request.getParameter("id")

request

包含当前HttpServletRequest的属性(attribute)的Map

#request.userName相当于

request.getAttribute("userName")

session

包含当前HttpSession的属性(attribute)的Map

#session.userName相当于

session.getAttribute("userName")

application

包含当前应用的ServletContext的属性(attribute)的Map

#application.userName相当于

application.getAttribute("userName")

attr

用于按request > session > application顺序访问其属性(attribute)

 

获取Paraments对象的属性:<s:property value="#parameters.username"/>

OGNL中%的使用

用%{}可以取出存在值堆栈中的Action对象,直接调用它的方法.

例如你的Action如果继承了ActionSupport .那么在页面标签中,用%{getText('key')}的方式可以拿出国际化信息.

OGNL中$的使用

“$”有两个主要的用途

l         用于在国际化资源文件中,引用OGNL表达式

l         在Struts 2配置文件中,引用OGNL表达式

值栈

ValueStack对象。这个对象贯穿整个Action的生命周期(每个Action类的对象实例会拥有一个ValueStack对象)。当 Struts 2接收到一个.action的请求后,会先建立Action类的对象实例,但并不会调用Action方法,而是先将Action类的相应属性放到 ValueStack对象的顶层节点(ValueStack对象相当于一个栈)。

在Action中获得ValueStack对象:ActionContext.getContext().getValueStack()

l         Top语法

使用Top获取值栈中的第二个对象:<s:property value="[1].top.对象"/>

l         N语法

使用N获取值栈中的第二个对象:<s:property value="[1].对象"/>

l         @语法

调用action中的静态方法:<s:property value="@vs1@静态方法"/> vs:值栈 1:表示第一个。

struts OGNL详解的更多相关文章

  1. Struts功能详解——ActionMapping对象

    Struts功能详解——ActionMapping对象 ActionMapping描述了struts中用户请求路径和Action的映射关系,在struts中每个ActionMapping都是通过pat ...

  2. java框架篇---struts之OGNL详解

    OGNL(Object Graph Navigation Language),是一种表达式语言.使用这种表达式语言,你可以通过某种表达式语法,存取Java对象树中的任意属性.调用Java对象树的方法. ...

  3. OGNL详解

    A.什么是OGNL? 全称叫ObjectGraphic Navigation Language(对象图导航语言),它是struts2框架里面的第三方语言(即可以再别的地方用,struts2只是拿过来了 ...

  4. struts2之配置文件struts.xml详解

    struts配置文件 struts.xml配置参数详解 struts.xml中很大一部分配置默认配置就好了 但是有些还是需要做了解  以便于理解 和修改 <?xml version=" ...

  5. Struts2初学 struts.xml详解 一

    一.简介    Struts 2是一个MVC框架,以WebWork设计思想为核心,吸收了Struts 1的部分优点 二.详解    首先让我们看一下一个简单的struts.xml文件的结构  < ...

  6. Strust OGNL详解

    首先了解下OGNL的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的 ...

  7. struts2中的OGNL详解

    先了解一下OGNL的概念 OGNL的全名称Object Graph Navigation Language.全称为对象图导航语言,是一种表达式语言.使用这种表达式语言,你可以通过某种表达式语法,存取J ...

  8. Struts2_ValueStack,OGNL详解(转)

    原文地址:http://blog.csdn.net/wyply115/article/details/8257140 一.OGNL表达式 1.ognl是struts2中使用的一种表达式语言,可用于js ...

  9. Struts基础详解

    1.web.xml配置: <filter> <filter-name>Struts2</filter-name> <filter-class> org. ...

随机推荐

  1. 在vue-cli中引入外部插件

    一.可以用npm下载的 现在以jquery为例子: 1 先在package.json中的dependencies中写入“jquery”:“^3.2.1”(jquery版本) 2 在npm中搜索jque ...

  2. 利用Python实现 队列的算法

    以下内容都是来自“悟空“大神的讲解,听他的视频课,利用Python实现堆栈的算法,自己做了一些小总结,可能会存在自己理解的一些误区, 1.栈的实现 队列的特征是先进先出,同我们生活中的队列具有相同的特 ...

  3. 【BZOJ1060】[ZJOI2007] 时态同步(树形DP)

    点此看题面 大致题意: 给你一棵带权树,每次使用道具可以将某条边的边权加\(1\),问你至少需要使用多少次道具,才能使每个叶子节点到根节点的距离相等. 贪心的思想 首先,我们应该先有一个贪心的思想. ...

  4. Java Web报错:getOutputStream() has already been called for this response解决方案

    今天做了个导出excel表的功能.大概代码如下: ouputStream = response.getOutputStream(); wb.write(ouputStream); ouputStrea ...

  5. 回归树的原理及Python实现

    大名鼎鼎的 GBDT 算法就是用回归树组合而成的.本文就回归树的基本原理进行讲解,并手把手.肩并肩地带您实现这一算法. 1. 原理篇 1.1 最简单的模型 如果预测某个连续变量的大小,最简单的模型之一 ...

  6. Debug与Release版本的区别详解

    原文链接 Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动.如果我们愿意,我们完全可以把Debug和Release的行为完全颠 ...

  7. Drupal常用的模块

    CCK (Content Construction Kit ) : 添加字段模块 Views:生成列表 Tinymce:(Wysiwyg Editor) 常用的编辑器之一 Ajax Form Buil ...

  8. 【数学 随机 技巧】cf364D. Ghd

    随机化选讲的例题 John Doe offered his sister Jane Doe find the gcd of some set of numbers a. Gcd is a positi ...

  9. 第五篇:selenium调用IE问题(Protected Mode settings are not the same for all zones)

    代码信息: driver = webdriver.Ie()driver.get('http://www.baidu.com') 问题描述: raise exception_class(message, ...

  10. HTTP-点开浏览器输入网址背后发生的那点事

    前言 Internet最早来源于美国国防部ARPANet,1969年投入运行,到现在已有很长一段路了,各位想要了解发展史可以百度下,这里就不多说了. 现如今当我们想要获取一些资料,首先是打开某个浏览器 ...