入行初期遇到的小問題
這裡記錄一些自己入行初期遇到的小問題
1.java的String類常用切割方法:
split()和subString(),split返回的是字串陣列,subString返回的是String。
關鍵點:對字串進行切割或其他操作物件的,要先判斷這個物件是否存在,否則報空指標。
StringUtil.isNotBlank();和 StringUtil.isNotBlank();
二者區別在於字串是空格時,isNotBlank判斷為空,而isNotEmpty判斷不為空。
isNotEmpty(str)等價於 str != null && str.length > 0
isNotBlank(str) 等價於 str != null && str.length >0 && str.trim().length > 0
String str = "Hello World,i am your friend,nice to meet you!"; //切割成三個元素 str.split(",");// 1.Hello World 2.i am your friend 3.nice to meet you! //2表示根據切割符切割成幾份,結果切割成兩個元素 str.split(",",2);//1.Hello World 2.i am your friend,nice to meet you! //擷取序號6之後的 str.substring(6);//World,i am your friend,nice to meet you! //擷取序號[6,11)中的,java包前不包後,所以序號11的逗號不包括。 str.substring(6,11);//World
關於JS中對字串切割可自行百度:https://www.cnblogs.com/qj0813/p/5110211.html
關於長度。陣列是length屬性,String是length()方法,集合是size()方法
2.資料庫語句命名
DQL :Data Query Language 資料查詢語言,查
DCL:controller
DML:Data Manipulation Language 資料操縱語言,增、刪、 改
DDL:Data Difination Language 資料定義語言,對資料庫物件的操作,表結構、檢視、索引等
https://www.cnblogs.com/fan-yuan/p/7879353.html
3.struts 實體類要有get方法,值棧才能獲取到值
https://blog.csdn.net/qq_27376871/article/details/51240321
https://blog.csdn.net/Nickthink/article/details/52106229 Struts2中值棧的理解
4.spring中用了註解@Resources、@Autowired,就不要再寫get、set方法了
@Autowired是spring包的,根據型別查詢
@Resources是J2EE的,預設根據name查詢再根據type查詢
建議使用resources J2EE的,減少程式碼與spring的耦合
https://www.cnblogs.com/xiaoxi/p/5935009.html
https://www.cnblogs.com/xdp-gacl/p/3495887.html 孤傲蒼狼
5.jquery、js相關方法
$().each(function(i,var){}) 遍歷
eval(); 將物件轉化成json物件,一般用於非同步請求返回的json型別字串
6.EL表示式不能用。
在<page>指令中加 isELIgnored="false",原因暫未了解。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
7.獲取上下文路徑
這樣請求地址中就不需要再寫上下文了
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<base href="<%=basePath%>">
8.int相除得到的是int,小數要double或者X.0
System.out.println(3/5);//0
System.out.println(3.0/5.0);//0.6
System.out.println(5/3);//1
System.out.println(5.0/3.0);//1.6666666
9.Ajax後,要在ajax請求後加 return false,防止表單二次提交,也是ajax跳入error回撥函式的原因
之前搞不懂登入成功後怎麼一直會去資料庫查詢兩次,一次進入sucess函式一次就進入error函式
layui.use(['form','jquery','layer'], function () {
var form = layui.form;
var $ = layui.jquery;
var layer = layui.layer;
$(".login-btn").click(function(){
var username = $("#username").val();
var password = $("#password").val();
var remember = $("#remember").prop("checked");
$.ajax({
type:"POST",
url:"userAjaxLogin",
data:{'username':username,'password':password,'remember':(remember?1:0)},
dataType:"text",
success:function(mess){
if(mess){
layer.msg(mess, {
time: 5000, //5s後自動關閉
btn: [ '知道了'],
offset: '200px',
area: ['250px', '130px'],
icon: 5
});
return false;
}else{
window.location="admin/index.html";
}
},error:function(){
layer.msg('網路異常,請嘗試重新重新整理!', {
time: 5000, //5s後自動關閉
btn: [ '知道了'],
offset: '200px',
area: ['260px', '130px'],
icon: 5
});
}
})
return false;//這個很關鍵,要在ajax外面加
});
});
參考:https://blog.csdn.net/yangliu4683/article/details/78424299
https://www.cnblogs.com/zgrft/p/4383776.html 設定同步沒試過
10.作為專業碼農,集合等要給泛型
泛型,查詢的什麼資料就給什麼泛型,讓人一看就懂是什麼資料
實際web專案中,裡面泛型就是我們的實體類
List<Article> articles = new ArrayList();//泛型,查詢的什麼資料就給什麼泛型,讓人一看就懂是什麼資料
List<User> articles = new ArrayList();
List articles = new ArrayList();//這個就是很不專業的碼農,因為這個給老大diao了
11.表單與ajax衝突,post請求變成get請求
form表單如果method沒有設定get、set,預設是get請求提交的,我們ajax設定的type:“post”,並不能改變表單的method。
所以即使form表單中ajax設定post,表單提交也是get請求,但是此時的ajax確實是post請求的,只是因為此時ajax提交後,表單又提交了一次,所以我們只看到get請求。這個要多看瀏覽器工具F12中的請求頭。(學會使用瀏覽器的工具還有debug打點很使用)
解決方法和9.Ajax後,要在ajax請求後加 return false,防止表單二次提交,也是ajax跳入error回撥函式的原因 一樣,在ajax請求後加return false,阻止表單二次提交。
方法二百度的沒試過:
---------------------------------------------------------------------
(三)這個也是我遇到的問題,我在寫了一個form標籤,然後用submit的onclick事件去處理ajax響應,其中form的action=”。這個時候每點選一次submit,系統提示一次我的ajax object找不到,或者其它不相干的錯誤。除錯JavaScript也是出現status=0的問題。我用普通的button代替submit button問題就解決了。
原文: https://blog.csdn.net/wabiaozia/article/details/60761433
-----------------------------------------------------------------------
http://blog.sina.com.cn/s/blog_7ffb8dd501013kdm.html form表單中method的get和post區別
12.js、jquery常用方法
remove() 是清除這個元素 empty()是清除這個元素的子元素
<div id="div1"><div id="div2"><div> <div>
$("#div1").remove();//清除所有都沒了
$("#div1").empty();//清除div2 <div id="div1"><div>
隱藏元素
show() hide() toggle():顯示被隱藏的,隱藏已顯示的
$("#div11").css( 'visibility','hidden');//隱藏的元素在網頁上所佔的空間不變,還在佔據著位置
$("#div11").css( 'display','none');//徹底隱藏,沒有佔位,看不見摸不著
$("#div11").hide();//徹底隱藏,沒有佔位,看不見摸不著
<div id="div11">測試區域<div/>
$("#div11").css( 'visibility','hidden');
$("#div11").css( 'display','none');
$("#div11").hide();
jquery和dom的轉換
jquery物件的第一個元素是DOM元素 →→ $("#id")[0]
dom →→ jquery物件 $(dom元素)
13.EL表示式錯誤
c:if test="${? == ?}"這個就是正確的
c:if test=" ${? == ?}"這個就是錯誤的,在EL表示式前面多了個空格
14.JS forin遍歷
for(var x in y)
for(x in y)
<!DOCTYPE html>
<meta charset="UTF-8">
<script>
var x;
var zoon = new Array();
zoon[0] = "貓貓";
zoon[1] = "狗狗";
zoon[2] = "豬豬";
for (x in zoon){
console.log(zoon[x]);
}
var student={};
student.name="張三";
student["age"]=20;
for(var i in student)//前面變數i就是物件的屬性名
{
console.log(i);//name age
console.log(student[i]);//張三 20
}
</script>
https://blog.csdn.net/iteye_17658/article/details/82671449
15.JS全域性變數
var a = 10;//全域性變數
var test = function(){
num = 50;//不加var 就會把變數提升為全域性變數
var num2 = 30;//區域性變數
alert(num);
alert(num2);
}
16.js所謂的過載是後面的方法覆蓋前面的方法
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
function test(num){
alert("1111");
}
function test(num,num2,num3){
alert("222");
}
function test(num,num2){
alert("333");
}
test(10,20,30);//呼叫哪個方法?呼叫test(3)
//js所謂的過載是後面的方法覆蓋前面的方法
</script>
</head>
<body>
</body>
</html>
要如java般實現過載,可判斷引數的個數執行函式
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
//實現函式的過載 arguments是引數個數
var test = function(){
//判斷引數個數
if(test.arguments.length == 1){
alert("111");
}else if(test.arguments.length == 2){
alert("2222");
}
}
test(10,20);
</script>
</head>
<body>
</body>
</html>