JSP學習心得,幹
阿新 • • 發佈:2019-02-18
1、form的action=""為空,所以可以在本頁面完成資料儲存。如果action直接填寫action="XXX.jsp",
那麼在XXX.jsp頁面是接收不到值的,因為還沒來得及儲存資料就已經跳過去了。
如果想用form的action="XXX.jsp"不為空完成資料儲存,兩種方法(情況)。
一、還是要在本頁面儲存資料。這時就需要再來一個臨時jsp頁面用來做跳板了,action="臨時頁面.jsp"的內容填寫臨時頁面。
用臨時頁面裡面來儲存資料,儲存完再跳到XXX.jsp頁面。
二、直接跳到去XXX.jsp頁面,action="XXX.jsp"。然後在XXX.jsp儲存資料,當然也可以獲取資料。
這種情況就可以<jsp:useBean scope="request"/>這樣用了。因為儲存和獲取資料是同一個頁面。
2、XXX1.jsp(含表單,提交)和XXX2.jsp裡面都用<jsp:useBean scope="session"/>。
如果都是scope="request",在本頁面儲存的資料只能在本頁面使用,在本頁面跳到另外一個頁面之後,
存在JavaBean裡面的資料就失效了, 這樣在XXX2.jsp介面就不能獲得XXX1.jsp提交的資料了。
3、 關於轉碼,兩種方式。一、可以儲存資料之前轉碼。二、也可以在獲取資料時轉碼。
request.setCharacterEncoding("utf-8");
和
try {
//方法一
byte b[]=str.getBytes("utf-8");
str=new String(b);
//方法二,直接這樣也行
str=new String(str.getBytes("utf-8"));
//方法三
str=new String(str.getBytes("ISO-8859-1"),"utf-8");
}
catch (UnsupportedEncodingException e) {
str="Have Exception:";
e.printStackTrace();
}
4、資料庫查詢避免Unknown column ‘xxx’ in ‘where clause’
但凡寫過sql語句的人估計都曾經碰到過類似於Unknown column ‘xxx’ in ‘where clause’的問題。 單從字面理解,我們很容易得出
列名不存在的結論,但是,很多時候起始並不是由於列名出錯造成的。而是由於拼湊sql語句時對字元型別資料沒有用引號引起來造成的。
例如:
一個sql語句:
String who="root";
String getUname="select Uname,Uauthority from user where Uname = +"who" ";
或者String getUname="select Uname,Uauthority from user where Uname =" +who;
或者String getUname="select Uname,Uauthority from user where Uname = who ";
則錯誤如下:
Unknown column‘who' in ‘where clause’
sql中如果who是整型的倒不會出現什麼錯誤,而如果sql中字串型別【必須】要包含在引號內。
所以修改sql為:String getUname="select Uname,Uauthority from user where Uname = '"+who+"' ";
則錯誤消失。
5、
java application 異常Before start of result set
ResultSet rs=st.executeQuery();
System.out.println(rs.getString("Name"));
問題出在這裡,不可以這麼用
這樣才正確
String name = "";
if(rs.next()){//或者while(rs.next())
name = rs.getString("Name");
if(name == null){
name = "";
}
System.out.println(name);
}
即使你十分確定能搜出記錄,也不可以在沒有rs.next()之前直接對rs進行取值。這涉及到rs物件的儲存方法。
裡面說白了就是指標。沒next,指標根本沒指向對應記錄
那麼在XXX.jsp頁面是接收不到值的,因為還沒來得及儲存資料就已經跳過去了。
如果想用form的action="XXX.jsp"不為空完成資料儲存,兩種方法(情況)。
一、還是要在本頁面儲存資料。這時就需要再來一個臨時jsp頁面用來做跳板了,action="臨時頁面.jsp"的內容填寫臨時頁面。
用臨時頁面裡面來儲存資料,儲存完再跳到XXX.jsp頁面。
二、直接跳到去XXX.jsp頁面,action="XXX.jsp"。然後在XXX.jsp儲存資料,當然也可以獲取資料。
這種情況就可以<jsp:useBean scope="request"/>這樣用了。因為儲存和獲取資料是同一個頁面。
2、XXX1.jsp(含表單,提交)和XXX2.jsp裡面都用<jsp:useBean scope="session"/>。
如果都是scope="request",在本頁面儲存的資料只能在本頁面使用,在本頁面跳到另外一個頁面之後,
存在JavaBean裡面的資料就失效了, 這樣在XXX2.jsp介面就不能獲得XXX1.jsp提交的資料了。
3、 關於轉碼,兩種方式。一、可以儲存資料之前轉碼。二、也可以在獲取資料時轉碼。
request.setCharacterEncoding("utf-8");
和
try {
//方法一
byte b[]=str.getBytes("utf-8");
str=new String(b);
//方法二,直接這樣也行
str=new String(str.getBytes("utf-8"));
//方法三
str=new String(str.getBytes("ISO-8859-1"),"utf-8");
}
catch (UnsupportedEncodingException e) {
str="Have Exception:";
e.printStackTrace();
}
4、資料庫查詢避免Unknown column ‘xxx’ in ‘where clause’
但凡寫過sql語句的人估計都曾經碰到過類似於Unknown column ‘xxx’ in ‘where clause’的問題。 單從字面理解,我們很容易得出
列名不存在的結論,但是,很多時候起始並不是由於列名出錯造成的。而是由於拼湊sql語句時對字元型別資料沒有用引號引起來造成的。
例如:
一個sql語句:
String who="root";
String getUname="select Uname,Uauthority from user where Uname = +"who" ";
或者String getUname="select Uname,Uauthority from user where Uname =" +who;
或者String getUname="select Uname,Uauthority from user where Uname = who ";
則錯誤如下:
Unknown column‘who' in ‘where clause’
sql中如果who是整型的倒不會出現什麼錯誤,而如果sql中字串型別【必須】要包含在引號內。
所以修改sql為:String getUname="select Uname,Uauthority from user where Uname = '"+who+"' ";
則錯誤消失。
5、
java application 異常Before start of result set
ResultSet rs=st.executeQuery();
System.out.println(rs.getString("Name"));
問題出在這裡,不可以這麼用
這樣才正確
String name = "";
if(rs.next()){//或者while(rs.next())
name = rs.getString("Name");
if(name == null){
name = "";
}
System.out.println(name);
}
即使你十分確定能搜出記錄,也不可以在沒有rs.next()之前直接對rs進行取值。這涉及到rs物件的儲存方法。
裡面說白了就是指標。沒next,指標根本沒指向對應記錄