Ⅰ android怎麼獲取伺服器數據
一:基於Http協議獲取數據方法。二:基於SAOP協議獲取數據方法,
這篇文章主要是將關於使用Http協議獲取伺服器端數據,這里我們採取的伺服器端技術為java,框架為Struts2,或者可以有Servlet,又或者可直接從JSP頁面中獲取數據。
那麼,接下來我們便開始這一路程:
首先:編寫伺服器端方法,我這里採用的MVC框架是Struts2,目的很單純,就是為了以後做個完整的商業項目,技術配備為:android+SSH。當然,篇幅有限,我這里就直接用Strtus2而已。
伺服器端:新建WebProject ,選擇Java ee 5.0.
為了給項目添加Struts2的支持,我們必須導入Struts2的一些類庫,如下即可(有些jar包是不必的,但是我們後來擴展可能是要使用到的,就先弄進去):
1: xwork-core-2.2.1.1.jar
2: struts2-core-2.2.1.1.jar
3: commons-logging-1.0.4.jar
4: freemarker-2.3.16.jar
5: ognl-3.0.jar
6: javassist-3.7.ga.jar
7:commons-ileupload.jar
8:commons-io.jar
9:json-lib-2.1-jdk15.jar 處理JSON格式數據要使用到
10:struts2-json-plugin-2.2.1.1.jar 基於struts2的json插件
以上的jar包,需要放在WebRoot/WEB-INF/lib目錄下
然後在web.xml文件中敲下:
View Code
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 定義Struts2的核心控制器:FilterDispatcher -->
<filter>
<!-- 定義核心Filter的名稱 -->
<filter-name>struts2</filter-name>
<!-- 定義Filter的實現類 -->
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
然後編寫struts.xml文件,並放在WebRoot/WEB-INF/lib目錄下:如下代碼:
View Code
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- setting encoding,DynamicMethod,language
<constant name="struts.custom.i18n.resources" value="messageResource"></constant>
-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<!-- add package here extends="struts-default"-->
<package name="dongzi" extends="json-default"> <!--需要將struts-default改為json-default-->
<!-- setting action -->
<action name="login" class="com.dongzi.action.loginAction" method="login">
<result type="json"></result> <!--返回值類型設置為json,不設置返回頁面-->
</action>
</package>
</struts>
配置好後,我們再根據<action>標簽內容來編寫action。方法為method對應的login,類名為loginAction,
注意:包繼承為:json-default ,輸出結果類型為json
如下:
View Code
public class loginAction extends ActionSupport implements
ServletRequestAware,ServletResponseAware {
/**
*
*/
private static final long serialVersionUID = 1L;
HttpServletRequest request;
HttpServletResponse response;
public void setServletRequest(HttpServletRequest request) {
this.request=request;
}
public void setServletResponse(HttpServletResponse response) {
this.response=response;
}
public void login(){
try {
//HttpServletRequest request =ServletActionContext.getRequest();
// HttpServletResponse response=ServletActionContext.getResponse();
this.response.setContentType("text/html;charset=utf-8");
this.response.setCharacterEncoding("UTF-8");
if(this.request.getParameter("username").equals("123456")){
this.response.getWriter().write("真的很奇怪,日本人!");
}else if(this.request.getParameter("username").equals("zhd")){
this.response.getWriter().write("沒有錯,我就是東子哥!");
}else{
this.response.getWriter().write("我就是東子哥!");
}
//將要返回的實體對象進行json處理
// JSONObject json=JSONObject.fromObject(this.getUsername());
//輸出格式如:{"id":1, "username":"zhangsan", "pwd":"123"}
// System.out.println(json);
// this.response.getWriter().write(json.toString());
/**
JSONObject json=new JSONObject();
json.put("login", "login");
response.setContentType("text/html;charset=utf-8");
System.out.println(json);
byte[] jsonBytes = json.toString().getBytes("utf-8");
response.setContentLength(jsonBytes.length);
response.getOutputStream().write(jsonBytes);
**/
/**
JSONObject json=new JSONObject();
json.put("login", "login");
byte[] jsonBytes = json.toString().getBytes("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setContentLength(jsonBytes.length);
response.getOutputStream().write(jsonBytes);
response.getOutputStream().flush();
response.getOutputStream().close();
**/
} catch (Exception e) {
e.printStackTrace();
}
// return null;
}
}
Ⅱ android開發用什麼從伺服器獲取數據
在android中有時候我們不需要用到本機的SQLite資料庫提供數據,更多的時候是從網路上獲取數據,那麼Android怎麼從伺服器端獲取數據呢?有很多種,歸納起來有
一:基於Http協議獲取數據方法。二:基於SAOP協議獲取數據方法,三:忘了-------
那麼我們的這篇文章主要是將關於使用Http協議獲取伺服器端數據,這里我們採取的伺服器端技術為java,框架為Struts2,或者可以有Servlet,又或者可直接從JSP頁面中獲取數據。
那麼,接下來我們便開始這一路程:
首先:編寫伺服器端方法,我這里採用的MVC框架是Struts2,目的很單純,就是為了以後做個完整的商業項目,技術配備為:android+SSH。當然,篇幅有限,我這里就直接用Strtus2而已。
伺服器端:新建WebProject ,選擇Java ee 5.0.
為了給項目添加Struts2的支持,我們必須導入Struts2的一些類庫,如下即可(有些jar包是不必的,但是我們後來擴展可能是要使用到的,就先弄進去):
1: xwork-core-2.2.1.1.jar
2: struts2-core-2.2.1.1.jar
3: commons-logging-1.0.4.jar
4: freemarker-2.3.16.jar
5: ognl-3.0.jar
6: javassist-3.7.ga.jar
7:commons-ileupload.jar
8:commons-io.jar
9:json-lib-2.1-jdk15.jar 處理JSON格式數據要使用到
10:struts2-json-plugin-2.2.1.1.jar 基於struts2的json插件
以上的jar包,需要放在WebRoot/WEB-INF/lib目錄下
然後在web.xml文件中敲下:
View Code
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 定義Struts2的核心控制器:FilterDispatcher -->
<filter>
<!-- 定義核心Filter的名稱 -->
<filter-name>struts2</filter-name>
<!-- 定義Filter的實現類 -->
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
然後編寫struts.xml文件,並放在WebRoot/WEB-INF/lib目錄下:如下代碼:
View Code
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- setting encoding,DynamicMethod,language
<constant name="struts.custom.i18n.resources" value="messageResource"></constant>
-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<!-- add package here extends="struts-default"-->
<package name="dongzi" extends="json-default"> <!--需要將struts-default改為json-default-->
<!-- setting action -->
<action name="login" class="com.dongzi.action.loginAction" method="login">
<result type="json"></result> <!--返回值類型設置為json,不設置返回頁面-->
</action>
</package>
</struts>
配置好後,我們再根據<action>標簽內容來編寫action。方法為method對應的login,類名為loginAction,
注意:包繼承為:json-default ,輸出結果類型為json
如下:
View Code
public class loginAction extends ActionSupport implements
ServletRequestAware,ServletResponseAware {
/**
*
*/
private static final long serialVersionUID = 1L;
HttpServletRequest request;
HttpServletResponse response;
public void setServletRequest(HttpServletRequest request) {
this.request=request;
}
public void setServletResponse(HttpServletResponse response) {
this.response=response;
}
public void login(){
try {
//HttpServletRequest request =ServletActionContext.getRequest();
// HttpServletResponse response=ServletActionContext.getResponse();
this.response.setContentType("text/html;charset=utf-8");
this.response.setCharacterEncoding("UTF-8");
if(this.request.getParameter("username").equals("123456")){
this.response.getWriter().write("真的很奇怪,日本人!");
}else if(this.request.getParameter("username").equals("zhd")){
this.response.getWriter().write("沒有錯,我就是東子哥!");
}else{
this.response.getWriter().write("我就是東子哥!");
}
//將要返回的實體對象進行json處理
// JSONObject json=JSONObject.fromObject(this.getUsername());
//輸出格式如:{"id":1, "username":"zhangsan", "pwd":"123"}
// System.out.println(json);
// this.response.getWriter().write(json.toString());
/**
JSONObject json=new JSONObject();
json.put("login", "login");
response.setContentType("text/html;charset=utf-8");
System.out.println(json);
byte[] jsonBytes = json.toString().getBytes("utf-8");
response.setContentLength(jsonBytes.length);
response.getOutputStream().write(jsonBytes);
**/
/**
JSONObject json=new JSONObject();
json.put("login", "login");
byte[] jsonBytes = json.toString().getBytes("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setContentLength(jsonBytes.length);
response.getOutputStream().write(jsonBytes);
response.getOutputStream().flush();
response.getOutputStream().close();
**/
} catch (Exception e) {
e.printStackTrace();
}
// return null;
}
}
運行查看下:http://localhost:8080/PDAServer/login.action?username=123456 當然你可以輸入其他參數的URL
Ⅲ GitHub上面有哪些經典的java框架源碼
Bazel:來自Google的構建工具,可以快速、可靠地構建代碼。官網
Gradle:使用Groovy(非XML)進行增量構建,可以很好地與Maven依賴管理配合工作。官網
Buck:Facebook構建工具。官網
位元組碼操作
編程方式操作位元組碼的開發庫。
ASM:通用底層位元組碼操作和分析開發庫。官網
Byte Buddy:使用流式API進一步簡化位元組碼生成。官網
Byteman:在運行時通過DSL(規則)操作位元組碼進行測試和故障排除。官網
Javassist:一個簡化位元組碼編輯嘗試。官網
集群管理
在集群內動態管理應用程序的框架。
Apache Aurora:Apache Aurora是一個Mesos框架,用於長時間運行服務和定時任務(cron job)。官網
Singularity:Singularity是一個Mesos框架,方便部署和操作。它支持Web Service、後台運行、調度作業和一次性任務。官網
代碼分析
測量代碼指標和質量工具。
Checkstyle:代碼編寫規范和標准靜態分析工具。官網
Error Prone:將常見編程錯誤作為運行時錯誤報告。官網
FindBugs:通過位元組碼靜態分析查找隱藏bug。官網
jQAssistant:使用基於Neo4J查詢語言進行代碼靜態分析。官網
PMD:對源代碼分析查找不良的編程習慣。官網
SonarQube:通過插件集成其它分析組件,對過去一段時間內的數據進行統計。官網
編譯器生成工具
用來創建解析器、解釋器或編譯器的框架。
ANTLR:復雜的全功能自頂向下解析框架。官網
JavaCC:JavaCC是更加專門的輕量級工具,易於上手且支持語法超前預測。官網
外部配置工具
支持外部配置的開發庫。
config:針對JVM語言的配置庫。官網
owner:減少冗餘配置屬性。官網
約束滿足問題求解程序
幫助解決約束滿足問題的開發庫。
Choco:可直接使用的約束滿足問題求解程序,使用了約束規劃技術。官網
JaCoP:為FlatZinc語言提供了一個介面,可以執行MiniZinc模型。官網
OptaPlanner:企業規劃與資源調度優化求解程序。官網
Sat4J:邏輯代數與優化問題最先進的求解程序。官網
持續集成
Bamboo:Atlassian解決方案,可以很好地集成Atlassian的其他產品。可以選擇開源許可,也可以購買商業版。官網
CircleCI:提供託管服務,可以免費試用。官網
Codeship:提供託管服務,提供有限的免費模式。官網
fabric8:容器集成平台。官網
Go:ThoughtWork開源解決方案。官網
Jenkins:支持基於伺服器的部署服務。官網
TeamCity:JetBrain的持續集成解決方案,有免費版。官網
Travis:通常用作開源項目的託管服務。官網
Buildkite: 持續集成工具,用簡單的腳本就能設置pipeline,而且能快速構建,可以免費試用。官網
CSV解析
簡化CSV數據讀寫的框架與開發庫
uniVocity-parsers:速度最快功能最全的CSV開發庫之一,同時支持TSV與固定寬度記錄的讀寫。官網
資料庫
簡化資料庫交互的相關工具。
Apache Phoenix:HBase針對低延時應用程序的高性能關系資料庫層。官網
Crate:實現了數據同步、分片、縮放、復制的分布式數據存儲。除此之外還可以使用基於SQL的語法跨集群查詢。官網
Flyway:簡單的資料庫遷移工具。官網
H2:小型SQL資料庫,以可以作為內存資料庫使用著稱。官網
HikariCP:高性能JDBC連接工具。官網
JDBI:便捷的JDBC抽象。官網
Protobuf:Google數據交換格式。官網
SBE:簡單二進制編碼,是最快速的消息格式之一。官網
Wire:整潔輕量級協議緩存。官網
幫實現依賴翻轉範式的開發庫。官網
Apache DeltaSpike:CDI擴展框架。官網
Dagger2:編譯時注入框架,不需要使用反射。官網
Guice:可以匹敵Dagger的輕量級注入框架。官網
HK2:輕量級動態依賴注入框架。官網
開發流程增強工具
從最基本的層面增強開發流程。
ADT4J:針對代數數據類型的JSR-269代碼生成器。官網
AspectJ:面向切面編程(AOP)的無縫擴展。官網
Auto:源代碼生成器集合。官網
DCEVM:通過修改JVM在運行時支持對已載入的類進行無限次重定義。官網
HotswapAgent:支持無限次重定義運行時類與資源。官網
Immutables:類似Scala的條件類。官網
JHipster:基於Spring Boot與AngularJS應用程序的Yeoman源代碼生成器。官網
JRebel:無需重新部署,可以即時重新載入代碼與配置的商業軟體。官網
Lombok:減少冗餘的代碼生成器。官網
Spring Loaded:類重載代理。官網
vert.x:多語言事件驅動應用框架。官網
分布式應用
用來編寫分布式容錯應用的開發庫和框架。
Akka:用來編寫分布式容錯並發事件驅動應用程序的工具和運行時。官網
Apache Storm:實時計算系統。官網
Apache ZooKeeper:針對大型分布式系統的協調服務,支持分布式配置、同步和名稱注冊。官網
Hazelcast:高可擴展內存數據網格。官網
Hystrix:提供延遲和容錯。官網
JGroups:提供可靠的消息傳遞和集群創建的工具。官網
Orbit:支持虛擬角色(Actor),在傳統角色的基礎上增加了另外一層抽象。官網
Quasar:為JVM提供輕量級線程和角色。官網
分布式資料庫
對應用程序而言,在分布式系統中的資料庫看起來就像是只有一個數據源。
Apache Cassandra:列式資料庫,可用性高且沒有單點故障。官網
Apache HBase:針對大數據的Hadoop資料庫。官網
Druid:實時和歷史OLAP數據存儲,在聚集查詢和近似查詢方面表現不俗。官網
Infinispan:針對緩存的高並發鍵值對數據存儲。官網
發布
以本機格式發布應用程序的工具。
Bintray:發布二進制文件版本控制工具。可以於Maven或Gradle一起配合使用。提供開源免費版本和幾種商業收費版本。官網
Central Repository:最大的二進制組件倉庫,面向開源社區提供免費服務。Apache Maven默認使用Central官網Repository,也可以在所有其他構建工具中使用。
IzPack:為跨平台部署建立創作工具(Authoring Tool)。官網
JitPack:打包GitHub倉庫的便捷工具。可根據需要構建Maven、Gradle項目,發布可立即使用的組件。官網
Launch4j:將JAR包裝為輕量級本機Windows可執行程序。官網
Nexus:支持代理和緩存功能的二進制管理工具。官網
packr:將JAR、資源和JVM打包成Windows、Linux和Mac OS X本地發布文件。官網
文檔處理工具
處理Office文檔的開發庫。
Apache POI:支持OOXML規范(XLSX、DOCX、PPTX)以及OLE2規范(XLS、DOC、PPT)。官網
documents4j:使用第三方轉換器進行文檔格式轉換,轉成類似MS Word這樣的格式。官網
jOpenDocument:處理OpenDocument格式(由Sun公司提出基於XML的文檔格式)。官網
函數式編程
函數式編程支持庫。
Cyclops:支持一元(Monad)操作和流操作工具類、comprehension(List語法)、模式匹配、trampoline等特性。官網
Fugue:Guava的函數式編程擴展。官網
Functional Java:實現了多種基礎和高級編程抽象,用來輔助面向組合開發(composition-oriented development)。官網
Javaslang:一個函數式組件庫,提供持久化數據類型和函數式控制結構。官網
jOOλ:旨在填補Java 8 lambda差距的擴展,提供了眾多缺失的類型和一組豐富的順序流API。官網
游戲開發
游戲開發框架。
jMonkeyEngine:現代3D游戲開發引擎。官網
libGDX:全面的跨平台高級框架。官網
LWJGL:對OpenGL/CL/AL等技術進行抽象的健壯框架。官網
GUI
現代圖形化用戶界面開發庫。
JavaFX:Swing的後繼者。官網
Scene Builder:開發JavaFX應用的可視化布局工具。官網
高性能計算
涵蓋了從集合到特定開發庫的高性能計算相關工具。
Agrona:高性能應用中常見的數據結構和工具方法。官網
Disruptor:線程間消息傳遞開發庫。官網
fastutil:快速緊湊的特定類型集合(Collection)。官網
GS Collections:受Smalltalk啟發的集合框架。官網
HPPC:基礎類型集合。官網
Javolution:實時和嵌入式系統的開發庫。官網
JCTools:JDK中缺失的並發工具。官網
Koloboke:Hash set和hash map。官網
Trove:基礎類型集合。官網
High-scale-bli:Cliff Click 個人開發的高性能並發庫官網
IDE
簡化開發的集成開發環境。
Eclipse:老牌開源項目,支持多種插件和編程語言。官網
IntelliJ IDEA:支持眾多JVM語言,是安卓開發者好的選擇。商業版主要針對企業客戶。官網
NetBeans:為多種技術提供集成化支持,包括Java SE、Java EE、資料庫訪問、HTML5
Imgscalr:純Java 2D實現,簡單、高效、支持硬體加速的圖像縮放開發庫。官網
Picasso:安卓圖片下載和圖片緩存開發庫。官網
Thumbnailator:Thumbnailator是一個高質量Java縮略圖開發庫。官網
ZXing:支持多種格式的一維、二維條形碼圖片處理開發庫。官網
im4java: 基於ImageMagick或GraphicsMagick命令行的圖片處理開發庫,基本上ImageMagick能夠支持的圖片格式和處理方式都能夠處理。官網
Apache Batik:在Java應用中程序以SVG格式顯示、生成及處理圖像的工具集,包括SVG解析器、SVG生成器、SVG DOM等模塊,可以集成使用也可以單獨使用,還可以擴展自定義的SVG標簽。官網
JSON
簡化JSON處理的開發庫。
Genson:強大且易於使用的Java到JSON轉換開發庫。官網
Gson:谷歌官方推出的JSON處理庫,支持在對象與JSON之間雙向序列化,性能良好且可以實時調用。官網
Jackson:與GSON類似,在頻繁使用時性能更佳。官網
LoganSquare:基於Jackson流式API,提供對JSON解析和序列化。比GSON與Jackson組合方式效果更好。官網
Fastjson:一個Java語言編寫的高性能功能完善的JSON庫。官網
Kyro:快速、高效、自動化的Java對象序列化和克隆庫。官網
JVM與JDK
目前的JVM和JDK實現。
JDK 9:JDK 9的早期訪問版本。官網
OpenJDK:JDK開源實現。官網
基於JVM的語言
除Java外,可以用來編寫JVM應用程序的編程語言。
Scala:融合了面向對象和函數式編程思想的靜態類型編程語言。官網
Groovy:類型可選(Optionally typed)的動態語言,支持靜態類型和靜態編譯。目前是一個Apache孵化器項目。官網
Clojure:可看做現代版Lisp的動態類型語言。官網
Ceylon:RedHat開發的面向對象靜態類型編程語言。官網
Kotlin:JetBrain針對JVM、安卓和瀏覽器提供的靜態類型編程語言。官網
Xtend:一種靜態編程語言,能夠將其代碼轉換為簡潔高效的Java代碼,並基於JVM運行。官網
日誌
記錄應用程序行為日誌的開發庫。
Apache Log4j 2:使用強大的插件和配置架構進行完全重寫。官網
kibana:分析及可視化日誌文件。官網
Logback:強健的日期開發庫,通過Groovy提供很多有趣的選項。官網
logstash:日誌文件管理工具。官網
Metrics:通過JMX或HTTP發布參數,並且支持存儲到資料庫。官網
SLF4J:日誌抽象層,需要與具體的實現配合使用。官網
機器學習
提供具體統計演算法的工具。其演算法可從數據中學習。
Apache Flink:快速、可靠的大規模數據處理引擎。官網
Apache Hadoop:在商用硬體集群上用來進行大規模數據存儲的開源軟體框架。官網
Apache Mahout:專注協同過濾、聚類和分類的可擴展演算法。官網
Apache Spark:開源數據分析集群計算框架。官網
DeepDive:從非結構化數據建立結構化信息並集成到已有資料庫的工具。官網
Deeplearning4j:分布式多線程深度學習開發庫。官網
H2O:用作大數據統計的分析引擎。官網
Weka:用作數據挖掘的演算法集合,包括從預處理到可視化的各個層次。官網
QuickML:高效機器學習庫。官網、GitHub
消息傳遞
在客戶端之間進行消息傳遞,確保協議獨立性的工具。
Aeron:高效可擴展的單播、多播消息傳遞工具。官網
Apache ActiveMQ:實現JMS的開源消息代理(broker),可將同步通訊轉為非同步通訊。官網
Apache Camel:通過企業級整合模式(Enterprise Integration Pattern EIP)將不同的消息傳輸API整合在一起。官網
Apache Kafka:高吞吐量分布式消息系統。官網
Hermes:快速、可靠的消息代理(Broker),基於Kafka構建。官網
JBoss HornetQ:清晰、准確、模塊化,可以方便嵌入的消息工具。官網
JeroMQ:ZeroMQ的純Java實現。官網
Smack:跨平台XMPP客戶端函數庫。官網
Openfire:是開源的、基於XMPP、採用Java編程語言開發的實時協作伺服器。 Openfire安裝和使用都非常簡單,並可利用Web界面進行管理。官網GitHub
Spark:是一個開源,跨平台IM客戶端。它的特性支持集組聊天,電話集成和強大安全性能。如果企業內部部署IM使用Openfire+Spark是最佳的組合。官網GitHub
Tigase: 是一個輕量級的可伸縮的 Jabber/XMPP 伺服器。無需其他第三方庫支持,可以處理非常高的復雜和大量的用戶數,可以根據需要進行水平擴展。官網
雜項
未分類其它資源。
Design Patterns:實現並解釋了最常見的設計模式。官網
Jimfs:內存文件系統。官網
Lanterna:類似curses的簡單console文本GUI函數庫。官網
LightAdmin:可插入式CRUD UI函數庫,可用來快速應用開發。官網
OpenRefine:用來處理混亂數據的工具,包括清理、轉換、使用Web Service進行擴展並將其關聯到資料庫。官網
RoboVM:Java編寫原生iOS應用。官網
Quartz:強大的任務調度庫.官網
應用監控工具
監控生產環境中應用程序的工具。
AppDynamics:性能監測商業工具。官網
JavaMelody:性能監測和分析工具。官網
Kamon:Kamon用來監測在JVM上運行的應用程序。官網
New Relic:性能監測商業工具。官網
SPM:支持對JVM應用程序進行分布式事務追蹤的性能監測商業工具。官網
Takipi:產品運行時錯誤監測及調試商業工具。官網
原生開發庫
用來進行特定平台開發的原生開發庫。
JNA:不使用JNI就可以使用原生開發庫。此外,還為常見系統函數提供了介面。官網
自然語言處理
用來專門處理文本的函數庫。
Apache OpenNLP:處理類似分詞等常見任務的工具。官網
CoreNLP:斯坦佛CoreNLP提供了一組基礎工具,可以處理類似標簽、實體名識別和情感分析這樣的任務。官網
LingPipe:一組可以處理各種任務的工具集,支持POS標簽、情感分析等。官網
Mallet:統計學自然語言處理、文檔分類、聚類、主題建模等。官網
網路
網路編程函數庫。
Async Http Client:非同步HTTP和WebSocket客戶端函數庫。官網
Grizzly:NIO框架,在Glassfish中作為網路層使用。官網
Netty:構建高性能網路應用程序開發框架。官網
OkHttp:一個Android和Java應用的HTTP+SPDY客戶端。官網
Undertow:基於NIO實現了阻塞和非阻塞API的Web伺服器,在WildFly中作為網路層使用。官網
ORM
處理對象持久化的API。
Ebean:支持快速數據訪問和編碼的ORM框架。官網
EclipseLink:支持許多持久化標准,JPA、JAXB、JCA和SDO。官網
Hibernate:廣泛使用、強健的持久化框架。Hibernate的技術社區非常活躍。官網
MyBatis:帶有存儲過程或者SQL語句的耦合對象(Couples object)。官網
OrmLite:輕量級開發包,免除了其它ORM產品中的復雜性和開銷。官網
Nutz:另一個SSH。官網,Github
JFinal:JAVA WEB + ORM框架。官網,Github
用來幫助創建PDF文件的資源。
Apache FOP:從XSL-FO創建PDF。官網
Apache PDFBox:用來創建和操作PDF的工具集。官網
DynamicReports:JasperReports的精簡版。官網
flyingsaucer:XML/XHTML和CSS 2.1渲染器。官網
iText:一個易於使用的PDF函數庫,用來編程創建PDF文件。注意,用於商業用途時需要許可證。官網
JasperReports:一個復雜的報表引擎。官網
性能分析
性能分析、性能剖析及基準測試工具。
jHiccup:提供平台中JVM暫停的日誌和記錄。官網
JMH:JVM基準測試工具。官網
JProfiler:商業分析器。官網
LatencyUtils:測量和報告延遲的工具。官網
VisualVM:對運行中的應用程序信息提供了可視化界面。官網
YourKit Java Profiler:商業分析器。官網
響應式開發庫
用來開發響應式應用程序的開發庫。
Reactive Streams:非同步流處理標准,支持非阻塞式反向壓力(backpressure)。官網
Reactor:構建響應式快速數據(fast-data)應用程序的開發庫。官網
RxJava:通過JVM可觀察序列(observable sequence)構建非同步和基於事件的程序。官網
REST框架
用來創建RESTful 服務的框架。
Dropwizard:偏向於自己使用的Web框架。用來構建Web應用程序,使用了Jetty、Jackson、Jersey和Metrics。官網
Feign:受Retrofit、JAXRS-2.0和WebSocket啟發的HTTP客戶端連接器(binder)。官網
Jersey:JAX-RS參考實現。官網
RESTEasy:經過JAX-RS規范完全認證的可移植實現。官網
RestExpress:一個Java類型安全的REST客戶端。官網
RestX:基於註解處理和編譯時源碼生成的框架。官網
Retrofit:類型安全的REST客戶端。官網
Spark:受到Sinatra啟發的Java REST框架。官網
Swagger:Swagger是一個規范且完整的框架,提供描述、生產、消費和可視化RESTful Web Service。官網
Blade:國人開發的一個輕量級的MVC框架. 它擁有簡潔的代碼,優雅的設計。官網
科學計算與分析
用於科學計算和分析的函數庫。
DataMelt:用於科學計算、數據分析及數據可視化的開發環境。官網
JGraphT:支持數學圖論對象和演算法的圖形庫。官網
JScience:用來進行科學測量和單位的一組類。官網
搜索引擎
文檔索引引擎,用於搜索和分析。
Apache Solr:一個完全的企業搜索引擎。為高吞吐量通信進行了優化。官網
Elasticsearch:一個分布式、支持多租戶(multitenant)全文本搜索引擎。提供了RESTful Web介面和無schema的JSON文檔。官網
Apache Lucene:是一個開放源代碼的全文檢索引擎工具包,是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。官網
安全
用於處理安全、認證、授權或會話管理的函數庫。
Apache Shiro:執行認證、授權、加密和會話管理。官網
Bouncy Castle,涵蓋了從基礎的幫助函數到PGP/SMIME操作。官網:多途加密開發庫。支持JCA提供者(JCA provider)
Cryptomator:在雲上進行客戶端跨平台透明加密。官網
Keycloak:為瀏覽器應用和RESTful Web Service集成SSO和IDM。目前還處於beta版本,但是看起來非常有前途。官網
PicketLink:PicketLink是一個針對Java應用進行安全和身份認證管理的大型項目(Umbrella Project)。官網
序列化
用來高效處理序列化的函數庫。
FlatBuffers:高效利用內存的序列化函數庫,無需解包和解析即可高效訪問序列化數據。官網
Kryo:快速、高效的對象圖形序列化框架。官網
FST:提供兼容JDK的高性能對象圖形序列化。官網
MessagePack:一種高效的二進制序列化格式。官網
應用伺服器
用來部署應用程序的伺服器。
Apache Tomcat:針對Servlet和JSP的應用伺服器,健壯性好且適用性強。官網
Apache TomEE:Tomcat加Java EE。官網
Jetty:輕量級、小巧的應用伺服器,通常會嵌入到項目中。官網
WebSphere Liberty:輕量級、模塊化應用伺服器,由IBM開發。官網
WildFly:之前被稱作JBoss,由Red Hat開發。支持很多Java EE功能。官網
模板引擎
在模板中替換表達式的工具。
Apache Velocity:提供HTML頁面模板、email模板和通用開源代碼生成器模板。官網
FreeMarker:通用模板引擎,不需要任何重量級或自己使用的依賴關系。官網
Handlebars.java:使用Java編寫的模板引擎,邏輯簡單,支持語義擴展(semantic Mustache)。官網
Thymeleaf:旨在替換JSP,支持XML文件的工具。官網
測試
測試內容從對象到介面,涵蓋性能測試和基準測試工具。
Apache JMeter:功能性測試和性能評測。官網
Arquillian:集成測試和功能行測試平台,集成Java EE容器。官網
AssertJ:支持流式斷言提高測試的可讀性。官網
Awaitility:用來同步非同步操作的DSL。官網
Cucumber:BDD測試框架。官網
Gatling:設計為易於使用、可維護的和高性能負載測試工具。官網
Hamcrest:可用來靈活創建意圖(intent)表達式的匹配器。官網
JMockit:用來模擬靜態、final方法等。官網
JUnit:通用測試框架。官網
Mockito:在自動化單元測試中創建測試對象,為TDD或BDD提供支持。官網
PowerMock: 支持模擬靜態方法、構造函數、final類和方法、私有方法以及移除靜態初始化器的模擬工具。官網
REST Assured:為REST/HTTP服務提供方便測試的Java DSL。官網
Selenide:為Selenium提供精準的周邊API,用來編寫穩定且可讀的UI測試。官網
Selenium:為Web應用程序提供可移植軟體測試框架。官網
Spock:JUnit-compatible framework featuring an expressive Groovy-derived specification language.官網兼容JUnit框架,支持衍生的Groovy范的語言。
TestNG:測試框架。官網
Truth:Google的斷言和命題(proposition)框架。官網
Unitils:模塊化測試函數庫,支持單元測試和集成測試。官網
WireMock:Web Service測試樁(Stub)和模擬函數。官網
通用工具庫
通用工具類函數庫。
Apache Commons:提供各種用途的函數,比如配置、驗證、集合、文件上傳或XML處理等。官網
args4j:命令行參數解析器。官網
CRaSH:為運行進行提供CLI。官網
Gephi:可視化跨平台網路圖形化操作程序。官網
Guava:集合、緩存、支持基本類型、並發函數庫、通用註解、字元串處理、I/O等。官網
JADE:構建、調試多租戶系統的框架和環境。官網
javatuples:正如名字表示的那樣,提供tuple支持。盡管目前tuple的概念還有留有爭議。官網
JCommander:命令行參數解析器。官網
Protégé:提供存在論(ontology)編輯器以及構建知識系統的框架。官網
網路爬蟲
用於分析網站內容的函數庫。
Apache Nutch:可用於生產環境的高度可擴展、可伸縮的網路爬蟲。官網
Crawler4j:簡單的輕量級網路爬蟲。官網
JSoup:刮取、解析、操作和清理HTML。官網
Web框架
用於處理Web應用程序不同層次間通訊的框架。
Apache Tapestry:基於組件的框架,使用Java創建動態、強健的、高度可擴展的Web應用程序。官網
Apache Wicket:基於組件的Web應用框架,與Tapestry類似帶有狀態顯示GUI。官網
Google Web Toolkit:一組Web開發工具集,包含在客戶端將Java代碼轉為JavaScript的編譯器、XML解析器、RCP官網API、JUnit集成、國際化支持和GUI控制項。
Grails:Groovy框架,旨在提供一個高效開發環境,使用約定而非配置、沒有XML並支持混入(mixin)。官網
Ninja:Java全棧Web開發框架。非常穩固、快速和高效。官網
Pippo:小型、高度模塊化的類Sinatra框架。官網
Play:使用約定而非配置,支持代碼熱載入並在瀏覽器中顯示錯誤。官網
PrimeFaces:JSF框架,提供免費和帶支持的商業版本。包括若干前端組件。官網
Ratpack:一組Java開發函數庫,用於構建快速、高效、可擴展且測試完備的HTTP應用程序。官網
Spring Boot:微框架,簡化了Spring新程序的開發過程。官網
Spring:旨在簡化Java EE的開發過程,提供依賴注入相關組件並支持面向切面編程。官網
Vaadin:基於GWT構建的事件驅動框架。使用服務端架構,客戶端使用Ajax。官網
Blade:國人開發的一個輕量級的MVC框架. 它擁有簡潔的代碼,優雅的設計。官網
業務流程管理套件
流程驅動的軟體系統構建。
jBPM:非常靈活的業務流程管理框架,致力於構建開發與業務分析人員之間的橋梁。官網
Activity:輕量級工作流和業務流程管理框架。官網github
資源
社區
Ⅳ Java的相關技術
JDBC(Java Database Connectivity)提供連接各種關系資料庫的統一介面,作為數據源,可以為多種關系資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。JDBC為工具/資料庫開發人員提供了一個標準的API,據此可以構建更高級的工具和介面,使資料庫開發人員能夠用純Java API 編寫資料庫應用程序,同時,JDBC也是個商標名。 EJB(Enterprise JavaBeans)使得開發者方便地創建、部署和管理跨平台的基於組件的企業應用。 Java RMI(Java Remote Method Invocation)用來開發分布式Java應用程序。一個Java對象的方法能被遠程Java虛擬機調用。這樣,遠程方法激活可以發生在對等的兩端,也可以發生在客戶端和伺服器之間,只要雙方的應用程序都是用Java寫的。 Java IDL(Java Interface Definition Language) 提供與CORBA(Common Object Request Broker Architecture)的無縫的互操作性。這使得Java能集成異構的商務信息資源。 JNDI(Java Naming and Directory Interface)提供從Java平台到的統一的無縫的連接。這個介面屏蔽了企業網路所使用的各種命名和目錄服務。 JMAPI(Java Management API)為異構網路上系統、網路和服務管理的開發提供一整套豐富的對象和方法。 JMS(Java Message Service)提供企業消息服務,如可靠的消息隊列、發布和訂閱通信、以及有關推拉(Push/Pull)技術的各個方面。 JTS(Java transaction Service)提供存取事務處理資源的開放標准,這些事務處理資源包括事務處理應用程序、事務處理管理及監控。 JMF(Java Media Framework API),她可以幫助開發者把音頻、視頻和其他一些基於時間的媒體放到Java應用程序或applet小程序中去,為多媒體開發者提供了捕捉、回放、編解碼等工具,是一個彈性的、跨平台的多媒體解決方案。 Annotation(Java Annotation),在已經發布的JDK1.5(tiger)中增加新的特色叫Annotation。Annotation提供一種機制,將程序的元素如:類,方法,屬性,參數,本地變數,包和元數據聯系起來。這樣編譯器可以將元數據存儲在Class文件中。這樣虛擬機和其它對象可以根據這些元數據來決定如何使用這些程序元素或改變它們的行為。
在Java技術中,值得關注的還有JavaBeans,它是一個開放的標準的組件體系結構,它獨立於平台,但使用Java語言。一個JavaBean是一個滿足JavaBeans規范的Java類,通常定義了一個現實世界的事物或概念。一個JavaBean的主要特徵包括屬性、方法和事件。通常,在一個支持JavaBeans規范的開發環境(如Sun Java Studio 和IBM VisualAge for Java)中,可以可視地操作JavaBean,也可以使用JavaBean構造出新的JavaBean。JavaBean的優勢還在於Java帶來的可移植性。EJB (Enterprise JavaBeans) 將JavaBean概念擴展到Java服務端組件體系結構,這個模型支持多層的分布式對象應用。除了JavaBeans,典型的組件體系結構還有DCOM和CORBA,關於這些組件體系結構的深入討論超出了本書的范圍。 JavaFXSun剛剛發布了JavaFX技術的正式版,它使您能利用JavaFX 編程語言開發富互聯網應用程序(RIA)。JavaFX Script編程語言(以下稱為JavaFX)是Sun微系統公司開發的一種declarative,staticallytyped(聲明性的、靜態類型)腳本語言。JavaFX技術有著良好的前景,包括可以直接調用Java API的能力。因為JavaFXScript是靜態類型,它同樣具有結構化代碼、重用性和封裝性,如包、類、繼承和單獨編譯和發布單元,這些特性使得使用Java技術創建和管理大型程序變為可能。
JavaFX從它2007年發布以來,表現一直差強人意。Oracle收購了Sun之後,在JavaFX中投入了大量的精力進行推廣和更新。JavaFX比較出名的應用應該是在2010年溫哥華冬奧會上,調整了JavaFX中的很多概念,以及重新設計和實現了很多重要組件之後,得到的就是現在的JavaFX 2.0。JavaFX 2.0的beta版已經發布,正式版則定於2010年第3季度發布。JavaFX 2.0的新特性使得開發人員應該需要重新審視它在RIA開發領域中的位置。在很多情況下,JavaFX 2.0也會是不錯的選擇。 JMX(Java Management Extensions,即Java管理擴展)是一個為應用程序、設備、系統等植入
管理功能的框架。JMX可以跨越一系列異構操作系統平台、系統體系結構和網路傳輸協議,靈活的開發無縫集成的系統、網路和服務管理應用。 JPA(Java Persistence API),JPA通過JDK 5.0註解或XML(標准通用標記語言的子集)描述對象-關系表的映射關系,並將運行期的實體對象持久化到資料庫中。 JSP(Java Server Pages)是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標准。JSP技術有點類似ASP技術,它是在傳統的網頁HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP標記(tag),從而形成JSP文件(*.jsp)。 用JSP開發的Web應用是跨平台的,既能在Linux下運行,也能在其他操作系統上運行。 Spring Framework【Java開源J2EE框架】
Spring是一個解決了許多在J2EE開發中常見的問題的強大框架。Spring提供了管理業務對象的一致方法並且鼓勵了注入對介面編程而不是對類編程的良好習慣。Spring的架構基礎是基於使用JavaBean屬性的Inversion of Control容器。然而,這僅僅是完整圖景中的一部分:Spring在使用IoC容器作為構建完關注所有架構層的完整解決方案方面是獨一無二的。Spring提供了唯一的數據訪問抽象,包括簡單和有效率的JDBC框架,極大的改進了效率並且減少了可能的錯誤。Spring的數據訪問架構還集成了Hibernate和其他O/R mapping解決方案。Spring還提供了唯一的事務管理抽象,它能夠在各種底層事務管理技術,例如JTA或者JDBC事務提供一個一致的編程模型。Spring提供了一個用標准Java語言編寫的AOP框架,它給POJOs提供了聲明式的事務管理和其他企業事務--如果你需要--還能實現你自己的 aspects。這個框架足夠強大,使得應用程序能夠拋開EJB的復雜性,同時享受著和傳統EJB相關的關鍵服務。Spring還提供了可以和IoC容器集成的強大而靈活的MVCWeb框架。【SpringIDE:Eclipse平台下一個輔助開發插件】。
WebWork 【Java開源Web框架】
WebWork是由OpenSymphony組織開發的,致力於組件化和代碼重用的拉出式MVC模式J2EE Web框架。WebWork目前最新版本是2.1,WebWork2.x前身是Rickard Oberg開發的WebWork,但WebWork已經被拆分成了Xwork1和WebWork2兩個項目。Xwork簡潔、靈活功能強大,它是一個標準的Command模式實現,並且完全從web層脫離出來。Xwork提供了很多核心功能:前端攔截機(interceptor),運行時表單屬性驗證,類型轉換,強大的表達式語言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。WebWork2建立在Xwork之上,處理HTTP的響應和請求。WebWork2使用ServletDispatcher將HTTP請求的變成Action(業務層Action類),session(會話)application(應用程序)范圍的映射,request請求參數映射。WebWork2支持多視圖表示,視圖部分可以使用JSP,Velocity,FreeMarker,JasperReports,XML等。在WebWork2.2中添加了對AJAX的支持,這支持是構建在DWR與Dojo這兩個框架的基礎之上。【EclipseWork:用於WebWork輔助開發的一個Eclipse插件】
Struts【Java開源Web框架】
Struts是一個基於SunJ2EE平台的MVC框架,主要是採用Servlet和JSP技術來實現的。由於Struts能充分滿足應用開發的需求,簡單易用,敏捷迅速,在過去的一年中頗受關注。Struts把Servlet、JSP、自定義標簽和信息資源(message resources)整合到一個統一的框架中,開發人員利用其進行開發時不用再自己編碼實現全套MVC模式,極大的節省了時間,所以說Struts是一個非常不錯的應用框架。【StrutsIDE:用於Struts輔助開發的一個Eclipse插件】
Hibernate 【Java開源持久層框架】
Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱資料庫。Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序實用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。Eclipse平台下的Hibernate輔助開發工具:【Hibernate Synchronizer】【MiddlegenIDE】
JDiy 【Java極速開發框架. 開源】
JDiy是一款java極速開發框架,無需ORM,極少的代碼便可以完成資料庫的CRUD(增刪改查);
可同時用於javaEE或者javaSE開發環境;完美支持各大主流資料庫,如:MySQL, SQL Server, Oracle, DB2, PostgreSQL,SQLite;
同時JDiy內置一套精簡而不失強大的智能開發平台(開發者登錄後,隨心所欲地零代碼生成網站管理系
JFinal【Java極速WEB+ORM框架】
jfinal是基於 Java 語言的極速 WEB + ORM 框架,其核心設計目標是開發迅速、代碼量少、學習簡單、功能強大、輕量級、易擴展、Restful。在擁有Java語言所有優勢的同時再擁有ruby、python、php等動態語言的開發效率!主要特點1.MVC架構,設計精巧,使用簡單 2.遵循COC原則,零配置,無xml 3.獨創Db + Record模式,靈活便利 4.ActiveRecord支持,使資料庫開發極致快速 5.自動載入修改後的java文件,開發過程中無需重啟web server 6.AOP支持,攔截器配置靈活,功能強大 7.Plugin體系結構,擴展性強 8.多視圖支持,支持FreeMarker、JSP、Velocity9.強大的Validator後端校驗功能 10.功能齊全,擁有struts2的絕大部分功能 11.體積小僅218K,且無第三方依賴
Quartz 【Java開源Job調度】
Quartz是OpenSymphony開源組織在Job scheling領域又一個開源項目,它可以與J2EE與J2SE應用程序相結合也可以單獨使用。Quartz可以用來創建簡單或為運行十個,百個,甚至是好幾萬個Jobs這樣復雜的日程序表。Jobs可以做成標準的Java組件或EJBs。Quartz的最新版本為Quartz 1.5.0。
Velocity 【Java開源模板引擎】
Velocity是一個基於java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象。當Velocity應用於web開發時,界面設計人員可以和java程序開發人員同步開發一個遵循MVC架構的web站點,也就是說,頁面設計人員可以只關注頁面的顯示效果,而由java程序開發人員關注業務邏輯編碼。Velocity將java代碼從web頁面中分離出來,這樣為web站點的長期維護提供了便利,同時也為我們在JSP和PHP之外又提供了一種可選的方案。Velocity的能力遠不止web站點開發這個領域,例如,它可以從模板(template)產生SQL和PostScript、XML,它也可以被當作一個獨立工具來產生源代碼和報告,或者作為其他系統的集成組件使用。Velocity也可以為Turbine web開發架構提供模板服務(template service)。Velocity+Turbine提供一個模板服務的方式允許一個web應用以一個真正的MVC模型進行開發。【VeloEclipse :Velocity在Eclipse平台下的一個輔助開發插件】
IBATIS 【Java開源持久層框架】
使用ibatis提供的ORM機制,對業務邏輯實現人員而言,面對的是純粹的Java對象,這一層與通過Hibernate 實現ORM 而言基本一致,而對於具體的數據操作,Hibernate 會自動生成SQL 語句,而ibatis 則要求開發者編寫具體的SQL語句。相對Hibernate等「全自動」ORM機制而言,ibatis 以SQL開發的工作量和資料庫移植性上的讓步,為系統設計提供了更大的自由空間。作為「全自動」ORM 實現的一種有益補充,ibatis 的出現顯得別具意義。
Compiere ERP&CRM 【Java開源ERP與CRM系統】
Compiere ERP&CRM為全球范圍內的中小型企業提供綜合型解決方案,覆蓋從客戶管理、供應鏈到財務管理的全部領域,支持多組織、多幣種、多會計模式、多成本計算、多語種、多稅制等國際化特性。易於安裝、易於實施、易於使用。只需要短短幾個小時,您就可以使用申購-采購-發票-付款、報價-訂單-發票-收款、產品與定價、資產管理、客戶關系、供應商關系、員工關系、經營業績分析等強大功能了。
Apache MINA 【java開源socket框架】
ApacheMINA是一個網路應用程序框架,用來幫助用戶簡單地開發高性能和高可擴展性的網路應用程序。它提供了一個通過java NIO在不同的傳輸例如TCP/IP和UDP/IP上抽象的事件驅動的非同步API。 IntelliJ IDEA【Java開發工具】
IntelliJ IDEA是JetBrains公司的產品,比老一代Java開發工具Eclipse更漂亮,更智能。Google官方Android開發工具Android Studio就是基於intellij IDEA開發的。Intellij IDEA擁有出色的界面設計,使用Darculah黑色界面主題會讓你愛不釋手。在智能代碼助手、代碼自動提示、重構、J2EE支持、Ant、JUnit、CVS整合、代碼審查、 創新的GUI設計等方面的功能可以說是超常的。IntelliJ IDEA分為商業版本,個人版本,與community社區版本。其中,community社區版本是免費的,但是功能性並不弱,對於學習者和個人開發者來說完全足夠了。
Eclipse 【Java開源開發工具】
Eclipse平台是IBM向開放源碼社區捐贈的開發框架,它之所以出名並不是因為IBM宣稱投入開發的資金總數 —4千萬美元,而是因為如此巨大的投入所帶來的成果:一個成熟的、精心設計的以及可擴展的體系結構。
NetBeans【Java開源開發工具】
NetBeans IDE 是一個為軟體開發者提供的自由、開源的集成開發環境。您可以從中獲得您所需要的所有工具,用Java、C/C++ 甚至是Ruby 來創建專業的桌面應用程序、企業應用程序、web 和移動應用程序。此IDE 可以在多種平台上運行,包括Windows、Linux、Mac OS X以及Solaris;它易於安裝且非常方便使用。
XPlanner【Java開源項目管理】
XPlanner 一個基於Web的XP團隊計劃和跟蹤工具。XP獨特的開發概念如iteration、user stories等,XPlanner都提供了相對應的的管理工具,XPlanner支持XP開發流程,並解決利用XP思想來開發項目所碰到的問題。XPlanner特點包括:簡單的模型規劃,虛擬筆記卡(Virtual note cards),iterations、user stories與工作記錄的追蹤,未完成stories將自動迭代,工作時間追蹤,生成團隊效率,個人工時報表,SOAP界面支持。
HSQLDB【Java開源DBMS資料庫】
HSQLDB(Hypersonic SQL)是純Java開發的關系型資料庫,並提供JDBC驅動存取數據。支持ANSI-92 標准SQL語法。而且他占的空間很小。大約只有160K,擁有快速的資料庫引擎。
Liferay【Java開源Portal門戶】
代表了完整的J2EE應用,使用了Web、EJB以及JMS等技術,特別是其前台界面部分使用Struts 框架技術,基於XML的portlet配置文件可以自由地動態擴展,使用了Web Services來支持一些遠程信息的獲取,使用Apache Lucene實現全文檢索功能。
JetSpeed 【Java開源Portal門戶】
Jetspeed是一個開放源代碼的企業信息門戶(EIP)的實現,使用的技術是Java和XML。用戶可以使用瀏覽器,支持WAP協議的手機或者其它的設備訪問Jetspeed架設的信息門戶獲取信息。Jetspeed扮演著信息集中器的角色,它能夠把信息集中起來並且很容易地提供給用戶。
JOnAS 【Java開源J2EE伺服器】
JOnAS是一個開放源代碼的J2EE實現,在ObjectWeb協會中開發。整合了Tomcat或Jetty成為它的Web容器,以確保符合Servlet 2.3和JSP 1.2規范。JOnAS伺服器依賴或實現以下的Java API:JCA、JDBC、JTA 、JMS、JMX、JNDI、JAAS、JavaMail。
JFox3.0 【Java開源J2EE伺服器】
JFox是Open Source Java EE Application Server,致力於提供輕量級的Java EE應用伺服器,從3.0開始,JFox提供了一個支持模塊化的MVC框架,以簡化EJB以及Web應用的開發! 如果您正在尋找一個簡單、輕量、高效、完善的Java EE開發平台,那麼JFox正是您需要的。 軟體架構作為一個概念,體現在技術和業務兩個方面。
從技術角度來說:軟體架構隨著技術的革新不斷地更新其內容,軟體架構建立於當前技術和一些基本原則的基礎之上。
基本原則:分層原則、模塊化原則、介面實現分離原則、細節隱藏原則、依賴倒置原則 平台
Java平台由Java虛擬機(Java Virtual Machine)和Java應用編程介面(Application ProgrammingInterface、簡稱API)構成。Java應用編程介面為此提供了一個獨立於操作系統的標准介面,可分為基本部分和擴展部分。在硬體或操作系統平台上安裝一個Java平台之後,Java應用程序就可運行。Java平台已經嵌入了幾乎所有的操作系統。這樣Java程序可以只編譯一次,就可以在各種系統中運行。Java應用 編程介面已經從1.1x版發展到1.2版。常用的Java平台基於Java1.5,最近版本為Java1.8。
Java分為三個體系JavaSE(Java2 Platform Standard Edition,java平台標准版),JavaEE(Java 2 Platform,Enterprise Edition,java平台企業版),JavaME(Java 2 Platform Micro Edition,java平台微型版)。
Java SE Java SE(Java Platform,Standard Edition)。Java SE 以前稱為J2SE。它允許開發和部署在桌面、伺服器、嵌入式環境和實時環境中使用的Java應用程序。Java SE 包含了支持Java Web 服務開發的類,並為Java Platform,Enterprise Edition(Java EE)提供基礎。 Java EE Java EE(Java Platform,Enterprise Edition)。這個版本以前稱為J2EE。企業版本幫助開發和部署可移植、健壯、可伸縮且安全的伺服器端 Java 應用程序。Java EE 是在Java SE 的基礎上構建的,它提供Web 服務、組件模型、管理和通信API,可以用來實現企業級的面向服務體系結構(service-oriented architecture,SOA)和Web 2.0 應用程序。 Java ME Java ME(Java Platform,Micro Edition)。這個版本以前稱為J2ME,也叫K-JAVA。Java ME 為在移動設備和嵌入式設備(比如手機、PDA、電視機頂盒和列印機)上運行的應用程序提供一個健壯且靈活的環境。Java ME 包括靈活的用戶界面、健壯的安全模型、許多內置的網路協議以及對可以動態下載的連網和離線應用程序的豐富支持。基於Java ME 規范的應用程序只需編寫一次,就可以用於許多設備,而且可以利用每個設備的本機功能。
Ⅳ android green 修改方法怎麼寫
關於greenDao的使用
第一篇How to get started ?
原文地址:http://green-orm.com/documentation/how-to-get-started/
該教程會帶你瀏覽一個簡單的greenDao示例工程。地址:https://github.com/greenrobot/greenDAO,該工程包含兩個子工程:
DaoExample和DaoExampleGenerator。你可以clone到本地,運行或者直接在github上直接瀏覽。
如果你從git倉儲中檢出了DaoExample,可以直接像Android應用一樣運行它。正如你所看到的,它就是一個簡單的筆記本。可以添加新的note,
或者點擊已存在的note進行刪除。
預生成代碼和創建表
在src-gen目錄下,你可以找到一些已經生成的文件
1)Note.java 一個包含一個Note所有數據的java類。
2)NoteDao.java 一個DAO類,是操作Note 對象的介面。
你可以通過DaoExampleGenerator工程再次生成Note和NoteDao。
使用DaoMaster類可以獲得一個方便的SQLiteOpenHelper:
new DaoMaster.DevOpenHelper(this, "notes-db", null)
你不必編寫「CREATE TABLE」 SQL語句,greenDao會為你完成。
插入和刪除Note對象
創建了Note表後,就可以存儲一些note到資料庫里了。這是在NoteActivity類里完成的。在onCreate方法里,我們准備了一個DAO對象:
1 2 3 Master = new DaoMaster(db); Session = Master.newSession(); noteDao = Session.getNoteDao();
添加一個新的note到資料庫中:
1 2 3 Note note = new Note(null, noteText, comment, new Date()); noteDao.insert(note); Log.d("DaoExample", "Inserted new note, ID: " + note.getId());
該示例只是創建並插入了一個java對象。但insert方法返回的時候,資料庫的ID已經分發到了剛插入的Note對象上了。在log中可以看到。
刪除一條note:非常簡單明,在onListItemClick方法中可以看到
1 noteDao.deleteByKey(id);
你也可以看一下其它的DAO方法:loadAll、update。
數據模型化和代碼的生成
為了擴展note或者創建新的實體,你可以看一下DaoExampleGenerator工程。它包含了一個單例的類,該類中包含了數據模型的定義代碼。
1 2 3 4 5 6 7 Schema schema = new Schema(1, "de.greenrobot.example"); Entity note= schema.addEntity("Note");note.addIdProperty(); note.addStringProperty("text").notNull(); note.addStringProperty("comment");note.addDateProperty("date"); new DaoGenerator().generateAll("../DaoExample/src-gen", schema);
正如你所看到的,你可以創建一個Schema對象,通過它你可以添加實體,一個實體連接了一張資料庫表。
一個實體包含一些屬性,它們可以被映射到資料庫的columns。
一旦schema定義完成,你可以觸發代碼生成器,Note.java和NoteDao.java文件就是這樣被創建的。
下一步:
對greenDao有了初步的了解,你可以自己動手試試了。當然,請查看下文檔http://green-orm.com/documentation/,
如果沒有找到你想要的,可以使用support options
第二篇 介紹
GreenDao是一個用於Android開發的對象/關系映射(ORM)工具。它向SQLite資料庫提供了一個對象導向的介面。像GreenDao這樣的ORM工具不僅為你省去了很多的重復工作,而且提供了更簡便的操作介面。
代碼生成的工程結構圖
為了在你的Android項目中使用GreenDao,你需要創建一個二級工程:「generator project」,它的任務就是為你的domain生成具體的代碼。這個生成器工程就是一個普通的java工程。確保greenDao 的greenDao-generator.jar和 freemarker.jar 在classpath中。創建一個可執行的java類,構建你的實體模型並觸發代碼生成器,更多細節,可以參看 modelling文檔。
核心類
一旦生成了指定的代碼,就可以在你的android工程中使用greenDao了。別忘記在你的android工程中引入greenDao的核心jar包:greenDao.jar。以下是GreenDao的一些必要介面。
DaoMaster:
master以一定的模式持有資料庫對象(SQLiteDatabase)並管理一些DAO類(而不是對象)。
有一個靜態的方法創建和drop資料庫表。它的內部類OpenHelper和DevOpenHelper是SQLiteOpenHelper的實現類,用於創建SQLite資料庫的模式。
DaoSession:
管理指定模式下所有可用的DAO對象,你可以通過某個get方法獲取到。DaoSession提供一些通用的持久化方法,比如對實體進行插入,載入,更新,刷新和刪除。最後DaoSession對象會跟蹤identity scope,更多細節,可以參看 session文檔。
DAOs(Data access objects):
數據訪問對象,用於實體的持久化和查詢。對於每一個實體,greenDao會生成一個DAO,相對於DaoSession它擁有更多持久化的方法,比如:載入全部,插入(insertInTx,語境不明了,暫且簡單的翻譯成插入)。
實體
可持久化的對象。通常,實體可以被生成,不用手動去寫。在資料庫的行中,使用的都是標準的java對象的屬性(比如POJO或者JavaBean)。
1 2 3 4 user.addIdProperty(); user.addStringProperty("name"); user.addStringProperty("password");user.addIntProperty("yearOfBirth");
在示例中有一個Note實體,通過它的DAO,我們可以對指定的實體進行持久化的操作。
第三篇 實體的模型化
使用greenDao的第一步:創建一個代表持久化數據的實體模型。greenDao會依賴該模型為Dao生成java代碼。
該模型本身是用java代碼定義的,很簡單:在DaoExampleGenerator工程的基礎上創建一個java對象。具體你可以參看:
http://green-orm.com/documentation/how-to-get-started/
下面的插圖描繪了元模型,展示了一些用於描述domain具體模型的類。
Schema
實體數據schema是你定義的第一個對象,通過schema的版本和預設的java包調用構造器。
1 Schema schema = new Schema(1, "de.greenrobot.example");
這個預設的java包會在greenDao生成實體、DAOs、和JUnit測試的時候使用。如果那些預設值是正確的,那麼就完成了第一步。
如果你希望將DAO和測試類創建到不同的包中,可以重新定義schema的定義代碼:
1 2 schema.setDefaultJavaPackageTest("de.greenrobot.example.test");schema.setDefaultJavaPackageDao("de.greenrobot.example.");
對於實體,該schema也有兩個預設的標記,它們是可以被復寫的。這些標記可以區分實體是否是激活狀態,是否應該使用sections。這些特性在文檔里並沒有,你可以看一下發布源碼中的測試工程。
1 2 schema2.enableKeepSectionsByDefault(); schema2.enableActiveEntitiesByDefault();
實體
一旦你擁有了一個schema對象,你就可以使用它去添加實體了。
1 Entity user = schema.addEntity("User");
一個實體有不同的可變更設置,更重要的是,你可以添加一些屬性到實體。
1 2 3 4 user.addIdProperty(); user.addStringProperty("name"); user.addStringProperty("password");user.addIntProperty("yearOfBirth");
除了實體,還可以添加,一對一和一對多的關系。
屬性和主鍵
以上的實體部分展示了如何給一個實體添加屬性,實體的addXXXProperty方法返回一個PropertyBuilder對象,可以用於配製屬性,
例如,使用columnName去復寫預設的或者你提供的column name。在ProperyBuilder對象上調用getProperty方法去訪問屬性對象,
對於指數(indices )和關系的創建是有必要的。
創建主鍵的約束
現在實體必須擁有一個long或者Long類型的屬性作為它們的主鍵,這是Android和SQLite推薦的實踐方式。因為,在將來,greenDao要准備處理很多主鍵的腳本,但並不是每件事都能完全實現。為了解決這個問題,你可以使用一個long類型的鍵並且使用一個唯一的下標去處理這個預期的key屬性。
預設
greenDao會嘗試以合理的預設值進行工作,所以開發者不用單個的配置它們。比如,表和其列名是從實體和屬性名中獲取到的,而不是java中的駝峰。預設的資料庫名是大寫的,單詞間用下劃線分隔開。比如:屬性「creationDate」在資料庫列中的映射為「CREATION_DATE」,
關系
一對多和多對多的關系在http://green-orm.com/documentation/relations/中有注釋。
繼承、介面、序列化
實體可以從其他非實體類繼承,其父類可以通過setSuperclass(String)方法指定,注意:它可能會有其它的實體作為父類(但這里沒有多態查詢)。
比如:
1 myEntity.setSuperclass("MyCommonBehavior");
通常,使用介面作為實體屬性和行為的通用基類是比較好的。比如:一個實體A和B共享了一套屬性,這些屬性可以定義在C中。下面是一個序列化B的列子:
1 2 3 entityA.implementsInterface("C"); entityB.implementsInterface("C"); entityB.implementsSerializable();
觸發生成器
一旦你的實體schema放置好了,你可以觸發代碼生成器進行處理。在generator工程中,你可以實例化DaGenerator並調用generateAll中的一個方法:
1 2 DaoGenerator Generator = new DaoGenerator(); Generator.generateAll(schema, "../MyProject/src-gen");
你所需要的就是schema對象和目標文件夾,通常該文件夾就是你android工程的資源文件夾。如果你想把這些測試類放到其他目錄下,可以把目的文件夾作為第三個參數傳入。
保持獨立性(Keep sections 保持自定義的代碼不會被覆蓋)
實體類在每一次生成器運行的時候都會被覆蓋。greenDao允許添加自定義的代碼到實體,通過「keep」 ,可以滿足它們。在schema中使用enableKeepSectinsByDefault(),或者setHasKeepSections(true)在選中的實體中。一旦使用,3個獨立的部分會在實體中生成:
1 2 3 4 5 6 7 8 // KEEP INCLUDES - put your custom includes here // KEEP INCLUDES END ... // KEEP FIELDS - put your custom fields here // KEEP FIELDS END ... // KEEP METHODS - put your custom methods here // KEEP METHODS END
現在,你可以在 KEEP [...] and KEEP [...] END.中寫入你的代碼。注意,不要修改KEEP注釋。在該范圍的代碼會在代碼重新生成的時候不被覆蓋。對於備份或者提交代碼時出現的意外錯誤,這是一個不錯的選擇解決方案。
Ⅵ android green框架中,多表怎麼插入數據和關聯數據
一.下載GreenDao
要使用肯定要先下載他的軟體包了,官網上有它的連接,對於marven和gradle環境直接到serarch.maven.org上下載jar包就好了。
首先我們要創建javagenerator工程green-generator-1.3.0.jar 和 freemarker-2.3.20.jar是我們創建javagenerator工程時生成Dao文件需要用到的(什麼是我說的Dao文件,往下看就會知道)
green-1.3.7.jar是Android開發中需要用到的
二.創建generator工程(用來生成GreenDao開發過程中需要的java文件)
(1)創建Java工程(非Android工程)
(2)導入greenDao-generator.jar和freemarker.jar兩個包。freemarker是一個用java寫的模板引擎,它能夠基於模板來生成文本輸出。應該就是用來自動生成DAO文件的。eclipse下面就是在properties–> Java build path –> libraries下面導入jar包。
(3)創建一個包javagreen
(4)創建一個類,類名為ExampleDaoGenerator,類的定義如下:
package javagreen;
import de.greenrobot.generator.DaoGenerator;
import de.greenrobot.generator.Entity;
import de.greenrobot.generator.Property;
import de.greenrobot.generator.Schema;
import de.greenrobot.generator.ToMany;
/**
* Generates entities and DAOs for the example project DaoExample.
*
* Run it as a Java application (not Android).
*
* @author Markus
*/
public class ExampleDaoGenerator
{
//總之main函數就執行了下面幾個函數
public static void main(String[] args) throws Exception
{
// 參數3是資料庫版本號,「com.cn.speedchat.green」是包名,也就是說生成的Dao文件會在這個包下,可以將Schema理解為資料庫上下文吧
Schema schema = new Schema(3, "com.cn.speedchat.green");
//addNote() addSession() addReplay()這三個函數相當於建立了三個表,表名你都可以不用管了會自動生成
addNote(schema);
addSession(schema);
addReplay(schema);
addCustomerOrder(schema);
//這個是生成Dao文件的路徑的位置,這個代表當前工程的上一級目錄的javagreen的src-gen文件夾裡面,其實就是跟src同一級目錄,所以你自己要在src同一級目錄下新建一個src-gen文件夾待會要生成的文件
new DaoGenerator().generateAll(schema, "../javagreen/src-gen");
}
//這個是一個Note表,然後後面的node.add***是表的欄位名以及屬性
private static void addNote(Schema schema)
{
//"MqttChatEntity"相當於是表的類名,用MqttChatEntity生成對象就可以訪問這個表屬性了,也就是這個表對應了這個類,待會使用你就會明白了
Entity note = schema.addEntity("MqttChatEntity");
note.addIdProperty().autoincrement();
note.addIntProperty("mode").notNull();
note.addStringProperty("sessionid").notNull();
note.addStringProperty("from").notNull();
note.addStringProperty("to").notNull();
note.addStringProperty("v_code");
note.addStringProperty("timestamp").notNull();
note.addStringProperty("platform");
note.addStringProperty("message");
note.addBooleanProperty("isread").notNull();
note.addLongProperty("gossipid");
note.addStringProperty("gossip");
note.addIntProperty("chattype").notNull();
note.addStringProperty("imagepath");
note.addStringProperty("base64image");
}
//這個是一個Session表,然後後面的node.add***是表的欄位名以及屬性(這是我寫的會話的一個表)
private static void addSession(Schema schema)
{
Entity note = schema.addEntity("SessionEntity");
note.addIdProperty().autoincrement();
note.addStringProperty("sessionid").notNull().unique();
note.addStringProperty("from").notNull();
note.addStringProperty("to").notNull();
note.addLongProperty("gossipid").notNull();
note.addStringProperty("gossip");
note.addIntProperty("sessiontype").notNull();
note.addBooleanProperty("asdasd").notNull();
}
//這個是一個Replay表,然後後面的node.add***是表的欄位名以及屬性(這是我寫的回復的一個表)
private static void addReplay(Schema schema)
{
//ReplayEntity對應的類名
Entity note = schema.addEntity("ReplayEntity");
note.addIdProperty().autoincrement();
note.addIntProperty("mode").notNull();
note.addStringProperty("from").notNull();
note.addStringProperty("to").notNull();
note.addStringProperty("v_code");
note.addStringProperty("timestamp").notNull();
note.addStringProperty("platform");
note.addStringProperty("message");
note.addIntProperty("msgtype").notNull();
note.addBooleanProperty("isread").notNull();
}
//這個不用管了,照抄吧
private static void addCustomerOrder(Schema schema)
{
Entity customer = schema.addEntity("Customer");
customer.addIdProperty();
customer.addStringProperty("name").notNull();
Entity order = schema.addEntity("Order");
order.setTableName("ORDERS"); // "ORDER" is a reserved keyword
order.addIdProperty();
Property orderDate = order.addDateProperty("date").getProperty();
Property customerId = order.addLongProperty("customerId").notNull().getProperty();
order.addToOne(customer, customerId);
ToMany customerToOrders = customer.addToMany(order, customerId);
customerToOrders.setName("orders");
customerToOrders.orderAsc(orderDate);
}
}
1)增加表如果你自己想加一些其他的表的話,你可以自己按照addSession,addNote ,addReplay三個函數的方式加,類名、欄位名可以自己隨便取比如說,比我我要加一個用戶表,欄位包括name,age,sex三個,我可以這樣做
private static void addUser(Schema schema)
{
Entity note = schema.addEntity("UserEntity");
note.addIdProperty().autoincrement();
note.addStringProperty("name").notNull();
note.addIntProperty("age").notNull();
//true代表男,false代表女
note.addBooleanProperty("sex").notNull();
}
然後在main函數裡面做如下調用
public static void main(String[] args) throws Exception
{
Schema schema = new Schema(3, "com.cn.speedchat.green");
addNote(schema);
addSession(schema);
addReplay(schema);
addUser(schema);
addCustomerOrder(schema);
new DaoGenerator().generateAll(schema, "../javagreen/src-gen");
}
2)刪除表當然一些不需要的表你可以不用,刪掉就行,比如說你不須要addReplay,你就在main函數裡面別調用addReplay(schema)就行
總之呢,這就是一個基於greenDao-generator.jar和freemarker.jar兩個包的java工程
然後運行該工程,控制台列印出如下結果:
greenDAO Generator Copyright 2011-2013 Markus Junginger,
greenrobot.de. Licensed under GPL V3. This program comes with
ABSOLUTELY NO WARRANTY Processing schema version 3… Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/MqttChatEntityDao.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/MqttChatEntity.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/SessionEntityDao.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/SessionEntity.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/ReplayEntityDao.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/ReplayEntity.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/CustomerDao.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/Customer.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/OrderDao.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/Order.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/DaoMaster.java
Written
/home/csm/workspace/javagreen/src-gen/com/cn/speedchat/green/DaoSession.java
Processed 5 entities in 189ms
這代表成功的生成了Dao文件,然後我們按F5刷新該工程,在查看src-gen目錄文件,自動生成了很多java文件,這就是我們要的,我這里截圖給大家看
但是有很多錯誤是不是,沒關系,這個工程識別不了這些文件,這些文件是基於green-1.3.7.jar包的,是Android工程裡面要用到的。先不管這個java工程了。
Ⅶ 在哪裡可以學習Android開發慕課網怎麼樣呢
我就一直在幕課學,那裡有CSS、HTML、freemarker、jquery、js、php、DW、javascript等等教程都有。而且它還是個免費的平台
Ⅷ 零基礎如何自學java
關於自學,先提幾條建議,望採納!
找一個行業當中的師傅進行規劃和指導。
每天規劃好學習時間,不要中斷。
先掌握了解知識體系後編寫項目,邊抓細節。
俗話說態度決定一切,一個人的學習態度相當重要,而一個良好的態度不僅會提高你的效率,而且還會影響效果。
學習編程是一個漫長而痛苦的過程,需要持之以恆的耐心,千自萬不能急於求成。對於一名初學者來說,最重要的還是打好基礎。
另外,所有語言的知識體系分為三大塊:
數據存儲 (內存,文件,資料庫,分布式,集群, 關系型 ,非關系型 。。)
業務邏輯 (業務需求,語言語法,演算法,類庫框架,性能優化等)
信息交互(展示)(多端,app,小程序,公眾號,移動端,pc端,web開發等。。)
這三塊知識作為學習來說,可以有側重,但是不能有某一塊完全不懂。
一般的初學者
javase
資料庫 mysql
web開發(html,css,JavaScript,ajax)
javaee jspservlet
spring springMVC mybatis
項目實戰
最後附上學習路線,供你參考:
如需自學的資料,私聊回復「java」即可獲取~、
希望能幫到你,望採納~