合ssm框架搭建簡單javaWeb博客系統
項目描述
全程使用Java配置和注解配置,沒有web.xml文件,Spring的配置也沒有使用xml配置,并且整合Spring、SpringMVC、MyBati,具備數據庫crud操作;寫博客頁支持Markdown編輯器,前端顯示時將Markdown解析為HTML,有用到bootstrap、jQuery前端技術
運行環境
jdk7+tomcat7+mysql+IntelliJ IDEA+maven
項目技術(必填)
spring+spring mvc+mybatis+bootstrap+jquery
數據庫文件
文件不大,存放在項目壓縮包中
jar包文件
使用maven管理
是否原創(轉載必填原文地址)
原創
項目截圖(必填)
運行截圖(必填)
http://localhost:8080//sang/dologin
登錄賬號123 123
注意事項
示例圖沒有項目名做訪問地址的一部分,這個可以在ide設置,請自行百度。或者修改前端頁面。
summary摘要默認是取內容的前20位,有興趣的朋友可以進行改造,添加摘要文本框,由用戶自行輸入。
SSM在線考試系統》該項目采用技術:jsp +springmvc+spring+mybatis +css+js等相關技術,項目含有源碼、文檔、配套開發軟件、軟件安裝教程、項目發布教程等
在線考試的功能有:用戶前臺:用戶注冊登錄、查看考試信息、進行考試、查看考試成績、查看歷史考試記錄、回顧已考試卷、修改密碼、修改個人信息等,后臺管理功能(腳手架功能不在這里列出),科目專業管理、考生管理、試題管理、考試管理、試卷管理、答題詳情管理、考試成績圖表統計等,其中試題可以支持批量excel文件導入,試卷試題是隨機生成的,每個人的試卷試題都不一樣。
下面是資料信息截圖:
下面是系統運行起來后的部分截圖:
s命令,它是 socket statistic的縮寫,用于統計Linux系統中socket連接相關的信息,和其他的工具相比,ss命令可以顯示更多關于 TCP和狀態相關的信息
ss [ OPTIONS ]
在Linux系統中,默認已經安裝了 ss 命令,下面介紹該命令常用的一些功能
netstat 命令和 ss 命令比較類似,主要功能也是統計系統中socket相關信息,和 netstat相比,ss 命令在跟蹤TCP連接和套接字方面速度更快,功能更強大,下面是 ss 和 netstat 統計速度的對比
[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 統計439條socket信息花費了0.014s, netstat 統計366條socket信息花費了0.029s,ss 統計信息的速度更快,所以實際使用中一般都是用 ss 替代 netstat
列出當前已經連接、關閉、等待的TCP連接,當系統中已經存在大量的套接字連接的時候,通過查看套接字摘要信息可以快速了解系統中套接字的總體情況
[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
當不使用任何選項時,ss將顯示已建立連接的處于非監聽狀態的套接字列表,由于原始結果太長,下面的例子只截取了一部分
[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流)等套接字
套接字處于什么狀態,下面是TCP套接字的所有狀態及說明, 實際上就是TCP的三次握手和四次揮手的所有狀態
LISTEN: 服務端偵聽套接字等待客戶端的連接
SYN-SENT: 客戶端已發送套接字連接請求報文,等待連接被服務器接收
SYN-RECEIVED: 服務器端接收連接請求報文后,等待客戶端的確認連接的回復報文
ESTABLISHED: 服務端和客戶端之間成功建立了一條有效的連接,可以互相傳輸數據
FIN-WAIT-1: 服務器或客戶端調用close函數主動向對方發出終止連接的請求報文,同時等待對方確認終止連接的回復報文
FIN-WAIT-2: 主動關閉連接端收到對方確認終止連接的回復報文,同時等待對方連接終止的請求報文,這時的狀態是TCP連接的半關閉狀態,可以接受數據,但是不能發送數據
CLOSE-WAIT: 被動關閉端收到主動關閉端終止連接的請求報文后,向主動關閉端發送確認終止連接的回復報文,同時被動關閉端等待本地用戶終止連接,這時被動關閉端的狀態是TCP連接的半關閉狀態,可以發送數據,但是不能接收數據
CLOSING: 服務器和客戶端同時向對方發送終止連接(調用close函數)請求報文,并且雙方都是在收到對方發送的終止連接回復報文之前收到了對方的發送的終止連接請求報文,這個時候雙方都進入了CLOSING狀態,進入CLOSING狀態之后,只要收到了對方對自己終止連接的回復報文,就會進入TIME-WAIT狀態,所以CLOSING狀態的持續時間會特別短,一般很難捕獲到
LAST-ACK: 被動關閉端發送完全部數據之后,向主動關閉端發送終止連接的請求報文,等待主動關閉端發送終止連接的回復報文
TIME-WAIT: 主動關閉端收到被動關閉端終止連接的請求報文后,給被動關閉端發送終止連接的回復報文,等待足夠時間以確保被動關閉端收到了主動關閉段發送的終止連接的回復報文
CLOSED: 完全沒有連接,套接字連接已經終止了
在 ESTAB 狀態下,表示內核中還有多少字節的數據沒有被上層應用讀取,如果這里數值很大,應用程序可能發生了阻塞
在 ESTAB 狀態下,表示內核發送隊列中還有多少字節的數據沒有收到確認的ACK,如果這個數值很大,表明接收端的接收以及處理需要加強
本地地址和端口
遠程地址和端口
使用 -l 選項可以列出所有處于偵聽(LISTEN)狀態的套接字
[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選項可以列出所有的狀態的套接字,由于所有的套接字列表太多,下面的例子中只列出了少許的數據
[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 這些協議類型顯示套接字,下面以常用的TCP/UDP/IPV4協議舉例說明
ss -ua : 顯示Unix套接字
ss -wa : 顯示Raw套接字
ss -6a : 顯示IPV6套接字
使用 -t選項(TCP), 讓結果只列出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), 讓結果只列出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), 讓結果只列出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
有時我們查詢到指定的套接字了,但是無法知道套接字是哪個應用程序在使用,這時可以使用 -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
有時候我們啟動應用程序的時候,發現端口已經被占用了,此時先要查找出占用目標端口的應用程序,然后關閉它,再啟動我們自己的應用程序
[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 表示源,對應的 dport 表示目標,命令查找端口3306是被哪個進程使用了,最終發現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 [::]:*
上面的例子中篩選出進程名為mysql的套接字, 執行的命令中 -n選項是不解析服務名字,加了此選項就顯示成端口了,不會解析成服務名稱了
下面例子是篩選出目標IP地址為27.38.240.99的套接字,dst 是目標地址
[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 是源地址
*請認真填寫需求信息,我們會在24小時內與您取得聯系。