完整的WebApplication JSF EJB JPA JAAS –第1部分

這篇文章將是迄今為止我博客中最大的一篇文章! 我們將看到完整的Web應用程序。 最新的技術將完成此工作(直到今天),但是我將給出一些提示以顯示如何使本文適用于較舊的技術。

在本文的結尾,您將找到要下載的源代碼。 您可以根據需要使用它。 只需轉到最后一頁并進行下載。 \ o /

如果您下載了代碼但不了解某些內容,則在本文中,我將解釋代碼中找到的每個詳細信息。 只需閱讀此帖子中想要的主題即可。

我將在下面列出我將在本文中使用的技術:

  • JSF 2.0 Mojarra –使用ManagedBeans作為RequestScope和SessionScope。
  • 消息國際化–包含我們系統所有消息的文件; 輕松翻譯您的頁面。
  • 將作為庫導入的默認CSS文件。
  • EJB 3 –我們的DAO和Fa?ades將是@Stateless。
  • 通用DAO –通用DAO,它將執行CRUD動作以使我們的生活更輕松。
  • JPA 2 –在數據庫中映射我們的類
  • JAAS –控制登錄和用戶對頁面的訪問。
  • MVC –我將使用此模式進行少量修改。
  • Postgres作為數據庫,但我還將展示如何將您的應用設置為MySQL。

我不會使用TDD – JUnit測試我們的View / Model / Classes,但是在下面的鏈接中,您可以看到一種使用JUnit測試您的ManagedBeans的技術: 具有HSQLDB,JPA和Hibernate的JUnit 。

我們將使用的工具:

  • Eclipse Indigo – http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/indigor
  • 我將使用JBoss 7(此博客的某些讀者問我了)– http://download.jboss.org/jbossas/7.0/jboss-as-7.0.2.Final/jboss-as-7.0.2.Final。 .zip的版本是: JBoss 7 Everything(未通過Java EE6認證)
  • Indigo JBoss工具(里程碑版本)– https://www.jboss.org/tools/download/dev.html如果您不知道如何在本文中安裝JBoss工具,我將展示如何( 使用JAAS進行用戶登錄驗證和JSF )。 請注意,在這篇文章中,我將展示如何安裝到另一個eclipse版本,但是區別在于URL。 使用此URL代替上面鏈接中使用的URL: http : //download.jboss.org/jbosstools/updates/development/indigo/
  • 我將使用Postgres數據庫,但您可以使用所需的任何數據庫。 您只需要下載數據庫和JDBC驅動程序。 在這里,您可以下載最新的Postgres JDBC: http : //jdbc.postgresql.org/download.html ; 到目前為止,最新版本是4: http : //jdbc.postgresql.org/download/postgresql-9.1-901.jdbc4.jar 。

這篇文章將有幾頁; 這第一頁只是顯示今天帖子的技術細節。

我不會編寫代碼來連接模型/ DAO,只是為了節省空間。 請記住,您應該始終對接口進行編碼( 設計模式-策略 )

在繼續之前,請確保以正確的順序安裝了JBoss工具和JBoss 7。

商業模式

讓我們創建將容納我們的系統業務的EJB項目。

點擊“ 完成 ”按鈕。

讓我們創建將在“ com”包中的User和Dog類。 它將具有以下代碼:

package com.model;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.Table;@Entity
@Table(name = 'USERS')
@NamedQuery(name='User.findUserByEmail', query='select u from User u where u.email = :email')
public class User {public static final String FIND_BY_EMAIL = 'User.findUserByEmail';@Id@GeneratedValue(strategy=GenerationType.AUTO)private int id;@Column(unique = true)private String email;private String password;private String name;private String role;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getRole() {return role;}public void setRole(String role) {this.role = role;}@Overridepublic int hashCode() {return getId();}@Overridepublic boolean equals(Object obj) {if(obj instanceof User){User user = (User) obj;return user.getEmail().equals(getEmail());}return false;}
}
package com.model;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;@Entity
@Table(name = 'DOGS')
public class Dog {@Id@GeneratedValue(strategy = GenerationType.AUTO)private int id;private String name;private double weight;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getWeight() {return weight;}public void setWeight(double weight) {this.weight = weight;}@Overridepublic int hashCode() {return getId();}@Overridepublic boolean equals(Object obj) {if(obj instanceof Dog){Dog dog = (Dog) obj;return dog.getId() == getId();}return false;}
}

關于上面的代碼:

  • User類具有一個名為“ role”的字段,該字段將存儲用戶的角色級別。 我將其創建為一個字段,并將所有數據保留在同一表中,以便于理解。 如果您想要有關JAAS的更多詳細信息,可以在這篇文章中: 使用JAAS和JSF進行用戶登錄驗證 。
  • 我將讓JPA處理表ID代。 如果要更改ID的創建方式,可以查看以下文章以了解如何執行: JPA SequenceGenerator , JPA TableGenerator –簡單Primay密鑰 。
  • 該電子郵件將是唯一的; 這將是登錄標識符。
  • 注意,要聲明為Entity的類,只需要以下注釋:“ @Entity”和“ @Id”。 該類不需要實現Serializable接口。

商業– DAO

我將使用通用DAO進行基本的CRUD操作,而其他兩個DAO:一個用于User,另一個用于Dog。 理解它的用法將非常容易:

package com.dao;import java.util.List;
import java.util.Map;
import java.util.Map.Entry;import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaQuery;public abstract class GenericDAO<T> {private final static String UNIT_NAME = 'CrudPU';@PersistenceContext(unitName = UNIT_NAME)private EntityManager em;private Class<T> entityClass;public GenericDAO(Class<T> entityClass) {this.entityClass = entityClass;}public void save(T entity) {em.persist(entity);}public void delete(T entity) {T entityToBeRemoved = em.merge(entity);em.remove(entityToBeRemoved);}public T update(T entity) {return em.merge(entity);}public T find(int entityID) {return em.find(entityClass, entityID);}// Using the unchecked because JPA does not have a// em.getCriteriaBuilder().createQuery()<T> method@SuppressWarnings({ 'unchecked', 'rawtypes' })public List<T> findAll() {CriteriaQuery cq = em.getCriteriaBuilder().createQuery();cq.select(cq.from(entityClass));return em.createQuery(cq).getResultList();}// Using the unchecked because JPA does not have a// ery.getSingleResult()<T> method@SuppressWarnings('unchecked')protected T findOneResult(String namedQuery, Map<String, Object> parameters) {T result = null;try {Query query = em.createNamedQuery(namedQuery);// Method that will populate parameters if they are passed not null and emptyif (parameters != null && !parameters.isEmpty()) {populateQueryParameters(query, parameters);}result = (T) query.getSingleResult();} catch (Exception e) {System.out.println('Error while running query: ' + e.getMessage());e.printStackTrace();}return result;}private void populateQueryParameters(Query query, Map<String, Object> parameters) {for (Entry<String, Object> entry : parameters.entrySet()) {query.setParameter(entry.getKey(), entry.getValue());}}
}
package com.dao;import javax.ejb.Stateless;import com.model.Dog;@Stateless
public class DogDAO extends GenericDAO<Dog> {public DogDAO() {super(Dog.class);}
}
package com.dao;import java.util.HashMap;
import java.util.Map;import javax.ejb.Stateless;import com.model.User;@Stateless
public class UserDAO extends GenericDAO<User> {public UserDAO() {super(User.class);}public User findUserByEmail(String email){Map<String, Object> parameters = new HashMap<String, Object>();parameters.put('email', email);  return super.findOneResult(User.FIND_BY_EMAIL, parameters);}
}

關于上面的代碼:

  • 我隱藏了一些警告,因為JPA代碼尚未“理解”泛型。
  • “ findOneResult”方法具有受保護的訪問權限,只是為了防止其他類進行外部訪問。 正如我們在UserDAO中看到的那樣,此方法需要邏輯來填充參數。
  • GenericDAO類具有完整的CRUD方法以及給定NamedQuery返回單個對象的方法。
  • UserDAO類具有僅屬于該類的方法(findUserByEmail); 但是它通過繼承具有所有CRUD方法。 通過這種DAO模式,我們獲得了更靈活的代碼。
  • DogDAO中沒有方法,只有CRUD方法。 您可以毫無問題地實現類中的任何方法。
  • 可以使用一種方法“ entityManager.merge()”代替使用“保存”方法,而使用其他方法“更新”對象。 您將獲得相同的結果,但需要注意Cascade選項。
  • 我沒有使用接口,因為EJB 3.1允許我們擁有無接口的無狀態本地會話Bean。 如果使用的是較舊的EJB版本,則需要實現一個接口(如何在Fa?ades頁面上的這篇文章中看到如何使用接口實現EJB)。 我不會使用DAO /模型的接口進行開發,只是為了節省空間。 記住:“總是編程到一個接口”( 設計模式–策略 )。
  • 如果使用JBoss 4.2,則可以使用org.jboss.annotation.ejb.LocalBinding或org.jboss.annotation.ejb.RemoteBinding注釋; 在此注釋中,您可以編寫將由EJB映射和引用的名稱。

商業–外墻

我將創建Fa?ades,它將成為View和DAO之間的“橋梁”。 在Fa?ade中,我們將保留所有業務規則,僅將DAO保留為“數據庫”功能/事務,例如CRUD和查詢。

讓我們看看我們的類UserFacade和DogFacade將如何:

package com.facade;import java.util.List;import javax.ejb.Local;import com.model.Dog;@Local
public interface DogFacade {public abstract void save(Dog dog);public abstract Dog update(Dog dog);public abstract void delete(Dog dog);public abstract Dog find(int entityID);public abstract List<Dog> findAll();
}
package com.facade;import java.util.List;import javax.ejb.EJB;
import javax.ejb.Stateless;import com.dao.DogDAO;
import com.model.Dog;@Stateless
public class DogFacadeImp implements DogFacade {@EJBprivate DogDAO dogDAO;@Overridepublic void save(Dog dog) {isDogWithAllData(dog);dogDAO.save(dog);}@Overridepublic Dog update(Dog dog) {isDogWithAllData(dog);return dogDAO.update(dog);}@Overridepublic void delete(Dog dog) {dogDAO.delete(dog);}@Overridepublic Dog find(int entityID) {return dogDAO.find(entityID);}@Overridepublic List<Dog> findAll() {return dogDAO.findAll();}private void isDogWithAllData(Dog dog){boolean hasError = false;if(dog == null){hasError = true;}if (dog.getName() == null || ''.equals(dog.getName().trim())){hasError = true;}if(dog.getWeight() <= 0){hasError = true;}if (hasError){throw new IllegalArgumentException('The dog is missing data. Check the name and weight, they should have value.');}}
}
package com.facade;import javax.ejb.Local;import com.model.User;@Local
public interface UserFacade {public User findUserByEmail(String email);
}
package com.facade;import javax.ejb.EJB;
import javax.ejb.Stateless;import com.dao.UserDAO;
import com.model.User;@Stateless
public class UserFacadeImp implements UserFacade {@EJBprivate UserDAO userDAO;public User findUserByEmail(String email) {return userDAO.findUserByEmail(email);}
}

關于上面的代碼:

  • DogFacadeImp類完成了從視圖保護DogDAO的所有工作。 它可能具有業務規則,并且如果某些數據丟失或任何其他業務規則已被破壞,則避免訪問數據庫。
  • UserFacade只有一種方法,因為在這篇文章中我們將不會有一個User類。 如果視圖未在HttpSession中找到,則Bean將僅搜索用戶。
  • 如果使用JBoss 4.2,則可以使用org.jboss.annotation.ejb.LocalBinding或org.jboss.annotation.ejb.RemoteBinding注釋; 在此注釋中,您可以編寫將由EJB映射和引用的名稱。
  • 我在DogFacadeImp中進行驗證,以確保Dog僅具有有效數據。 請記住,每個人都可以向您發送無效數據,并且您的視圖驗證可能無法按您預期的那樣進行。 您的應用程序的數據非常重要,仔細檢查總是值得的。

接口使用@Local進行注釋,但我記得您該注釋是可選的。 如果不寫@Local批注,則服務器將默認假定您的EJB是本地的。

業務–數據源(按模塊)

我們還需要設置數據源。

最初,我嘗試通過遵循本教程http://community.jboss.org/wiki/JBossAS7-DatasourceConfigurationForPostgresql創建數據源(我確實像其他任何人一樣都遵循教程),但是在部署時使用了一些錯誤EJB和JBoss找不到Postgres jar。

如果您使用的是JBoss 6或它下面的任何版本,則無需創建模塊。 只需將文件放在“ default / lib”文件夾中即可。 如果您對設置數據源有任何疑問,請在下面的JBoss 6或其他版本中顯示如何進行操作: 使用JAAS和JSF進行用戶登錄驗證 。

讓我們創建Postgres模塊。 在JBoss 7內部創建目錄: YOUR_JBOSS / modules / org / postgresql / main ”。 將jar復制到創建的目錄并創建一個名為“ module.xml”的文件; 將下面的代碼復制到“ module.xml”文件中:

<?xml version='1.0' encoding='UTF-8'?>
<module xmlns='urn:jboss:module:1.0' name='org.postgresql'><resources><resource-root path='postgresql-9.1-901.jdbc4.jar'/></resources><dependencies><module name='javax.api'/></dependencies>
</module>

請注意,在“ module.xml”文件中,我們編寫了jar文件名,該名稱必須與Postgres jar文件名相同。

要創建MySQL模塊,請創建以下文件夾 YOUR_JBOSS / modules / com / mysql / main 。 將jar復制到創建的目錄并創建一個名為“ module.xml”的文件; 將下面的代碼復制到“ module.xml”文件中:

<?xml version='1.0' encoding='UTF-8'?><!--~ JBoss copyrights~ http://community.jboss.org/wiki/DataSourceConfigurationInAS7--><module xmlns='urn:jboss:module:1.0' name='com.mysql'><resources><resource-root path='mysql-connector-java-5.1.15.jar'/></resources><dependencies><module name='javax.api'/></dependencies>
</module>

讓我們編輯文件“ YOUR_JBOSS / standalone / configuration / standalone.xml ”。 在鍵“ <datasources>”內,添加以下代碼:

<datasources><!-- Add this config: begin --><datasource jndi-name='CrudDS' pool-name='CrudDS_Pool' enabled='true' jta='true' use-java-context='true' use-ccm='true'><connection-url>jdbc:postgresql://localhost:5432/CrudDB</connection-url><driver-class>org.postgresql.Driver</driver-class><driver>postgresql-jdbc4</driver><pool><min-pool-size>2</min-pool-size><max-pool-size>20</max-pool-size><prefill>true</prefill><use-strict-min>false</use-strict-min><flush-strategy>FailingConnectionOnly</flush-strategy></pool><security><user-name>postgres</user-name><password>postgres</password></security><validation><check-valid-connection-sql>SELECT 1</check-valid-connection-sql><validate-on-match>false</validate-on-match><background-validation>false</background-validation><use-fast-fail>false</use-fast-fail></validation></datasource><!-- Add this config: end --><drivers><!-- Add this config: begin --><driver name='postgresql-jdbc4' module='org.postgresql'/><!-- Add this config: end --></drivers>

要使用MySQL配置數據源,請看這里:
http://community.jboss.org/wiki/DataSourceConfigurationInAS7

業務– XML配置

讓我們看看我們的persistence.xml將會如何(該文件必須在文件夾src / META-INF中):

<?xml version='1.0' encoding='UTF-8'?>
<persistence version='1.0' xmlns='http://java.sun.com/xml/ns/persistence' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd'><persistence-unit name='CrudPU' transaction-type='JTA'><provider>org.hibernate.ejb.HibernatePersistence</provider><jta-data-source>java:/CrudDS</jta-data-source><properties><property name='hibernate.hbm2ddl.auto' value='update'/></properties></persistence-unit>
</persistence>

我們有一個非常簡單的代碼; 它只是指向一個數據源,并帶有使用“ update”生成所有數據庫表的選項。

將EJB項目添加到JBoss。

在Postgres中創建數據庫并啟動JBoss; 啟動后,JPA將創建表。

在下面的圖片中查看JPA為我們創建的表/序列。

在WEB-INF文件夾中創建一個名為“ jboss-web.xml”的文件,并在其中編寫以下代碼:

<?xml version='1.0' encoding='UTF-8'?><jboss-web><!-- URL to access the web module --><context-root>CrudJSF</context-root><!-- Realm that will be used --><security-domain>java:/jaas/CrudJSFRealm</security-domain>
</jboss-web>

在上面的文件中,我們設置了應用程序將使用的領域。 讓我們將用戶插入將通過JAAS進行登錄的數據庫中(如果您想查看有關JAAS的更多詳細信息,可以在此處查看: 使用JAAS和JSF的用戶登錄驗證 )。 我不會獲得JAAS詳細信息,因為您可以找到上一個鏈接中詳細介紹的每個步驟。

在下面的圖像中看到我在數據庫中手動插入的數據(您應該執行相同的操作):

繼續本教程的第二部分 。

參考: uaiHebert博客上來自我們的JCG合作伙伴 Hebert Coelho的完整WebApplication JSF EJB JPA JAAS 。


翻譯自: https://www.javacodegeeks.com/2012/06/full-webapplication-jsf-ejb-jpa-jaas.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372655.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372655.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372655.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ajax和JavaScript的區別

javascript是一種在瀏覽器端執行的腳本語言&#xff0c;Ajax是一種創建交互式網頁應用的開發技術 &#xff0c;它是利用了一系列相關的技術其中就包括javascript。Javascript是由網景公司開發的一種腳本語言&#xff0c;它和sun公司的java語言是沒有任何關系的&#xff0c;它們…

大一

以后準備開始ACM的題目啦轉載于:https://www.cnblogs.com/Aiden-/p/6562038.html

概念驗證:玩! 構架

我們正在開始一個新項目&#xff0c;我們必須選擇Web框架。 我們的默認選擇是grails&#xff0c;因為團隊已經擁有使用它的經驗&#xff0c;但是我決定給Play&#xff01; 和Scala有機會。 玩&#xff01; 有很多很酷的東西&#xff0c;在我的評估中&#xff0c;它得到了很多加…

ldap統一用戶認證php,針對LDAP服務器進行身份認證

Symfony提供了不同的方法來配合LDAP服務器使用。Security組件提供&#xff1a;ldap user provider&#xff0c;使用的是form_login_ldap authentication provider&#xff0c;用于針對一臺使用了表單登錄的LDAP服務器。同所有其他user provider一樣&#xff0c;它可以同任何aut…

每天CookBook之JavaScript-039

IIFE的使用<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>039</title> </head> <body></body> <script type"text/javascript"> (function () {var i 0;fu…

Day-6:創建計算字段

字段&#xff1a;基本上與列的意思相同&#xff0c;經常互換使用&#xff0c;計算字段是運行時在SELECT語句內創建的&#xff0c;不實際存在于數據庫表中。 拼接字段&#xff1a;將值聯結到一起構成單個值 SQL中的SELECT語句中可以使用或||操作符拼接&#xff0c;但mysql中必須…

使用Hibernate加載或保存圖像-MySQL

本教程將引導您逐步了解如何使用Hibernate從數據庫&#xff08; MySQL &#xff09;保存和加載圖像。 要求 對于此示例項目&#xff0c;我們將使用&#xff1a; Eclipse IDE &#xff08;您可以使用自己喜歡的IDE&#xff09;&#xff1b; MySQL &#xff08;您可以使用任何…

javaweb回顧第四篇Servlet異常處理

前言&#xff1a;很多網站為了給用戶很好的用戶體驗性&#xff0c;都會提供比較友好的異常界面&#xff0c;現在我們在來回顧一下Servlet中如何進行異常處理的。 1&#xff1a;聲明式異常處理 什么是聲明式&#xff1a;就是在web.xml中聲明對各種異常的處理方法。 是通過<er…

java開發cs教程,日常運維(一)

w命令&#xff1a;用于查看系統負載、顯示已經登陸系統的用戶列表&#xff0c;并顯示用戶正在執行的指令等信息第一行從左面開始顯示的信息依次為&#xff1a;時間&#xff0c;系統運行時間&#xff0c;登錄用戶數&#xff0c;平均負載。第二行開始以及下面所有的行&#xff0c…

coursera 《現代操作系統》 -- 第五周 同步機制(1)

臨界區塊&#xff08;Critical section&#xff09;指的是一個訪問共用資源&#xff08;例如&#xff1a;共用設備或是共用存儲器&#xff09;的程序片段&#xff0c;而這些共用資源有無法同時被多個線程訪問的特性。&#xff08;不是字面意思的一個區域&#xff0c;是程序片段…

java.lang.NoClassDefFoundError:如何解決–第2部分

本文是我們的NoClassDefFoundError故障排除系列的第2部分。 看一下第1部分 。 它將重點介紹最簡單的NoClassDefFoundError問題類型。 本文對于Java初學者來說是理想的選擇&#xff0c;我強烈建議您自己編譯并運行示例Java程序。 今后將使用以下書寫格式&#xff0c;并為您提供&…

Android開發技術周報 Issue#34

教程 Google Develop for Android 系列 前幾天在G上看到Google Developers站點&#xff0c;有一個Android系列的文章&#xff0c;分享到個人微博&#xff0c;周末閑來沒事就學寫了下&#xff0c;把它們簡單的翻譯了下&#xff0c;沒想到一發不可收拾&#xff0c;六篇文章全部都…

php進度條插件,分享8款優秀的 jQuery 加載動畫和進度條插件_jquery

加載動畫和進度條在網站和 Web 應用中的使用非常流行。雖然網速越來越快&#xff0c;但是我們的網站越來越復雜&#xff0c;同時用戶對網站的使用體驗的要求也越來越高。在內容加載緩慢的時候&#xff0c;使用時尚的加載動畫和進度條告訴用戶還有內容正在加載是一種非常好的方式…

卷積神經網絡(CNN)與特殊的卷積

各種卷積操作的可視化的顯示形式&#xff1a;GitHub - vdumoulin/conv_arithmetic: A technical report on convolution arithmetic in the context of deep learning1. fractionally-strided 卷積 如上圖示&#xff0c;輸入為 33 &#xff0c;想要卷積上采樣成 55 的輸出。需要…

JBoss AS 7:自定義登錄模塊

JBoss AS 7很整潔&#xff0c;但是仍然缺少文檔&#xff08;錯誤消息沒有那么有用&#xff09;。 這篇文章總結了如何創建自己的兼容JavaEE的登錄模塊&#xff0c;以對部署在JBoss AS上的Web應用程序的用戶進行身份驗證。 提供了一個工作的基本用戶名密碼模塊。 為什么要使用Ja…

MySQL安裝步驟及相關問題解決

1. 下載MySQL Server&#xff0c;網址&#xff1a;http://dev.mysql.com/downloads/mysql/ 2. 點擊MySQL5.5.21的安裝文件&#xff0c;出現安裝向導界面&#xff0c;單擊“next”繼續安裝&#xff1a; 3. 選擇接受協議&#xff0c;單擊“next”繼續安裝&#xff1a; 4. 在出現選…

matlab的數學函數,matlab中常見數學函數的使用

matlab中常見數學函數的使用 MATLAB 基本知識 Matlab 的內部常數 pi 圓周率 exp(1) 自然對數的底數 e i 或 j 虛數單位 Inf 或 inf 無窮大 Matlab 的常用內部數學函數 指數函數 exp(x) 以 e 為底數 log(x) 自然對數&#xff0c;即以 e 為底數的對數 log10(x) 常用對數&#xff…

C++中 list與vector的區別

C中 list與vector的區別 引用http://www.cnblogs.com/shijingjing07/p/5587719.html C vector和list的區別 1.vector數據結構vector和數組類似&#xff0c;擁有一段連續的內存空間&#xff0c;并且起始地址不變。因此能高效的進行隨機存取&#xff0c;時間復雜度為o(1);但因為內…

使用Struts 2的查詢網格(無插件)

當將jQuery與struts 2一起使用時&#xff0c;開發人員被說服使用struts2-jQuery插件 。 因為大多數論壇和其他Internet資源都支持struts2 jQuery插件。我有這種經驗。 我想將Struts 2使用jQuery Grid插件&#xff0c;但不使用struts2 jQuery插件。 對于我而言&#xff0c;很難找…

php reflectionmethod,PHP ReflectionMethod getClosure()用法及代碼示例

ReflectionMethod::getClosure()函數是PHP中的一個內置函數&#xff0c;用于為該方法返回動態創建的閉包&#xff0c;否則&#xff0c;在出現錯誤的情況下返回NULL。用法:Closure ReflectionMethod::getClosure ( $object )參數&#xff1a;該函數接受參數對象&#xff0c;該參…