微信的企業(yè)網(wǎng)站模板/萬能bt搜索引擎
? ? 這篇簡單介紹一些入門的有關(guān)項目和行業(yè)的知識,并帶著實現(xiàn)一個小項目。便于已經(jīng)編程入門的各位準備進階到下一個階段。
? ? 先大致地介紹,一個完整的項目(不看客戶端、服務(wù)端的分類)基本可以劃分為三部分:
1.前端。比如你現(xiàn)在看到的CSDN頁面就是一個前端頁面。前端的作用是負責(zé)與用戶交互,即將項目的數(shù)據(jù)以人性化的形式展示給用戶,并收集用戶的各種操作信息和輸入信息,返回給后端進行相應(yīng)的事件流程。
2.后端。初學(xué)編程時你寫的"print("Hello World")",那個就是后端部分,不過這個還不夠準確。比如"int a = 0;b = a - 1;"這種有事件流程的,就是一個項目的后端部分。后端的作用是根據(jù)編程好的程序處理與其對應(yīng)的數(shù)據(jù)和請求。
3.數(shù)據(jù)庫。數(shù)據(jù)庫就是字面意思,它存儲數(shù)據(jù)的倉庫。學(xué)習(xí)階段哪怕是畢業(yè)設(shè)計,項目的工程量可能全用內(nèi)存也足夠,但正式的項目中,數(shù)據(jù)量會非常非常大,就像你現(xiàn)在瀏覽的CSDN,如此多篇文章,大量的文字和圖片信息,顯然內(nèi)存是不可完成這些存儲的。而且也不可能用內(nèi)存,因為現(xiàn)在的內(nèi)存就是設(shè)計給運行時使用的,不適合存儲(感興趣可以查詢cpu和內(nèi)存空間硬件層運行邏輯的資料)。
簡介
前端
? ? 前端常見的有web頁面。常見的分包有 css、js、image、video、WEB_INF等等。
? ? css的專門存儲css樣式文件的包、js則是存儲JavaScript腳本文件的包、image和video則是存儲圖片和視頻,而WEB-INF則是存儲不可直接訪問的前端資源,有頁面資源和配置信息(比如web.xml)。
? ? 下面是一個示例:
? ??
? ? 當然,這個不太規(guī)范,通常情況下css等資源會放在WEB_INF或用其他方式,避免被用戶直接訪問?。放在WEB-INF下的資源,用戶只能通過頁面引入或請求轉(zhuǎn)發(fā)等方式來訪問。
?后端
? ? 后端常見的有使用Java、C++進行編寫。
? ? Java面向?qū)ο?#xff0c;是以C、C++為基礎(chǔ)的語言,主要是用來寫業(yè)務(wù)的。而C、C++則是面向過程,不像java那樣,底層上沒那么多彎彎繞繞。
? ? 同樣的一個事件,C++處理完通常比Java快30%。所以Java一般用于各種項目中編寫業(yè)務(wù),而C++則是用于各種電子機器設(shè)備(比如洗衣機)的硬件編程,包括各種大型游戲,都是用C寫的。
? ? 這里稍微提一嘴python,我的一名從業(yè)人員的導(dǎo)師(導(dǎo)師只是我對他的敬稱)的說法是,python主要還是擔(dān)任一種"插件"一樣的角色,在爬蟲、人工智能這些領(lǐng)域上很合適,但是總體的還是干不過Java和C++,如果是想進入這個行業(yè),那么不要先學(xué)python。之所以提是因為我個人最近看到許多python培訓(xùn)課程,口號是學(xué)了...就...這種,怕有同志走了彎路。當然只是興趣或者其他的,便不用擔(dān)心了,注意法律就好。
? ? 然后介紹一下java后端的常見分包。java后端常見的分包有service、dao、util、config、entity、constant、exception。
service:存放各種業(yè)務(wù)代碼,通常為service根據(jù)業(yè)務(wù)的種類劃分,每個種類的業(yè)務(wù)開一個接口分裝,然后在service下再開一個impl包,實現(xiàn)每個接口的方法。
dao:存放訪問數(shù)據(jù)庫的代碼,Java用的連接數(shù)據(jù)庫的技術(shù)是JDBC,獲取連接的工具類不放在dao包而是放在util包下。與service包一樣,包下會根據(jù)操作數(shù)據(jù)的相關(guān)內(nèi)容分類成一個個接口,然后在dao包下再開一個impl包實現(xiàn)這些接口。
config:存放后端要使用的各種配置文件。比如.xml文件。
constant:存放各種常量、變量的包。這些一般是運行時才加載到內(nèi)存中。
util:存放各種工具類的包。比如剛剛講到的JDBC獲取連接的工具類,另外像jdk里面的Math類,這些就是工具類,用于完成某種功能。
entity:存放各種實體類。這些類一般用來進行數(shù)據(jù)的封裝,比如學(xué)生類、用戶類,封裝姓名、id、性別這些信息,來進行數(shù)據(jù)的傳遞(只在后端中使用,前端無法直接解析這些開發(fā)人員自定義的實體類)。
controller:與前端連接的包,通常存放各種servlet等請求響應(yīng)類。在Tomcat服務(wù)器搭建的項目中又常命名為servlet包。
數(shù)據(jù)庫?
? ? 學(xué)習(xí)階段基本上就是使用MySQL了。常見的數(shù)據(jù)庫還有很多,功能最為強大的現(xiàn)在是Oracle數(shù)據(jù)庫,當然,它是收費的,而且很貴(進入行業(yè)后正式的商業(yè)工程是肯定不能用破解版的,這屬于侵權(quán)行為,也能查到的,當然這種侵權(quán)你不商用,也不會找你麻煩)。
? ? 還有很多:DB2、SQL Server、Sybase等等。
前端連接后端
? ? 前端連接后端常見的技術(shù)有AJAX、WebSocket等等。當然,這些是進階一點的,Tomcat服務(wù)器提供的基礎(chǔ)技術(shù)為Servlet。AJAX就是在servlet基礎(chǔ)上異步交互的技術(shù)。使用詳情可以看我的Servlet使用文章。
后端連接數(shù)據(jù)庫
? ? 后端連接數(shù)據(jù)庫,Java用的技術(shù)為JDBC。不管是哪個語言,一般該語言的開發(fā)公司會提供一個統(tǒng)一的數(shù)據(jù)庫對接該編程語言的標準,由每個數(shù)據(jù)庫的開發(fā)公司根據(jù)這個標準提供自己的數(shù)據(jù)庫驅(qū)動。這篇文章我使用Java和JDBC,詳情可以看我的文章JDBC使用。
項目入門
? ? 這里我們一步一步寫一個簡單的登錄功能。
? ? 首先我們先編輯前端頁面資源
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><link href="">
</head>
<body><div><a href="WEB-INF/jsp/login.jsp"><h1>點我進行登錄</h1></a></div>
</body>
</html>
? ? 大家可以先試一試,然后就會發(fā)現(xiàn),訪問不了login.jsp,報404錯誤。?這是因為Tomcat是不允許用戶通過URL直接訪問WEB-INF下的任何資源的。我們想要訪問,只能通過servlet轉(zhuǎn)發(fā)或頁面包含的形式來進行訪問。這里我們使用請求轉(zhuǎn)發(fā),為了美觀,我們使用Post請求。
? ? 為了易于理解,我這里改為使用form表單。其中action設(shè)置Servlet的URL,method設(shè)置請求方式。給表單添加一個按鈕,將屬性設(shè)置為submit,用于發(fā)出請求。
修改后的jsp頁面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><link href="">
</head>
<body><div><form action="/toLogin" method="post"><button type="submit"><h1>點我進行登錄</h1></button></form></div>
</body>
? ? 到了servlet這里,我們就可以直接使用路徑來訪問WEB-INF下的login.jsp了。?
對應(yīng)的Servlet文件:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/toLogin")
public class toLoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(req, resp);}
}
這個時候我們就可以成功打開login頁面了。?
? ? 前面提到過了,Servlet就已經(jīng)是Java代碼了,可以訪問Java代碼資源并與之互動。
? ? 轉(zhuǎn)到登錄頁面之后,前端連后端的流程基本一致。我們直接從發(fā)出請求到Servlet后開始講。
先給出項目完整的結(jié)構(gòu)圖:
? ?完整的登錄事件流程:
? ? 在LoginServlet處,我們訪問service下的LoginImpl,調(diào)用其中的boolean login(String username,String password)方法。
? ? 然后LoginImpl調(diào)用dao包,傳入?yún)?shù)username,查詢數(shù)據(jù)庫中的數(shù)據(jù)。
? ? 在dao包的LoginDaoImpl中調(diào)用相關(guān)方法訪問數(shù)據(jù)庫,如果存在用戶名為username的用戶,將該用戶的信息打包返回LoginImpl。
? ? LoginImpl進行業(yè)務(wù)判斷,如果密碼正確,則返回true給servlet,如果密碼錯誤或者用戶不存在,都返回false。
? ??
? ? 這是一個完整的登錄流程。補充兩點:
1.其中dao包中的SQL語句應(yīng)該存放在/src/constant包里面,這里我寫的時候忘記了,直接寫在了dao包里面,這樣的編程并不規(guī)范。
2. 對比用戶信息,也就是判斷密碼是否正確,應(yīng)當由service包來完成,dao包只用專注于自己的訪問數(shù)據(jù)庫就好。可能會有伙伴絕對多余,是因為這里只有一個登錄的判斷。實際中會訪問的用戶數(shù)據(jù)不止這一點,甚至用戶的賬戶信息(賬號、密碼等)和個人信息(出生日期、姓名性別等)會專門分成兩個表進行存儲。
? ? 本文原意便是希望幫助后來的伙伴了解編程規(guī)范,所以進行了兩點補充,當然本文也只做一個簡單參考。往后的開發(fā)中會逐漸使用各種框架,由開源的,也有公司自己私有的,業(yè)務(wù)需求有時候分包也會有很多不同,但大體上都會遵循前端、后端、Dao包 三大塊。
示例項目的完整文件下載回文章開頭處。