Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
合ssm框架搭建簡單javaWeb博客系統(tǒng)
項目描述
全程使用Java配置和注解配置,沒有web.xml文件,Spring的配置也沒有使用xml配置,并且整合Spring、SpringMVC、MyBati,具備數(shù)據(jù)庫crud操作;寫博客頁支持Markdown編輯器,前端顯示時將Markdown解析為HTML,有用到bootstrap、jQuery前端技術(shù)
運行環(huán)境
jdk7+tomcat7+mysql+IntelliJ IDEA+maven
項目技術(shù)(必填)
spring+spring mvc+mybatis+bootstrap+jquery
數(shù)據(jù)庫文件
文件不大,存放在項目壓縮包中
jar包文件
使用maven管理
是否原創(chuàng)(轉(zhuǎn)載必填原文地址)
原創(chuàng)
項目截圖(必填)
運行截圖(必填)
http://localhost:8080//sang/dologin
登錄賬號123 123
注意事項
示例圖沒有項目名做訪問地址的一部分,這個可以在ide設(shè)置,請自行百度。或者修改前端頁面。
summary摘要默認(rèn)是取內(nèi)容的前20位,有興趣的朋友可以進(jìn)行改造,添加摘要文本框,由用戶自行輸入。
SSM在線考試系統(tǒng)》該項目采用技術(shù):jsp +springmvc+spring+mybatis +css+js等相關(guān)技術(shù),項目含有源碼、文檔、配套開發(fā)軟件、軟件安裝教程、項目發(fā)布教程等
在線考試的功能有:用戶前臺:用戶注冊登錄、查看考試信息、進(jìn)行考試、查看考試成績、查看歷史考試記錄、回顧已考試卷、修改密碼、修改個人信息等,后臺管理功能(腳手架功能不在這里列出),科目專業(yè)管理、考生管理、試題管理、考試管理、試卷管理、答題詳情管理、考試成績圖表統(tǒng)計等,其中試題可以支持批量excel文件導(dǎo)入,試卷試題是隨機生成的,每個人的試卷試題都不一樣。
下面是資料信息截圖:
下面是系統(tǒng)運行起來后的部分截圖:
s命令,它是 socket statistic的縮寫,用于統(tǒng)計Linux系統(tǒng)中socket連接相關(guān)的信息,和其他的工具相比,ss命令可以顯示更多關(guān)于 TCP和狀態(tài)相關(guān)的信息
ss [ OPTIONS ]
在Linux系統(tǒng)中,默認(rèn)已經(jīng)安裝了 ss 命令,下面介紹該命令常用的一些功能
netstat 命令和 ss 命令比較類似,主要功能也是統(tǒng)計系統(tǒng)中socket相關(guān)信息,和 netstat相比,ss 命令在跟蹤TCP連接和套接字方面速度更快,功能更強大,下面是 ss 和 netstat 統(tǒng)計速度的對比
[cgyx@cghost35 ~]$ time ss -a | wc -l
439
real 0m0.014s
user 0m0.004s
sys 0m0.010s
[cgyx@cghost35 ~]$ time netstat -a | wc -l
366
real 0m0.029s
user 0m0.005s
sys 0m0.008s
從上面例子可以看出,ss 統(tǒng)計439條socket信息花費了0.014s, netstat 統(tǒng)計366條socket信息花費了0.029s,ss 統(tǒng)計信息的速度更快,所以實際使用中一般都是用 ss 替代 netstat
列出當(dāng)前已經(jīng)連接、關(guān)閉、等待的TCP連接,當(dāng)系統(tǒng)中已經(jīng)存在大量的套接字連接的時候,通過查看套接字摘要信息可以快速了解系統(tǒng)中套接字的總體情況
[root@ecs-centos-7 ~]# ss -s
Total: 185 (kernel 264)
TCP: 7 (estab 2, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0
Transport Total IP IPv6
* 264 - -
RAW 0 0 0
UDP 7 4 3
TCP 7 4 3
INET 14 8 6
FRAG 0 0 0
當(dāng)不使用任何選項時,ss將顯示已建立連接的處于非監(jiān)聽狀態(tài)的套接字列表,由于原始結(jié)果太長,下面的例子只截取了一部分
[root@ecs-centos-7 ~]# ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
u_str ESTAB 0 0 /run/dbus/system_bus_socket 12050 * 11962
tcp ESTAB 0 0 192.168.0.9:ssh 27.38.240.56:ssm-cssps
tcp ESTAB 0 4200 192.168.0.9:ssh 27.38.240.56:rsmtp
tcp ESTAB 0 0 192.168.0.9:ssh 27.38.240.56:pearldoc-xact
上面例子中列說明:
socket類型,在上面的例子中,有 TCP、u_str(unix流)等套接字
套接字處于什么狀態(tài),下面是TCP套接字的所有狀態(tài)及說明, 實際上就是TCP的三次握手和四次揮手的所有狀態(tài)
LISTEN: 服務(wù)端偵聽套接字等待客戶端的連接
SYN-SENT: 客戶端已發(fā)送套接字連接請求報文,等待連接被服務(wù)器接收
SYN-RECEIVED: 服務(wù)器端接收連接請求報文后,等待客戶端的確認(rèn)連接的回復(fù)報文
ESTABLISHED: 服務(wù)端和客戶端之間成功建立了一條有效的連接,可以互相傳輸數(shù)據(jù)
FIN-WAIT-1: 服務(wù)器或客戶端調(diào)用close函數(shù)主動向?qū)Ψ桨l(fā)出終止連接的請求報文,同時等待對方確認(rèn)終止連接的回復(fù)報文
FIN-WAIT-2: 主動關(guān)閉連接端收到對方確認(rèn)終止連接的回復(fù)報文,同時等待對方連接終止的請求報文,這時的狀態(tài)是TCP連接的半關(guān)閉狀態(tài),可以接受數(shù)據(jù),但是不能發(fā)送數(shù)據(jù)
CLOSE-WAIT: 被動關(guān)閉端收到主動關(guān)閉端終止連接的請求報文后,向主動關(guān)閉端發(fā)送確認(rèn)終止連接的回復(fù)報文,同時被動關(guān)閉端等待本地用戶終止連接,這時被動關(guān)閉端的狀態(tài)是TCP連接的半關(guān)閉狀態(tài),可以發(fā)送數(shù)據(jù),但是不能接收數(shù)據(jù)
CLOSING: 服務(wù)器和客戶端同時向?qū)Ψ桨l(fā)送終止連接(調(diào)用close函數(shù))請求報文,并且雙方都是在收到對方發(fā)送的終止連接回復(fù)報文之前收到了對方的發(fā)送的終止連接請求報文,這個時候雙方都進(jìn)入了CLOSING狀態(tài),進(jìn)入CLOSING狀態(tài)之后,只要收到了對方對自己終止連接的回復(fù)報文,就會進(jìn)入TIME-WAIT狀態(tài),所以CLOSING狀態(tài)的持續(xù)時間會特別短,一般很難捕獲到
LAST-ACK: 被動關(guān)閉端發(fā)送完全部數(shù)據(jù)之后,向主動關(guān)閉端發(fā)送終止連接的請求報文,等待主動關(guān)閉端發(fā)送終止連接的回復(fù)報文
TIME-WAIT: 主動關(guān)閉端收到被動關(guān)閉端終止連接的請求報文后,給被動關(guān)閉端發(fā)送終止連接的回復(fù)報文,等待足夠時間以確保被動關(guān)閉端收到了主動關(guān)閉段發(fā)送的終止連接的回復(fù)報文
CLOSED: 完全沒有連接,套接字連接已經(jīng)終止了
在 ESTAB 狀態(tài)下,表示內(nèi)核中還有多少字節(jié)的數(shù)據(jù)沒有被上層應(yīng)用讀取,如果這里數(shù)值很大,應(yīng)用程序可能發(fā)生了阻塞
在 ESTAB 狀態(tài)下,表示內(nèi)核發(fā)送隊列中還有多少字節(jié)的數(shù)據(jù)沒有收到確認(rèn)的ACK,如果這個數(shù)值很大,表明接收端的接收以及處理需要加強
本地地址和端口
遠(yuǎn)程地址和端口
使用 -l 選項可以列出所有處于偵聽(LISTEN)狀態(tài)的套接字
[root@ecs-centos-7 ~]# ss -l
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 100 127.0.0.1:smtp *:*
tcp LISTEN 0 128 *:ssh *:*
tcp LISTEN 0 100 [::1]:smtp [::]:*
tcp LISTEN 0 254 [::]:mysql [::]:*
tcp LISTEN 0 128 [::]:ssh [::]:*
使用 -a選項可以列出所有的狀態(tài)的套接字,由于所有的套接字列表太多,下面的例子中只列出了少許的數(shù)據(jù)
[root@ecs-centos-7 ~]# ss -a
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 100 127.0.0.1:smtp *:*
tcp LISTEN 0 128 *:ssh *:*
tcp ESTAB 0 16644 192.168.0.9:ssh 27.38.240.99:21669
tcp ESTAB 0 0 192.168.0.9:ssh 27.38.240.103:kyoceranetdev
tcp LISTEN 0 100 [::1]:smtp [::]:*
tcp LISTEN 0 254 [::]:mysql [::]:*
tcp LISTEN 0 128 [::]:ssh [::]:*
可以通過 TCP、UDP、Unix、Raw、IPV4、IPV6 這些協(xié)議類型顯示套接字,下面以常用的TCP/UDP/IPV4協(xié)議舉例說明
ss -ua : 顯示Unix套接字
ss -wa : 顯示Raw套接字
ss -6a : 顯示IPV6套接字
使用 -t選項(TCP), 讓結(jié)果只列出TCP套接字
[root@ecs-centos-7 ~]# ss -a -t
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 127.0.0.1:smtp *:*
LISTEN 0 128 *:ssh *:*
ESTAB 0 52 192.168.0.9:ssh 27.38.240.99:21787
ESTAB 0 0 192.168.0.9:ssh 27.38.240.99:21669
ESTAB 0 0 192.168.0.9:ssh 27.38.240.103:kyoceranetdev
LISTEN 0 100 [::1]:smtp [::]:*
LISTEN 0 254 [::]:mysql [::]:*
LISTEN 0 128 [::]:ssh [::]:*
使用 -u選項(UCP), 讓結(jié)果只列出UCP套接字
[root@ecs-centos-7 ~]# ss -a -u
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:bootpc *:*
UNCONN 0 0 192.168.0.9:ntp *:*
UNCONN 0 0 127.0.0.1:ntp *:*
UNCONN 0 0 *:ntp *:*
UNCONN 0 0 [fe80::f816:3eff:fee0:4fb8]%eth0:ntp [::]:*
UNCONN 0 0 [::1]:ntp [::]:*
UNCONN 0 0 [::]:ntp [::]:*
使用 -4選項(IPV4), 讓結(jié)果只列出IPV4的套接字
[root@ecs-centos-7 ~]# ss -4a
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 *:bootpc *:*
udp UNCONN 0 0 192.168.0.9:ntp *:*
udp UNCONN 0 0 127.0.0.1:ntp *:*
udp UNCONN 0 0 *:ntp *:*
tcp LISTEN 0 100 127.0.0.1:smtp *:*
tcp LISTEN 0 128 *:ssh *:*
tcp ESTAB 0 0 192.168.0.9:ssh 27.38.240.99:21787
有時我們查詢到指定的套接字了,但是無法知道套接字是哪個應(yīng)用程序在使用,這時可以使用 -p 選項
[root@ecs-centos-7 ~]# ss -a -t -p
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 254 [::]:mysql [::]:*
上面的例子中,從Local Address:Port 列可以知道,這個套接字時mysql在使用,如果沒有加 -p選項的話,這里顯示的時mysql的端口號3306
有時候我們啟動應(yīng)用程序的時候,發(fā)現(xiàn)端口已經(jīng)被占用了,此時先要查找出占用目標(biāo)端口的應(yīng)用程序,然后關(guān)閉它,再啟動我們自己的應(yīng)用程序
[root@ecs-centos-7 ~]# ss -ap sport eq 3306
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 254 [::]:mysql [::]:*
上面的例子中,sport 表示源,對應(yīng)的 dport 表示目標(biāo),命令查找端口3306是被哪個進(jìn)程使用了,最終發(fā)現(xiàn)3306是mysql在使用
通過端口篩選還支持小于、大于、小于等于、大于等于、不等于,具體的說明如下:
ss -ap sport le 3306 : 篩選出源端口小于等于3306的套接字
ss -ap sport lt 3306 :篩選出源端口小于3306的套接字
ss -ap sport ge 3306 : 篩選出源端口大于等于3306的套接字
ss -ap sport gt 3306 : 篩選出源端口大于3306的套接字
ss -ap sport ne 3306 : 篩選出源端口不等于3306的套接字
[root@ecs-centos-7 ~]# ss -an sport eq mysql
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 254 [::]:3306 [::]:*
上面的例子中篩選出進(jìn)程名為mysql的套接字, 執(zhí)行的命令中 -n選項是不解析服務(wù)名字,加了此選項就顯示成端口了,不會解析成服務(wù)名稱了
下面例子是篩選出目標(biāo)IP地址為27.38.240.99的套接字,dst 是目標(biāo)地址
[root@ecs-centos-7 ~]# ss -a dst 27.38.240.99
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 52 192.168.0.9:ssh 27.38.240.99:21907
tcp ESTAB 0 0 192.168.0.9:ssh 27.38.240.99:21787
tcp ESTAB 0 0 192.168.0.9:ssh 27.38.240.99:23260
tcp ESTAB 0 0 192.168.0.9:ssh 27.38.240.99:22810
下面例子是篩選出源IP地址為192.168.0.99的套接字,src 是源地址
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。