JAVA程式語法_物件導向Part1_資料欄位屬性_屬性封裝(get/set ...
文章推薦指數: 80 %
JAVA程式語法_物件導向Part1_資料欄位屬性_屬性封裝(get/set)_override方法_overloading方法 · 1.Return Type · 2.Name of the method · 3.Number of ...
跳到主要內容
JAVA程式語法_物件導向Part1_資料欄位屬性_屬性封裝(get/set)_override方法_overloading方法
取得連結
Facebook
Twitter
Pinterest
以電子郵件傳送
其他應用程式
-
1月09,2018
JAVA物件導向
一個 車子物件
我們可能會定義如下屬性
make :廠牌(英文用語)
model :車款(英文用語)
Miles :哩程數
Year :出廠年
UML(UnifiedModelingLanguage)
建構子/get..set...
Car類別
程式有時候很長是因為 getXXX ,setXXX這兩個公開接口方法一直出現的關係
這類型程式設計寫法有點類似
C#中的 getset存取器觀念
防止外面的一些語法操作
對我們的class內部做些不正當操作
對內部宣告變數進行封裝不讓外部直接進行存取
若getXXX,setXXX成對出現則代表前人當時設計時主要認為該變數應該可讀可寫
則說明外部有些地方正在被調用使用中
若只有getXXX method的時候 則代表供唯讀而已
當有需要擴充時候才去擴充setXXX
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
*Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties.
*Tochangethistemplatefile,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packageobjectclasses;
/**
*
*@authorchous
*/
publicclassCar{
privateString_make;
privateString_model;
privateint_year;
privatedouble_miles;
/**
*AnewCarwithNoParameters
*/
publicCar()
{
}
/**
*AnewCarwithParameters
*@parammakethemake
*@parammodelthemodel
*@paramyeartheyear
*@parammilesthemiles
*/
publicCar(Stringmake,Stringmodel,doublemiles,intyear)
{
this._make=make;
this._model=model;
this._miles=miles;
this._year=year;
}
publicStringgetMake(){
returnthis._make;
}
publicvoidsetMake(Stringvalue){
this._make=value;
}
publicStringgetModel(){
returnthis._model;
}
publicvoidsetModel(Stringvalue){
this._model=value;
}
publicdoublegetMiles(){
returnthis._miles;
}
publicvoidsetMiles(doublevalue){
this._miles=value;
}
publicintgetYear(){
returnthis._year;
}
publicvoidsetYear(intvalue){
this._year=value;
}
}
主程式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
*Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties.
*Tochangethistemplatefile,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packageobjectclasses;
importjava.util.Scanner;
/**
*
*@authorchous
*/
publicclassDriver{
/**
*@paramargsthecommandlinearguments
*/
publicstaticvoidmain(String[]args){
//TODOcodeapplicationlogichere
System.out.println("We'recreatinganewcar:");
Scannerin=newScanner(System.in);
CaruserCar=newCar();
System.out.println("Whatisthemakeofthecar?");
userCar.setMake(in.nextLine());
System.out.println("Whatisthemodelofthecar?");
userCar.setModel(in.nextLine());
System.out.println("Whatisthemilesofthecar?");
userCar.setMiles(Double.parseDouble(in.nextLine()));
System.out.println("Whatistheyearofthecar?");
userCar.setYear(Integer.parseInt(in.nextLine()));
//usingObjectasourbase-->toString();
//System.out.println(userCar);
System.out.printf("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\n"
,userCar.getMake()
,userCar.getModel()
,userCar.getMiles()
,userCar.getYear());
CaruserCar2=newCar("NISSAN","TIDA",3244.5,2013);
System.out.printf("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\n"
,userCar2.getMake()
,userCar2.getModel()
,userCar2.getMiles()
,userCar2.getYear());
}
}
輸出之測試結果
可自行輸入
也可於建構子多載後續有參數去做設數值
在介紹完兩種OO的參數賦予數值 以及 輸出打印之後
你可能會想覺得這樣子的指派各個數值去進行呈現的模式有點麻煩
所以想直接針對整個物件實體做內容輸出
因此而嘗試了直接指派物件給print
這麼輸出會有捨麼效果
這裡我們可以看到在使用第一種一個一個輸入帶入數值
輸出之後會產生一串奇怪類似亂碼的結果
你可能會問為捨麼會輸出這種亂碼
System.out的println()之相關打印方法
如果直接給它一個物件作為參數,預設則會自動呼叫該物件的toString()方法
其實主要是因為 來自於繼承到的Bas類別Object當中 toString 預設回傳物件之格式
官方網站檔案
https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString()
(PS:Object類別是Java程式中所有類別的父類別,
JAVA中所有物件都隱含的擴充了java.lang.Object類別)
Object中定義了許多個方法
像是:
公開的(public)
equals()、toString()、hashCode()、getClass()、wait()、notify()、notifyAll()
這些在一些開發上有些時機可以讓開發者去進行覆寫進行功能擴充
所以原因在於我們未去implement toString的方法
所以它預設回傳一組唯一的hashcode給我們,藉此我們可以去透過override去改寫此方法。
在現行你我所創建出來的這個Car物件當中
表面上看似未有任何繼承的細節
其實它已經有預先直接繼承JAVA ObjectClass的血統
在NetBeansIDE中 開發者可使用CTRL按鍵 按著不放去點選特定
結構類別查看一些關聯
Override(覆寫)
你可以想做去覆蓋之前的結構、去重新改寫某一個舊有的一段程式(方法...)
來自於繼承的父類或是基底類(BaseClass)
Whatweneedtodoisbeabletosupersedeourbaseclassmethods
如何去override官方網站上原先繼承自ObjectBase類中的toString方法呢??
Step1.複製官方網站上的這個語句
貼至Car類別之中,
並附上該有對應意義之Annotation(註釋文)->通常可以用來描述該方法是有捨麼含意用途
你也可以用/**Enter
去寫一些MethodSignature -->parameter定義註解
PS:一個完整的MethodSignature會包含
1.ReturnType
2.Nameofthemethod
3.NumberofParameters/TypeofParametersinorder
那回去我們的Driver主程式區域看一下這樣做的好處(節省Code)
那我們不想要每次一有一個Car物件 new出來然後要輸出打印裡面對應特性資訊
就一直寫這一段 ㄌㄡˋㄌㄡˋㄉㄥˊ~~ 的程式碼
所以就包在這裡做
經過改寫後 未來我們就只需要call此方法獲得回傳之String結果
就能節省打一長串printf的內容
捨麼意思???
在改造之前的主程式寫法
改造之前的程式碼 :
要寫很多重複難維護,容易寫錯對應實體屬性打印
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/*
*Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties.
*Tochangethistemplatefile,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packageobjectclasses;
importjava.util.Scanner;
/**
*
*@authorchous
*/
publicclassDriver{
/**
*@paramargsthecommandlinearguments
*/
publicstaticvoidmain(String[]args){
//TODOcodeapplicationlogichere
CaruserCar1=newCar("Toyota","vios",3452.8,2010);
CaruserCar2=newCar("NISSAN","TIDA",3244.5,2013);
CaruserCar3=newCar("Toyota","Yaris",3244.5,2012);
CaruserCar4=newCar("honda","CITY",3242.5,2015);
CaruserCar5=newCar("honda","HR-V",3248.5,2015);
//usingObjectasourbase-->toString();
System.out.printf("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\n"
,userCar1.getMake()
,userCar1.getModel()
,userCar1.getMiles()
,userCar1.getYear());
System.out.printf("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\n"
,userCar2.getMake()
,userCar2.getModel()
,userCar2.getMiles()
,userCar2.getYear());
System.out.printf("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\n"
,userCar3.getMake()
,userCar3.getModel()
,userCar3.getMiles()
,userCar3.getYear());
System.out.printf("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\n"
,userCar4.getMake()
,userCar4.getModel()
,userCar4.getMiles()
,userCar4.getYear());
System.out.printf("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\n"
,userCar5.getMake()
,userCar5.getModel()
,userCar5.getMiles()
,userCar5.getYear());
}
}
改造之後(Override了toString方法)優化寫法
只需要一行就能獲得所有屬性資訊且格式都只需定義一次
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
*Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties.
*Tochangethistemplatefile,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packageobjectclasses;
importjava.util.Scanner;
/**
*
*@authorchous
*/
publicclassDriver{
/**
*@paramargsthecommandlinearguments
*/
publicstaticvoidmain(String[]args){
//TODOcodeapplicationlogichere
CaruserCar1=newCar("Toyota","vios",3452.8,2010);
System.out.println(userCar1);
CaruserCar2=newCar("NISSAN","TIDA",3244.5,2013);
System.out.println(userCar2);
CaruserCar3=newCar("Toyota","Yaris",3244.5,2012);
System.out.println(userCar3);
CaruserCar4=newCar("honda","CITY",3242.5,2015);
System.out.println(userCar4);
CaruserCar5=newCar("honda","HR-V",3248.5,2015);
System.out.println(userCar5);
}
}
有沒有感覺到 Override的強大力量
講到Override(覆寫) 一定會有人把它跟 overloading搞混
那 overloading(多載) 又是捨麼???
Overloading(多載)
overloading 從外觀表面語法
就是相同method名稱
但有不同參數不同回傳型態的多重定義
可能同樣一種方法是 加總的叫做Sum
可是又可能分成回傳型態不同,傳入參數可能針對兩個或三個甚至多個加總的差異
intSum(intnum1,intnum2)
intSum(intnum1,intnum2,intnum3)
doubleSum(doublenum1,doublenum2)
doubleSum(doublenum1,doublenum2)
以剛剛我們建立的Car 建構子來看
一個車子我們還會想看他的時速(speedperhour)
甚至希望能去修改車子之加速(我們會去採油門改增加的速度)
增加油門改加速機制的相關方法及屬性、屬性相應存取方法
建構子擴充定義
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
*Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties.
*Tochangethistemplatefile,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packageobjectclasses;
/**
*
*@authorchous
*/
publicclassCar{
privateString_make;
privateString_model;
privateint_year;
privatedouble_miles;
privatedouble_speed;
/**
*AnewCarwithNoParameters
*/
publicCar(){
}
publicCar(Stringmake,Stringmodel,doublemiles,intyear){
this._make=make;
this._model=model;
this._miles=miles;
this._year=year;
this._speed=0;
}
/**
*AnewCarwithParameters
*@parammakethemake
*@parammodelthemodel
*@paramyeartheyear
*@parammilesthemiles
*@paramspeedthespeedperhour
*/
publicCar(Stringmake,Stringmodel,doublemiles,intyear,doublespeed){
this._make=make;
this._model=model;
this._miles=miles;
this._year=year;
this._speed=speed;
}
publicStringgetMake(){
returnthis._make;
}
publicvoidsetMake(Stringvalue){
this._make=value;
}
publicStringgetModel(){
returnthis._model;
}
publicvoidsetModel(Stringvalue){
this._model=value;
}
publicdoublegetMiles(){
returnthis._miles;
}
publicvoidsetMiles(doublevalue){
this._miles=value;
}
publicintgetYear(){
returnthis._year;
}
publicvoidsetYear(intvalue){
this._year=value;
}
publicdoublegetSpeed(){
returnthis._speed;
}
publicvoidsetSpeed(doublevalue){
this._speed=value;
}
/**
*OverridesBasetoString()onObject.
*
*@returnthestringrepresentationoftheobject.
*/
@Override
publicStringtoString(){
returnString.format("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\t"
+"Speed:%.2fMilesPerHour\n"
,this.getMake()
,this.getModel()
,this.getMiles()
,this.getYear()
,this.getSpeed());
}
/**
*defaultIncrementby10
*@return
*/
publicbooleanaccellerate()
{
_speed+=10;
returntrue;
}
/**
*
*@paramnumMPHMilesperhour
*@return
*/
publicbooleanaccellerate(intnumMPH)
{
_speed+=numMPH;
returntrue;
}
publicdoubleaccellerateGetSpeed()
{
_speed+=10;
returnthis.getSpeed();
}
publicdoubleaccellerateGetSpeed(intnumMPH)
{
_speed+=numMPH;
returnthis.getSpeed();
}
}
建構子 多載
-->
車子空車位
有車子停進來未發動
有車子停進來已發動(有初速)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
publicCar(){
}
publicCar(Stringmake,Stringmodel,doublemiles,intyear){
this._make=make;
this._model=model;
this._miles=miles;
this._year=year;
this._speed=0;
}
/**
*AnewCarwithParameters
*@parammakethemake
*@parammodelthemodel
*@paramyeartheyear
*@parammilesthemiles
*@paramspeedthespeedperhour
*/
publicCar(Stringmake,Stringmodel,doublemiles,intyear,doublespeed){
this._make=make;
this._model=model;
this._miles=miles;
this._year=year;
this._speed=speed;
}
返回數值型態Boolean之是否已加速方法多載
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
*defaultIncrementby10
*@return
*/
publicbooleanaccellerate()
{
_speed+=10;
returntrue;
}
/**
*
*@paramnumMPHMilesperhour
*@return
*/
publicbooleanaccellerate(intnumMPH)
{
_speed+=numMPH;
returntrue;
}
預設加速區段 設置為10
那又多增設 擴充給我們自己設置加速區間的overloading方法
可以讓我們多填充參數設置自己想要油門踩加速度為多少
調用 userCar1.accellerate(35);
速度累加上去後結果
返回數值型態double
之獲取再加速某速之後去度區段方法 多載
1
2
3
4
5
6
7
8
9
10
publicdoubleaccellerateGetSpeed()
{
_speed+=10;
returnthis.getSpeed();
}
publicdoubleaccellerateGetSpeed(intnumMPH)
{
_speed+=numMPH;
returnthis.getSpeed();
}
現行Code
主程式部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/*
*Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties.
*Tochangethistemplatefile,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packageobjectclasses;
importjava.util.Scanner;
/**
*
*@authorchous
*/
publicclassDriver{
/**
*@paramargsthecommandlinearguments
*/
publicstaticvoidmain(String[]args){
//TODOcodeapplicationlogichere
CaruserCar1=newCar("Toyota","vios",3452.8,2010);
System.out.println("一台車剛初始化未發動狀態特性:");
System.out.println(userCar1);
System.out.println("一台車發動後調成空檔預設加速往前速度特性:");
userCar1.accellerate();
System.out.println(userCar1);
System.out.println("一台車發動後調成空檔後又踩了油門加速了35m速度特性:");
userCar1.accellerate(35);
System.out.println(userCar1);
System.out.println("第二台車剛發動且以15mph初速出發");
CaruserCar2=newCar("NISSAN","TIDA",3244.5,2013,15);
System.out.println(userCar2);
booleanisSuccess=userCar2.accellerate();//default+10
System.out.println("是否已經成功發動:"+isSuccess+"當前車速為:"+userCar2.getSpeed());
doublecurrentSpeedOfCar2=userCar2.accellerateGetSpeed(20);
System.out.println("再多加速20mph之後的車速:"+currentSpeedOfCar2);
//CaruserCar2=newCar("NISSAN","TIDA",3244.5,2013);
//System.out.println(userCar2);
//CaruserCar3=newCar("Toyota","Yaris",3244.5,2012,45);
//System.out.println(userCar3);
//CaruserCar4=newCar("honda","CITY",3242.5,2015,50);
//System.out.println(userCar4);
}
}
Car類別部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
*Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties.
*Tochangethistemplatefile,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packageobjectclasses;
/**
*
*@authorchous
*/
publicclassCar{
privateString_make;
privateString_model;
privateint_year;
privatedouble_miles;
privatedouble_speed;
/**
*AnewCarwithNoParameters
*/
publicCar(){
}
publicCar(Stringmake,Stringmodel,doublemiles,intyear){
this._make=make;
this._model=model;
this._miles=miles;
this._year=year;
this._speed=0;
}
/**
*AnewCarwithParameters
*@parammakethemake
*@parammodelthemodel
*@paramyeartheyear
*@parammilesthemiles
*@paramspeedthespeedperhour
*/
publicCar(Stringmake,Stringmodel,doublemiles,intyear,doublespeed){
this._make=make;
this._model=model;
this._miles=miles;
this._year=year;
this._speed=speed;
}
publicStringgetMake(){
returnthis._make;
}
publicvoidsetMake(Stringvalue){
this._make=value;
}
publicStringgetModel(){
returnthis._model;
}
publicvoidsetModel(Stringvalue){
this._model=value;
}
publicdoublegetMiles(){
returnthis._miles;
}
publicvoidsetMiles(doublevalue){
this._miles=value;
}
publicintgetYear(){
returnthis._year;
}
publicvoidsetYear(intvalue){
this._year=value;
}
publicdoublegetSpeed(){
returnthis._speed;
}
publicvoidsetSpeed(doublevalue){
this._speed=value;
}
/**
*OverridesBasetoString()onObject.
*
*@returnthestringrepresentationoftheobject.
*/
@Override
publicStringtoString(){
returnString.format("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\t"
+"Speed:%.2fMilesPerHour\n"
,this.getMake()
,this.getModel()
,this.getMiles()
,this.getYear()
,this.getSpeed());
}
/**
*defaultIncrementby10
*@return
*/
publicbooleanaccellerate()
{
_speed+=10;
returntrue;
}
/**
*
*@paramnumMPHMilesperhour
*@return
*/
publicbooleanaccellerate(intnumMPH)
{
_speed+=numMPH;
returntrue;
}
publicdoubleaccellerateGetSpeed()
{
_speed+=10;
returnthis.getSpeed();
}
publicdoubleaccellerateGetSpeed(intnumMPH)
{
_speed+=numMPH;
returnthis.getSpeed();
}
}
JAVA學習
取得連結
Facebook
Twitter
Pinterest
以電子郵件傳送
其他應用程式
留言
這個網誌中的熱門文章
經得起原始碼資安弱點掃描的程式設計習慣培養(三)_7.CrossSiteScripting(XSS)_StoredXSS_ReflectedXSSAllClients
-
3月10,2021
近期新加入的功能code剛好也被CheckMarx掃出高風險部分的程式碼漏洞我也踏到這個Issue啦CrossSiteScripting(XSS) 第一種.StoredXSS高風險CheckMarx掃碼報告給的說明[StoredXSS]============================================================風險:攻擊者可以利用合法存取應用程式提交資料到資料庫。
當另一個使用者隨後存取該資料,網頁可能會被改寫且惡意腳本可能會被啟動。
發生原因:從資料庫中的資料建立網頁。
資料直接嵌入至HTML的頁面,利用瀏覽器顯示。
資料可能源自於其他使用者的輸入。
如果資料包含HTML片段或Javascript,使用者無法分辨是否為預期的頁面。
該漏洞主因為未先對嵌入資料庫中的資料進行編碼(Encode)來預防瀏覽器將其當為HTML的格式而非純文字。
如何避免:1.驗證所有資料,無論其來源為何。
驗證應基於白名單:僅接受預定結構的資訊,而不是拒絕不良的樣式(Patterns)。
應確認: ●資料型態 ●大小 ●範圍 ●格式 ●期望值 2.驗證無法取代編碼.輸出嵌入之前,不論其來源,將所有動態資料進行編碼.編碼方式應該是上下文相關的.例如:●HTML內容使用HTML的編碼方式 ●HTML編碼特性是將資料輸出到特性的值●JavaScript的編碼方式為伺服器產生的Javascript 3.考慮使用ESAPI的編碼庫,或它的內置功能。
對於舊版的ASP.NET,請考慮使用AntiXSS. 4.在HTTP類型對應的表頭,明確定義整個頁面的字元編碼. 5.設置httpOnly標誌於會期資訊,以防止利用XSS來竊取資訊.============================================================這裡報告描述是指我對傳進來字串參數直接拋給DAL處裡的類別執行查詢這裡缺乏對輸入進來的字串參數做一些查檢判斷也建議在帶入時對參數也做一些htmlencode處理這裡用AntiXSS來Encode第二種.ReflectedXSSAllClients高風險CheckMarx掃碼報告給的說明[Reflecte
閱讀完整內容
ASP.NETWebService(二)_三種存取方式介紹_webmethod屬性大致介紹
-
10月25,2020
很久以前曾整理過一篇xmlwebservice部落格文章https://coolmandiary.blogspot.com/2017/11/web-service.html 可以得知用於應用程式整合、B2B整合和跨防火牆的通訊如今因為又看到其他文章跟在實際專案中再次見面因此想再加深補充實務上的經驗分享當筆記在此之前先溫顧一下在.NETWebService中共分為三種存取途徑1.EndPoint(SOAP):也就是比較常在市面上基礎教授書籍中講的URIlocation 會直接條列出webservice所包含的一系列方法及方法描述、Class描述是XMLbased的messagetemplate,是Browser跟WebService之間溝通收發的橋樑。
實際案例:http://www.webxml.com.cn/WebServices/WeatherWS.asmx2.Disco(WebServiceDiscovery):用於指向web服務位置Disco的用途就像電話簿和搜尋引擎網站一樣,提供資訊分類以及尋找的服務,讓我們能方便迅速找到所需的WebServices。
其運作原理是,當開發人員將一個WebService設計完成之後,可以將它登錄到一個集中的地方,其他人就可以向這個集中地查詢找到需要的服務。
這個登錄-查詢的機制只要就是依靠UDDI(UniversalDescription,DiscoveryandIntegration)來達成。
(備註:在不知道哪裡有你需要的WebServices情境下起到作用。
)實際案例:http://www.webxml.com.cn/WebServices/WeatherWS.asmx?disco3.WSDL(WebServicesDescriptionLanguage):用於描述webservice服務定義的方法、屬性、Binding的協定、Port、URI當在網路上找到一個WebService,如何知道怎樣使用?有哪些服務、方法可以呼叫?要傳遞對應哪些參數?(備註:是在你已經確定要使用某個WebService並且知道其網址的情形下才有用)實際案例:http://www.webxml.com.cn/WebServices/Wea
閱讀完整內容
經得起原始碼資安弱點掃描的程式設計習慣培養(五)_MissingHSTSHeader
-
6月27,2021
接續前幾篇系列經得起原始碼資安弱點掃描的程式設計習慣培養(一)_OWASPTop10(十大網站安全風險)_學習寫更安全程式碼的網站推薦經得起原始碼資安弱點掃描的程式設計習慣培養(二)_8.InsecureDeserialization:不安全的反序列化漏洞ASP.NET處理方式經得起原始碼資安弱點掃描的程式設計習慣培養(三)_7.CrossSiteScripting(XSS)_StoredXSS_ReflectedXSSAllClients經得起原始碼資安弱點掃描的程式設計習慣培養(四)_1.Injection注入攻擊_SQLInjection)_orderby語句正確參數化套入最近又遇到被若安掃描到高風險要修正的程式碼啦....一看這還真是搞不懂該怎麼修呢HSTS(HTTPStrictTransportSecurity) 主要是一份國際標準規格(RFC6797)的網際網路瀏覽安全機制,用於宣告瀏覽器與伺服器之間通訊方式必須強制採用TLS/SSL加密通道。
只要從伺服器端送出一個Strict-Transport-Security標頭(Header)給瀏覽器,即可告知瀏覽器於未來的某段時間內一律使用SSL來和該網站連接(設定可涵蓋所有子域名網站),一旦發生憑證失效情況,使用者將無法再瀏覽該網站,如此一來便可大幅減少中間人攻擊的問題發生。
再更白話一點HSTSHeader就是負責將http強制轉為httpsCheckMarx掃碼報告給的說明============================================================風險:如果webconfig沒有設置HSTS表頭、"max-age"(有效期)不足一年,或沒有設定"includeSubDomains"(包含所有子網域),可能會使用戶容易遭受中間人攻擊。
發生原因:許多使用者只要在瀏覽器的網址列輸入網域名稱(DomainName)即可瀏覽網站,並沒有輸入協定(Protocol)的名稱。
瀏覽器會自動假設使用者使用的是HTTP協定而不是有加密機制的HTTPS協定。
在第一次發出前往特定網站的請求時,攻擊者可以執行中間人攻擊並將用戶轉址到
閱讀完整內容
Samuel
瀏覽簡介
封存
2022
29
三月
2
二月
8
一月
19
2021
235
十二月
21
十一月
15
十月
27
九月
29
八月
44
七月
26
六月
13
五月
9
四月
10
三月
13
二月
13
一月
15
2020
97
十二月
4
十一月
26
十月
10
九月
23
八月
4
七月
9
六月
1
五月
5
四月
3
三月
6
一月
6
2019
18
六月
1
五月
1
四月
6
三月
2
一月
8
2018
43
十二月
1
十一月
2
九月
1
八月
1
七月
5
六月
2
五月
2
四月
5
三月
8
二月
7
一月
9
系統重構(一系列等量變換)_技法1.抽取方法(ExtractMethod)_技法2.抽取類別(Ex...
LinuxShell腳本_學習筆記2_自定義變數_環境變數_變數賦值_單引號雙引號差別
LinuxShell腳本_學習筆記1_自動化運維基石_寫第一支Shell腳本程式
JAVA程式語法_物件導向Part2_static關鍵字使用之便利_final關鍵字使用
JAVA程式語法_ArrayList簡單錯誤用法及常發生錯誤介紹_GenericTypes泛型_D...
JAVA程式語法_數學運算
JAVA程式語法_物件導向Part1_資料欄位屬性_屬性封裝(get/set)_override方法...
英文用語分享Part1
C++_STL筆記1
2017
145
十一月
9
十月
4
九月
8
八月
3
七月
9
六月
14
五月
25
四月
30
三月
26
二月
9
一月
8
2016
196
十二月
2
十一月
13
十月
9
九月
27
八月
19
七月
14
六月
19
五月
20
四月
9
三月
17
二月
22
一月
25
顯示更多
顯示較少
分類
C#54
MSSQL38
.NETCore36
asp.net36
opencv2411_3.0開發筆記35
T-SQL34
.NETCoreWebAPI26
ASP.NETMVC23
iOS21
python21
JAVA學習20
Kinectv2開發特訓18
VueJS16
EmguCV_開發15
Checkmarx14
程式原始碼資安弱點掃瞄14
Node.JS13
Unity學習13
疑難排解13
Javascript11
Oracle11
jQuery11
嵌入式媒體11
C#WindowsForm10
openFrameworks10
樹梅派10
Azure9
CleanCode9
HTML5_Javascript_CSS9
PHP9
win10安全9
Azure雲端應用開發8
RDLC報表8
ReactJs8
VB.NET8
前端五四三8
深入淺出C#8
ASP.NETWepAPI7
Angular7
C++7
CrystalReport報表開發7
小技巧收集7
ECCouncilCASE.NET6
JAVA6
XML6
圖學影像演算法研讀6
理財學習6
設計模式6
Dlib5
LeetCode5
MAYA學習小筆記5
SignalR5
WPF5
版本控制教學5
物件導向程式設計5
資料探勘weka5
.Net54
Blazor4
DigitalOcean4
DomainKnow-How4
Redis4
Swift4
多益4
小技能儲備4
汽車駕訓筆記4
產業替代役工作心得4
領域知識4
AJAX3
ArchitectureDeisignPattern3
Docker3
ECCouncilCASE3
Eclipse技巧3
EntityFrameworkCore3
HTCVive開發學習3
IIS配置3
J2EE3
Qt3
WebService3
WordPress_冬季特訓3
cisco_CCNA學習3
opencv之魂3
pycharm3
unittest3
原始碼掃描工具3
單元測試3
學長我不會這個要怎麼做系列3
心情3
演算法3
視窗程設_冬季特訓3
電商維護案3
.Net開發技巧工具2
ADO.NET2
AForge.NET2
Accord.Net2
BlazorServer2
Codility2
DevExpress2
EntityFramework2
LinuxShell2
Linux作業系統2
MVC架構設計2
Processing2
RestSharp2
SMS2
TFS2
VMware2
bootstrap2
bootstrap42
git2
jQueryUI2
openGL2
opencv3.22
opencv_on_WPF2
phpMyAdmin資料庫語法2
前端套件推薦使用2
學習技術迷思探討2
有效資訊的傳播2
科技時事2
網頁應用開發工作常用的技巧2
靈感參考2
A-Frame1
AI1
ASP1
AWS物聯網1
AccessibilityinWebDevelopment1
Access資料庫1
AndroidStudio1
AngularMaterial1
Aspose1
Aspose.Words1
AzureDevOps1
BlazorWebAssembly1
Blender1
C1
CIM工程師工作所學1
Cocoapods1
CustomServerControl1
DI1
Delphi1
DependencyInjection1
DevOps1
ECCouncil1
EIT架構思想1
ES61
Express1
FireBase1
GCP教學1
Gimp1
GoDaddy1
HTTPS1
HtmlAgilityPack1
MFC1
MFC_opencv1
MIS程式設計師之魂1
MVP架構設計1
MongoDB1
NPOI1
Natron1
NetBeans使用1
Octane1
PdfSharp1
PowerBI1
RWD1
RedHat_51
SILOpenFontLicense1
SQLite1
SQL查詢效能提升1
SQL查詢效能調校1
SideProject1
SublineText編輯器使用1
TOADForOracle1
Typescript1
UI一致性1
V8引擎1
VB.NET網路程式設計1
WebVR1
WindowsServer1
Xamarin手機應用開發1
Xcode1
angularJS1
axios1
certbot1
colorbox1
css1
html1
iTextSharp1
json.net1
libsvm1
opendata1
parser1
postman1
visualstudio1
webmethod1
不同系統下的操作經驗1
作品集(2013至2015)1
個人職涯規劃1
公文寫作1
區塊鍊1
半導體產業知識1
反編譯1
同事相處1
商談應對1
外包案子接案1
安全性程式設計1
家教技術顧問課程紀錄1
密碼學1
實用生活科技1
影像處理1
快速配置1
文章心得1
日語1
機器學習1
正規表達式1
泛型處裡函式1
無障礙網頁設計調整1
產業新聞1
相依性注入1
私房菜單料理1
程式碼重構原理1
程式設計概要特訓1
程式語言Note1
系統重構1
統計1
網路安全1
網頁爬蟲1
美劇英文1
職場達人秀1
英文用語1
英文電影1
資料結構1
軟體開發概論學習1
遠程目標1
開發套件插件列1
離散數學筆記1
顯示更多
顯示較少
總瀏覽人數
BloggerAds
延伸文章資訊
- 1Java 入門指南- getter 與setter - 程式語言教學誌
介紹Java 中getter 與setter 的概念。 ... 誌》的範例程式http://pydoing.blogspot.com/ 檔名:Encrypt.java 功能:示範Java 程式作...
- 2JAVA Encapsulation(Java 封裝) , get/set method - Ocean 學習 ...
§JAVA封裝,get與set method 封裝觀念在物件導向中語沒有什麼不同,只是Java的get與set使用方式上與ActionScript3規則不太相同,以下將Java與AS3, ...
- 3內容不重複的Set
package cc.openhome; import java.util. ... 以先前範例而言,若實作了 hashCode() 與 equals() 方法,則重複的 Students 將不...
- 4【Java基礎】setter與getter方法- IT閱讀
寫一個函式,專門針對private變數,每當想要修改這個變數的時候,就呼叫這個set函式。 2.get:既然這個變數是private,那麼外部無法獲取這個變數的值 ...
- 5封裝@ 阿葉的JAVA筆記 - 隨意窩
... 方法來存取屬性封裝實例public class Book{private String name; //屬性設為私有化並建立set及get方法public void setName(St...