當前位置:首頁 » 編程語言 » java工程路徑

java工程路徑

發布時間: 2024-04-11 01:10:23

1. java工程師以後發展路徑是什麼

最近有些網友問我如何自學 Java 後端,還有些是想從別的方向想轉過來,但都不太了解 Java 後端究竟需要學什麼,究竟要從哪裡學起,哪些是主流的 Java 後端技術等等,導致想學,但又很迷茫,不知從何下手。我就以過來人的經歷,寫在這篇博客里,不一定都對,但都是我根據自己的經歷總結出來的,供你們的參考。

Java 基礎

Java 是一門純粹的面向對象的編程語言,所以除了基礎語法之外,必須得弄懂它的 oop 特性:封裝、繼承、多態。此外還有泛型、反射的特性,很多框架的技術都依賴它,比如 Spring 核心的 Ioc 和 AOP,都用到了反射,而且 Java 自身的動態代理也是利用反射實現的,這里我特意寫了一篇Java動態代理原理分析。此外還有 Java 一些標准庫也是非常常見,比如集合、I/O、並發,幾乎在 Web 開發中無處不在,也是面試經常會被問到的,所以在自學 Java 後端之前,不妨先打好這些基礎,另外還有 Java8 的一些新特性,也要重點關注,比如 Lambda 表達式、集合的 Stream 流操作、全新的 Date API 等等,關於新特性,我也寫了幾篇關於這方面的博客,請自行找吧,就不貼出來了。

關於書籍推薦,我是不建議初學者一開始就拿著「Java 編程思想」啃的,因為當初我就是那個當天下午決定自學 Java,晚上就抱著這本書啃的人,說實話,我當時真的不懂它在說啥,因為我沒有一點的面向對象語言編程的基礎,而這本書又寫得太博大精深了,在當時的我來說,完全是天書,但是我認為它仍然是 Java 界的聖經,每讀一次都有所收獲。我在這里推薦你們一開始先看「Java 核心技術」,這本書講得比較通俗易懂,初學者比較能接受。

關於視頻推薦,我當初就是聽某客的畢向東老師講的 Java 基礎教程,畢老師講的實在是太生動有趣了,不知不覺把我帶進 Java 的坑裡無法自拔,有時候我會聽他視頻時笑出聲來,也許是我那段自學階段最有趣的時刻了。

資料庫

關於 sql 方面:SQL 教程、MySQL 教程

我是了解了一些基礎語法之後,就直接跟著視頻的老師做一些表操作實戰練習了,比如單表查詢、多表查詢等。我建議學 sql 切勿眼高手低,需多加練習,不要只看懂了就行,因為工作中寫得一手簡練的 sql 是非常重要的。在這里我說下我在項目一直秉承著 sql 語句是能避免多表查詢就避免多表查詢,能夠分開多條語句就分開多條語句,因為這里涉及到多表查詢性能和資料庫擴展的問題。

關於 JDBC 方面:JDBC 教程、JDBC 獲取連接對象源碼分析

你需要弄懂 JDBC API 的用法,其實它只是一組規范介面,所有資料庫驅動只要實現了 JDBC,那麼我們就可以通過標準的 API 調用相應的驅動,完全不用知道驅動是怎麼實現的,這就是面向介面編程的好處。而且對於 JDBC 我是直接看視頻去理解的,跟著視頻做了一個基於 Apache Dbutils 工具做了一個具有事務性的小工具,我特意用思維導圖總結了一下:

Web 基礎

曾經開源中國創始人紅薯寫了一篇文章「初學 Java Web 開發,請遠離各種框架,從 Servlet 開發」,我覺得他說的太對了,在如今 Java 開發中,很多開發者只知道怎麼使用框架,但根本不懂 Web 的一些知識點,其實框架很多,但都基本是一個套路,所以在你學習任何框架前,請把 Web 基礎打好,把 Web 基礎打好了,看框架真的是如魚得水。

關於 Http 協議,這篇文章就寫得很清楚:Http協議

關於 Web 基礎這方面數據推薦,我當時是看的是「Tomcat 與 Java Web 開發技術詳解」,很詳細地講解了整個 Java Web 開發的技術知識點,但現在看來,我覺得裡面講的有一些技術確實有點老舊了,不過可以了解一下 Java Web 開發的歷史也是不錯的。所以在 Web 基礎這方面我都是看某客的崔老師講的「超全面 Java Web 視頻教程」,講得很詳細很生動,還有實戰項目!

關於 JSP,你只要了解它其實就是一個 Servlet 就行了,關於它的一些標簽用法,我認為可以直接忽略,因為現在互聯網幾乎沒哪間公司還用 JSP,除了一些老舊的項目。現在都是流行前後端分離,單頁應用,後端只做 API 介面的時代了,所以時間寶貴,把這些時間重點放在 Servlet 規范上面吧。

關於 Tomcat,它是一個 Web 容器,我們寫的後端項目都要部署到Web容器才能運行,它其實是一個遵循 Http,通過 Socket 通信與客戶端進行交互的服務端程序:Tomcat結構及處理請求過程

Web 主流框架

Java Web 框架多如牛毛,等你有一定經驗了,你也可以寫一個 Web 框架,網上很多說 Spring、Struts2、Hibernate 是 Java 三架馬車,我只想說,那是很久遠的事情了,我嚴重不推薦 Struts2、Hibernate,相信我,一開始只需要上手 Spring、SpringMVC、Mybatis 就可以了,特別是 Spring 框架,其實 Spring 家族的框架都是很不錯的。

但是提醒一點就是,千萬不要沉迷於各種框架不能自拔,以會多種用法而沾沾自喜,導致知其然而不知其所以然。

Spring其核心思想就是 IOC 和 AOP:

談談對 Spring IOC 的理解

Spring 面向切面編程

SpringMVC 它的思想是全部請求統一用一個 Servlet 去做請求轉發與控制,這個 Servlet 叫 DispatcherServlet:

SpringMVC 初始化過程

SpringMVC 處理請求過程

Mybatis 它可實現動態拼裝 sql,避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集:

mybatis 入門教程

Mybatis 深入淺出系列

Web 框架進階

使用了 SSM 框架後,你會覺得框架也不過這么回事,如果你對 Spring 有過大概了解,你也會產生想寫一個「山寨版」Spring 的心思了,一個輕量級 Web 框架主要具備以下功能:

  • 可讀取用戶自定義配置文件,並以此來初始化框架;

  • 具備 Bean 容器,管理項目的類的對象生命周期;

  • 具備依賴注入,降低類之間的耦合性;

  • 具備 AOP 功能,使項目可進行橫向編程,可不改變原有代碼的情況增加業務邏輯;

  • 具備 MVC 框架模式。

  • 其實除了 SSM 之外,Web 框架可謂是百家齊放,其中以 Spring 全家桶最為耀眼,在這里我極力推薦兩個 Spring 家族框架:SpringBoot 和 SpringCloud。

    SpringBoot 彌補了 Spring 配置上的缺點,再也不用為繁雜的 xml 費勁精力了,堪稱是 Java 後端開發的顛覆者,推薦書籍「Java EE 開發的顛覆者:SpringBoot實戰」

    SpringBoot 構建 web 項目

    SpringBoot 自動化配置源碼分析

    自定義 SpringBoot Starter

    spring-boot-starter-tutorial

    SpringCloud 是一個微服務架構,能夠將項目按照業務分成一個個微服務,每個微服務都可獨立部署,服務之間互相協調。當一個項目越來越大時,隨之而來的是越來越難以維護,此時將項目拆分成若干個微服務、單獨維護、單獨部署,也可以降低項目不同業務間的耦合度。推薦書籍「Spring Cloud 與 Docker 微服務架構實戰」,這本書將 Docker 與微服務完美地結合在一起,堪稱完美!

    Spring Cloud 中文官網

    史上最簡單的 Spring Cloud 教程

    我寫的有關於 Spring Cloud 的博客:

    SpringCloud微服務架構之服務注冊與發現

    SpringCloud微服務架構之服務消費者

    SpringCloud微服務架構之斷路器

    SpringCloud微服務架構之服務網關

    其它技術

    Redis:一個高性能的 key-value 資料庫,當有並發量很高的請求時,將數據緩存在 Redis 中,將提高伺服器的響應性能,大大減輕資料庫的壓力。

    redis 中文官網

    redis 教程

    Git:世界上最先進的分布式版本控制系統,建議所有初學者從命令行開始使用 Git!關注 stormzhang 公眾號「googdev」,回復「github」,即可免費獲取一份 GitHub 教程電子書,我覺得寫得很不錯。

    Git 官網

    最全 Git 教程

    Git 的一些常用命令

    Maven:一個用於構建項目的工具,將項目間的依賴通過 xml 完美地組織到一起,可通過編譯插件將項目編譯成位元組碼文件。還有類似的 Gradle 也是不錯的選擇。

    maven 的 pom.xml 文件詳解

    linux:至少要求常用的命令會用,能夠在 linux 環境下部署項目。

    Linux 命令大全

    最全的 SSH 連接遠程終端教程

    Docker:簡直是項目部署神器啊,來不及解釋了,看我 Docker 系列博客,開啟 Docker 之旅吧!推薦書籍「Docker 技術入門與實戰」,中國首部 Docker 著作!

    Docker 實戰(一)

    Docker 實戰(二)

    Docker 實戰(三)

    docker-deploy-tutorial

    開發工具

    工欲善其事,必先利其器,以下是我推薦的一些開發工具:

    Intellij IDEA:Java 開發最好的 IDE,這個是公認的,我一開始是用 Eclipse 的,後來用了 Intellij IDEA,才發現 Eclipse 就是一坨屎,所以我以過來人勸你們不要使用 Eclipse,直接 Intellij IDEA!

    IntelliJ IDEA 使用教程

    Iterm2:macOS 最好用的終端!

    Iterm2 使用指南

    Chrome:人生苦短,請用 Chrome,來不及解釋了,快上車!

    Postman:很好用的一個介面調試工具。

2. java項目中文件的路徑

java項目中文件的路徑-方法大全

一、 相對路徑的獲得

說明:相對路徑(即不寫明時候到底相對誰)均可通過以下方式獲得(不論是一般的java項目還是web項目)

System.getProperty("user.dir");

上述相對路徑中,java項目中的文件是相對於項目的根目錄web項目中的文件路徑視不同的web伺服器不同而不同(tomcat是相對於tomcat安裝目錄in)

二 類載入目錄的獲得(即當運行時某一類時獲得其裝載目錄)
1.1)通用的方法一(不論是一般的java項目還是web項目,先定位到能看到包路徑的第一級目錄)

InputStreamis=TestAction.class.getClassLoader().getResourceAsStream("test.txt");(test.txt文件的路徑為 項目名src est.txt;類TestPath所在包的第一級目錄位於src目錄下)

三 web項目根目錄的獲得(發布之後)
1 從servlet出發

可建立一個servlet在其的init方法中寫入如下語句(沒有請求的話會拋空指針導常)

ServletContext s1=this.getServletContext();
String temp=s1.getRealPath("/"); (關鍵)
結果形如:F: omcat-6.0.36webapps est(test為項目名字)

如果是調用了s1.getRealPath("")則輸出F: omcat-6.0.36webapps est(少了一個"")

2 從httpServletRequest出發(沒有請求的話會拋空指針導常)

String path=request.getSession().getServletContext().getRealPath("/");

結果形如:F: omcat-6.0.36webapps est

四 classpath的獲取(在Eclipse中為獲得src或者classes目錄的路徑),放在監聽器,可以窗口啟動獲取路徑

方法一Thread.currentThread().getContextClassLoader().getResource("").getPath()

String path = Thread.currentThread().getContextClassLoader()

.getResource("").getPath();

System.out.println("path========"+ path);輸出:path========/F:/tomcat-6.0.36/webapps/test/WEB-INF/classes/


方法二JdomParse.class.getClassLoader().getResource("").getPath()(JdomParse為src某一個包中的類,下同)

eg:String p1=JdomParse.class.getClassLoader().getResource("").getPath();
System.out.println("JdomParse.class.getClassLoader().getResource--"+p1);

輸出:JdomParse.class.getClassLoader().getResource-/F:/tomcat-6.0.36/webapps/test/WEB-INF/classes/

另外,如果想把文件放在某一包中,則可以 通過以下方式獲得到文件(先定位到該包的最後一級目錄)

eg String p2=JdomParse.class.getResource("").getPath();
System.out.println("JdomParse.class.getResource---"+p2);

輸出:JdomParse.class.getResource--/F:/tomcat-6.0.36/webapps/test/WEB-INF/classes/

(JdomParse為src目錄下jdom包中的類)

四 屬性文件的讀取:

方法 一

InputStream in = lnewBufferedInputStream(newFileInputStream(name));

Properties p =newProperties();p.load(in);

注意路徑的問題,做執行之後就可以調用p.getProperty("name")得到對應屬性的值

方法二

Locale locale =Locale.getDefault();
ResourceBundle localResource = ResourceBundle.getBundle("test/propertiesTest",locale);
String value = localResource.getString("test");
System.out.println("ResourceBundle: " + value);

工程src目錄下propertiesTest.properties(名字後綴必須為properties)文件內容如下:

test=hello word

不通過Servlet獲取路徑

第一種實現

Java代碼

URL url = ClassLoader.getSystemClassLoader().getResource("./");

File file =newFile(url.getPath());

File parentFile =newFile(file.getParent());

System.out.println("webRoot:"+parentFile.getParent());

第二種實現
首先寫一個接聽類 (推薦使用,容器啟動時就執行,不會拋空指針異常,適合做定時器任務來刪除伺服器文件的路徑)

Java代碼:

package com.chinacreator.report.listener;

import javax.servlet.ServletContext;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

/**

* @authorxiaoqun.yi

*/

public class PathListener {

private staticServletContext servletContext;

public voidcontextDestroyed(ServletContextEvent sce) {

this.servletContext= sce.getServletContext();

System.out.println("path=======:"+servletContext.getRealPath("/"));

}

public voidcontextInitialized(ServletContextEvent arg0) {

}

}


在web.xml中加入如下配置

Java代碼 :

<listener>

<listener-class>com.chinacreator.report.listener.PathListener</listener-class>

</listener>

五、Java中的getResourceAsStream有以下幾種:
1. Class.getResourceAsStream(String path) : path 不以』/'開頭時默認是從此類所在的包下取資源,以』/'開頭則是從ClassPath根下獲取。其只是通過path構造一個絕對路徑,最終還是由 ClassLoader(類載入器)(獲取資源)

2. Class.getClassLoader.getResourceAsStream(String path) :默認則是從ClassPath根下獲取,path不能以』/'開頭,最終是由ClassLoader獲取資源。

3. ServletContext. getResourceAsStream(String path):默認從WebAPP根目錄下取資源,Tomcat下path是否以』/'開頭無所謂,當然這和具體的容器實現有關。

4. Jsp下的application內置對象就是上面的ServletContext的一種實現。

其次,getResourceAsStream 用法大致有以下幾種:

第一: 要載入的文件和.class文件在同一目錄下,例如:com.x.y 下有類me.class ,同時有資源文件myfile.xml

那麼,應該有如下代碼:

me.class.getResourceAsStream("myfile.xml");

第二:在me.class目錄的子目錄下,例如:com.x.y 下有類me.class ,同時在 com.x.y.file 目錄下有資源文件myfile.xml

那麼,應該有如下代碼:

me.class.getResourceAsStream("file/myfile.xml");

第三:不在me.class目錄下,也不在子目錄下,例如:com.x.y 下有類me.class ,同時在 com.x.file 目錄下有資源文件myfile.xml

那麼,應該有如下代碼:

me.class.getResourceAsStream("/com/x/file/myfile.xml");

總結一下,可能只是兩種寫法

第一:前面有 「 / 」

「 / 」代表了工程的根目錄,例如工程名叫做myproject,「 / 」代表了myproject

me.class.getResourceAsStream("/com/x/file/myfile.xml");

第二:前面沒有 「 / 」

代表當前類的目錄

me.class.getResourceAsStream("myfile.xml");

me.class.getResourceAsStream("file/myfile.xml");

3. 如何查找java路徑

1、要解決問題之前,我們需要下載java這個軟體,在瀏覽器上搜索,記住下載的具體位置,方便下一步的操作。

4. Java普通類(不是Servlet)中如何獲取Web工程部署到tomcat的路徑

在類的方法中調用this.getClass().getResource("/").getPath(),自己再載取字元串就可以

5. java怎樣獲取當前目錄路徑

很多朋友都想知道java如何獲取當前目錄路徑?下面就一起來了解一下吧~

1、利用System.getProperty()函數獲取當前路徑:
System.out.println(System.getProperty("user.dir"));//user.dir指定了當前的路徑
2、使用File提供的函數獲取當前路徑:
File directory = new File("");//設定為當前文件夾 try{ System.out.println(directory.getCanonicalPath());//獲取標準的路徑 System.out.println(directory.getAbsolutePath());//獲取絕對路徑 }catch(Exceptin e){} File.getCanonicalPath()和File.getAbsolutePath()大約只是對於new File(".")和new File("..")兩種路徑有所區別。 # 對於getCanonicalPath()函數,「."就表示當前的戚物尺文件夾,而」..「則表示當前文件夾的上一級文件夾 # 對於getAbsolutePath()函數,則不管」.」、「..」,返回當前的路徑加上你在new File()時設定的路徑 # 至於getPath()函數,得到的只是你在new File()時設定的路徑高高 比如當前的路徑為 C:/test : File directory = new File("abc"); directory.getCanonicalPath(); //得螞友到的是C:/test/abc directory.getAbsolutePath(); //得到的是C:/test/abc direcotry.getPath(); //得到的是abc File directory = new File("."); directory.getCanonicalPath(); //得到的是C:/test directory.getAbsolutePath(); //得到的是C:/test/. direcotry.getPath(); //得到的是. File directory = new File(".."); directory.getCanonicalPath(); //得到的是C:/ directory.getAbsolutePath(); //得到的是C:/test/.. direcotry.getPath(); //得到的是.. 另外:System.getProperty()中的字元串參數如下: System.getProperty()參數大全 # java.version Java Runtime Environment version # java.vendor Java Runtime Environment vendor # java.vendor.url Java vendor URL # java.home Java installation directory # java.vm.specification.version Java Virtual Machine specification version # java.vm.specification.vendor Java Virtual Machine specification vendor # java.vm.specification.name Java Virtual Machine specification name # java.vm.version Java Virtual Machine implementation version # java.vm.vendor Java Virtual Machine implementation vendor # java.vm.name Java Virtual Machine implementation name # java.specification.version Java Runtime Environment specification version # java.specification.vendor Java Runtime Environment specification vendor # java.specification.name Java Runtime Environment specification name # java.class.version Java class format version number # java.class.path Java class path # java.library.path List of paths to search when loading libraries # java.io.tmpdir Default temp file path # java.compiler Name of JIT compiler to use # java.ext.dirs Path of extension directory or directories # os.name Operating system name # os.arch Operating system architecture # os.version Operating system version # file.separator File separator ("/" on UNIX) # path.separator Path separator (":" on UNIX) # line.separator Line separator ("/n" on UNIX) # user.name User』s account name # user.home User』s home directory # user.dir User』s current working directory
JAVA中獲取路徑 關鍵字: java中獲取路徑

1、jsp中取得路徑:

以工程名為TEST為例:
(1)得到包含工程名的當前頁面全路徑:request.getRequestURI() 結果:/TEST/test.jsp (2)得到工程名:request.getContextPath() 結果:/TEST (3)得到當前頁面所在目錄下全名稱:request.getServletPath() 結果:如果頁面在jsp目錄下 /TEST/jsp/test.jsp (4)得到頁面所在伺服器的全路徑:application.getRealPath("頁面.jsp") 結果:D:/resin/webapps/TEST/test.jsp (5)得到頁面所在伺服器的絕對路徑:absPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent(); 結果:D:/resin/webapps/TEST
2、在類中取得路徑: (1)類的絕對路徑:Class.class.getClass().getResource("/").getPath() 結果:/D:/TEST/WebRoot/WEB-INF/classes/pack/ (2)得到工程的路徑:System.getProperty("user.dir") 結果:D:/TEST

熱點內容
python靜態類方法 發布:2024-04-30 01:30:28 瀏覽:461
zblogphpasp 發布:2024-04-30 01:27:35 瀏覽:136
宏程序自動編程軟體 發布:2024-04-30 01:15:01 瀏覽:416
vs添加編譯選項 發布:2024-04-30 01:06:10 瀏覽:613
編程紅碼 發布:2024-04-30 01:04:49 瀏覽:910
給數組賦值java 發布:2024-04-30 01:04:37 瀏覽:498
我的世界jave版如何開伺服器 發布:2024-04-30 01:02:34 瀏覽:901
safari清除緩存ipad 發布:2024-04-30 00:47:24 瀏覽:523
欄位級數據加密 發布:2024-04-30 00:34:59 瀏覽:73
編譯原理上機實驗構建預測分析器 發布:2024-04-30 00:05:47 瀏覽:571