寫crud的servlet業務遇到的一些問題及注意事項,當然少不了BUG(一會看看能不能把之前留的幾個問題答案補上)

0830

說說js刷新的幾種方式,

一般是在業務執行完成後回到當前界面,需要實現返回的情況.

在此之前預習一下超鏈接調js函數

1.<a oncilck="fun()" style="樣式">超鏈接</a></p>
2.<a οnclick="fun()" href="#">超鏈接</a>
3.<a href="javascript:fun()">超鏈接</a>

以上是幾種刷新方式

就是利用history對象(說這個就不得說一說遊覽器對象window包括history,navigator,screen,location,document)

[外鏈圖片轉存失敗(img-tyQNa4em-1567191606149)(C:\Users\15566\AppData\Roaming\Typora\typora-user-images\1567154639448.png)]

<!DOCTYPE html>
<html lang="en" xmlns:http="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>成功頁面</title>
    <script>
        function goback() {
            window.history.back();
        }
        //4.只是用來定時,沒有刷新
/*
        function go(){
            window.history.go(-1);
        }
        setTimeout("go()",3000);
*/
    </script>
</head>
<body>
    <h1>成功</h1>
    <input type="button" value="Back" onclick="goback()"/>
    <!-- 1.a標籤-->
    <a href="javascript:history.back(-1);">back返回上一頁</a>
    <a href="javascript:"; onclick="history.go(-1)">go返回上一頁</a>
    <!-- 2.按鈕-->
    <input type="button" name="Submit" οnclick="javascript:history.back(-1);" value="返回上一頁">
    <!-- 3.圖片-->
    <a href="javascript :;" onClick="javascript :history.back(-1);"><img src="圖片路徑" border="0" title="返回上一頁"></a>

    <!-- 返回上一頁面刷新-->
    <a href="javascript:self.location=document.referrer">返回上一頁</a>



</body>
</html>

servlet的增刪查改的業務邏輯

增、改、查通常與查分開,這也剛好對應數據庫的的數據操縱語言DCL和數據查詢語言DQL

注:爲什麼分開,這裏我談一下自己的見解.對於業務的處理不管是增加修改還是刪除都是對用戶的信息進行邏輯操作的處理,沒有涉及到對數據的處理與分析,更多的是對信息的維護,你也不知道這些維護的數據是否正確,需不需要修改,或者有新的數據添加進來這都是都數據的維護.而查詢則更注重數據信息的處理,對數據信息的篩選,能否從中提煉出來有價值的,可以用於其他領域的,能帶來經濟效益的數據變得至關重要.因此將其單獨拿出來作爲一個模塊.

增:增加,把前臺請求的數據經過相應的步驟進行封裝,添加到數據庫.

在servlet中:

1.獲取客戶端提交過來的數據. 如果是表單的話且post提交的話,考慮用request.getParamMap接收,使用BeanUtils類進行封裝處理;get提交的話,直接用request.getParameter(String name)接受,通常來說get提交一般不適合大量數據的傳輸,一般用來業務邏輯的實現

2.對接受的特殊類型作處理

DateConverter dc = new DateConverter();//創建日期轉化器
dc.setPatterns(new String[]{"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"});//設置接受日期格式
ConvertUtils.register(dc,Date.class);//註冊日期類轉化器

3.對接受的數據開始封裝,特別注意將表單的name屬性與實體類一一對應.

4.調用業務層處理想關的業務邏輯代碼.等待結果返回web層.

5.業務層去數據庫中調用需要的數據處理.等待結果返回業務層service.

6.數據層dao開始根據相關sql語句執行對數據的操作.

其中sql語句的拼接也在這裏完成.mybatis一個流行的因素就是的半自動化sql,程序員可以自己對sql語句拼接,相比於hibernate的全自動化雖然麻煩了一點,但是更加靈活(dao的效率關係着整個應用的友好性.開始涉及到sql優化,數據庫的調優,相應的併發,集羣問題也來啦)

7.返回給web層的結果.開始進行邏輯判斷.

8.最後就是做相應的跳轉.

BUG問題

1.對象最好先初始化,不然無法用到該值.Student stu = new Student();

一開始沒有初始化是因爲我想着的是先聲明一下用的時候就可以初始化啦,看起來或許比較方便.但是最基礎的東西忘了,那就是對象的使用必須先聲明在初始化.(這次遇見內部服務器500,不着急刷會手機就行啦,嘻嘻.如果真的遇見內部服務器報500一般來說基本都是邏輯出錯誤,或者語法有問題.)提醒一點,如果報空,注意變量是否賦值啦.因此特地建議變量一定要進行初始化養成良好習慣

 @Override
    public Student query(int id) {
        QueryRunner qr = new QueryRunner (C3P0Util.getDataSource ());
        String sql = "select * from student where id = ?";
        Student stu = new Student();
        Map<String,Object> map = null;
        try {
            map = qr.query (sql,new MapHandler (),id);
        } catch (SQLException e) {
            e.printStackTrace ( );
        }

            for(Map.Entry<String,Object> entry:map.entrySet()){

                if("id".equals(entry.getKey())){
                    stu.setId((int)entry.getValue());
                }else if("name".equals(entry.getKey())){
                    stu.setName((String)entry.getValue());
                }else if("age".equals(entry.getKey())){
                    stu.setAge((int)entry.getValue());
                }else if("birthday".endsWith(entry.getKey())){
                    stu.setBirthday((Date)entry.getValue());
                }else if("course".equals(entry.getKey())){
                    String str = (String)entry.getValue();
                    if(str!="" && str!=null){
                        str = str.substring(0,str.length()-1);
                        String[] ss = str.split("#");
                        stu.setCourse(ss);
                    }
                }
            }
        return stu;
    }

2.mysql本身是不支持數據類型的插入,因此插入之前必須將其進行轉化.

存入的時候,將數組轉化爲字符串,每個元素之間最好利用分界符分開,便於取出;

取出來的時候,將字符串轉化爲數組,使用String的split方法

3.如果使用BeanUtils中自帶的日期轉化類型轉換器DateConverter對於null或者""拷貝時會出現異常.

解決方式自定義日期轉化類型# 0830

說說js刷新的幾種方式,

一般是在業務執行完成後回到當前界面,需要實現返回的情況.

在此之前預習一下超鏈接調js函數

1.<a oncilck="fun()" style="樣式">超鏈接</a></p>
2.<a οnclick="fun()" href="#">超鏈接</a>
3.<a href="javascript:fun()">超鏈接</a>

以上是幾種刷新方式

就是利用history對象(說這個就不得說一說遊覽器對象window包括history,navigator,screen,location,document)

[外鏈圖片轉存失敗(img-zbEWucWw-1567191607256)(C:\Users\15566\AppData\Roaming\Typora\typora-user-images\1567154639448.png)]

<!DOCTYPE html>
<html lang="en" xmlns:http="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>成功頁面</title>
    <script>
        function goback() {
            window.history.back();
        }
        //4.只是用來定時,沒有刷新
/*
        function go(){
            window.history.go(-1);
        }
        setTimeout("go()",3000);
*/
    </script>
</head>
<body>
    <h1>成功</h1>
    <input type="button" value="Back" onclick="goback()"/>
    <!-- 1.a標籤-->
    <a href="javascript:history.back(-1);">back返回上一頁</a>
    <a href="javascript:"; onclick="history.go(-1)">go返回上一頁</a>
    <!-- 2.按鈕-->
    <input type="button" name="Submit" οnclick="javascript:history.back(-1);" value="返回上一頁">
    <!-- 3.圖片-->
    <a href="javascript :;" onClick="javascript :history.back(-1);"><img src="圖片路徑" border="0" title="返回上一頁"></a>

    <!-- 返回上一頁面刷新-->
    <a href="javascript:self.location=document.referrer">返回上一頁</a>



</body>
</html>

servlet的增刪查改的業務邏輯

增、改、查通常與查分開,這也剛好對應數據庫的的數據操縱語言DCL和數據查詢語言DQL

注:爲什麼分開,這裏我談一下自己的見解.對於業務的處理不管是增加修改還是刪除都是對用戶的信息進行邏輯操作的處理,沒有涉及到對數據的處理與分析,更多的是對信息的維護,你也不知道這些維護的數據是否正確,需不需要修改,或者有新的數據添加進來這都是都數據的維護.而查詢則更注重數據信息的處理,對數據信息的篩選,能否從中提煉出來有價值的,可以用於其他領域的,能帶來經濟效益的數據變得至關重要.因此將其單獨拿出來作爲一個模塊.

增:增加,把前臺請求的數據經過相應的步驟進行封裝,添加到數據庫.

在servlet中:

1.獲取客戶端提交過來的數據. 如果是表單的話且post提交的話,考慮用request.getParamMap接收,使用BeanUtils類進行封裝處理;get提交的話,直接用request.getParameter(String name)接受,通常來說get提交一般不適合大量數據的傳輸,一般用來業務邏輯的實現

2.對接受的特殊類型作處理

DateConverter dc = new DateConverter();//創建日期轉化器
dc.setPatterns(new String[]{"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"});//設置接受日期格式
ConvertUtils.register(dc,Date.class);//註冊日期類轉化器

3.對接受的數據開始封裝,特別注意將表單的name屬性與實體類一一對應.

4.調用業務層處理想關的業務邏輯代碼.等待結果返回web層.

5.業務層去數據庫中調用需要的數據處理.等待結果返回業務層service.

6.數據層dao開始根據相關sql語句執行對數據的操作.

其中sql語句的拼接也在這裏完成.mybatis一個流行的因素就是的半自動化sql,程序員可以自己對sql語句拼接,相比於hibernate的全自動化雖然麻煩了一點,但是更加靈活(dao的效率關係着整個應用的友好性.開始涉及到sql優化,數據庫的調優,相應的併發,集羣問題也來啦)

7.返回給web層的結果.開始進行邏輯判斷.

8.最後就是做相應的跳轉.

BUG問題

1.對象最好先初始化,不然無法用到該值.Student stu = new Student();

一開始沒有初始化是因爲我想着的是先聲明一下用的時候就可以初始化啦,看起來或許比較方便.但是最基礎的東西忘了,那就是對象的使用必須先聲明在初始化.(這次遇見內部服務器500,不着急刷會手機就行啦,嘻嘻.如果真的遇見內部服務器報500一般來說基本都是邏輯出錯誤,或者語法有問題.)提醒一點,如果報空,注意變量是否賦值啦.因此特地建議變量一定要進行初始化養成良好習慣

 @Override
    public Student query(int id) {
        QueryRunner qr = new QueryRunner (C3P0Util.getDataSource ());
        String sql = "select * from student where id = ?";
        Student stu = new Student();
        Map<String,Object> map = null;
        try {
            map = qr.query (sql,new MapHandler (),id);
        } catch (SQLException e) {
            e.printStackTrace ( );
        }

            for(Map.Entry<String,Object> entry:map.entrySet()){

                if("id".equals(entry.getKey())){
                    stu.setId((int)entry.getValue());
                }else if("name".equals(entry.getKey())){
                    stu.setName((String)entry.getValue());
                }else if("age".equals(entry.getKey())){
                    stu.setAge((int)entry.getValue());
                }else if("birthday".endsWith(entry.getKey())){
                    stu.setBirthday((Date)entry.getValue());
                }else if("course".equals(entry.getKey())){
                    String str = (String)entry.getValue();
                    if(str!="" && str!=null){
                        str = str.substring(0,str.length()-1);
                        String[] ss = str.split("#");
                        stu.setCourse(ss);
                    }
                }
            }
        return stu;
    }

2.mysql本身是不支持數據類型的插入,因此插入之前必須將其進行轉化.

存入的時候,將數組轉化爲字符串,每個元素之間最好利用分界符分開,便於取出;

取出來的時候,將字符串轉化爲數組,使用String的split方法

3.如果使用BeanUtils中自帶的日期轉化類型轉換器DateConverter對於null或者""拷貝時會出現異常.

解決方式自定義日期轉化類型# 0830

說說js刷新的幾種方式,

一般是在業務執行完成後回到當前界面,需要實現返回的情況.

在此之前預習一下超鏈接調js函數

1.<a oncilck="fun()" style="樣式">超鏈接</a></p>
2.<a οnclick="fun()" href="#">超鏈接</a>
3.<a href="javascript:fun()">超鏈接</a>

在這裏插入圖片描述

以上是幾種刷新方式

就是利用history對象(說這個就不得說一說遊覽器對象window包括history,navigator,screen,location,document)

<!DOCTYPE html>
<html lang="en" xmlns:http="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>成功頁面</title>
    <script>
        function goback() {
            window.history.back();
        }
        //4.只是用來定時,沒有刷新
/*
        function go(){
            window.history.go(-1);
        }
        setTimeout("go()",3000);
*/
    </script>
</head>
<body>
    <h1>成功</h1>
    <input type="button" value="Back" onclick="goback()"/>
    <!-- 1.a標籤-->
    <a href="javascript:history.back(-1);">back返回上一頁</a>
    <a href="javascript:"; onclick="history.go(-1)">go返回上一頁</a>
    <!-- 2.按鈕-->
    <input type="button" name="Submit" οnclick="javascript:history.back(-1);" value="返回上一頁">
    <!-- 3.圖片-->
    <a href="javascript :;" onClick="javascript :history.back(-1);"><img src="圖片路徑" border="0" title="返回上一頁"></a>

    <!-- 返回上一頁面刷新-->
    <a href="javascript:self.location=document.referrer">返回上一頁</a>



</body>
</html>

servlet的增刪查改的業務邏輯

增、改、查通常與查分開,這也剛好對應數據庫的的數據操縱語言DCL和數據查詢語言DQL

注:爲什麼分開,這裏我談一下自己的見解.對於業務的處理不管是增加修改還是刪除都是對用戶的信息進行邏輯操作的處理,沒有涉及到對數據的處理與分析,更多的是對信息的維護,你也不知道這些維護的數據是否正確,需不需要修改,或者有新的數據添加進來這都是都數據的維護.而查詢則更注重數據信息的處理,對數據信息的篩選,能否從中提煉出來有價值的,可以用於其他領域的,能帶來經濟效益的數據變得至關重要.因此將其單獨拿出來作爲一個模塊.

增:增加,把前臺請求的數據經過相應的步驟進行封裝,添加到數據庫.

在servlet中:

1.獲取客戶端提交過來的數據. 如果是表單的話且post提交的話,考慮用request.getParamMap接收,使用BeanUtils類進行封裝處理;get提交的話,直接用request.getParameter(String name)接受,通常來說get提交一般不適合大量數據的傳輸,一般用來業務邏輯的實現

2.對接受的特殊類型作處理

DateConverter dc = new DateConverter();//創建日期轉化器
dc.setPatterns(new String[]{"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"});//設置接受日期格式
ConvertUtils.register(dc,Date.class);//註冊日期類轉化器

3.對接受的數據開始封裝,特別注意將表單的name屬性與實體類一一對應.

4.調用業務層處理想關的業務邏輯代碼.等待結果返回web層.

5.業務層去數據庫中調用需要的數據處理.等待結果返回業務層service.

6.數據層dao開始根據相關sql語句執行對數據的操作.

其中sql語句的拼接也在這裏完成.mybatis一個流行的因素就是的半自動化sql,程序員可以自己對sql語句拼接,相比於hibernate的全自動化雖然麻煩了一點,但是更加靈活(dao的效率關係着整個應用的友好性.開始涉及到sql優化,數據庫的調優,相應的併發,集羣問題也來啦)

7.返回給web層的結果.開始進行邏輯判斷.

8.最後就是做相應的跳轉.

BUG問題

1.對象最好先初始化,不然無法用到該值.Student stu = new Student();

一開始沒有初始化是因爲我想着的是先聲明一下用的時候就可以初始化啦,看起來或許比較方便.但是最基礎的東西忘了,那就是對象的使用必須先聲明在初始化.(這次遇見內部服務器500,不着急刷會手機就行啦,嘻嘻.如果真的遇見內部服務器報500一般來說基本都是邏輯出錯誤,或者語法有問題.)提醒一點,如果報空,注意變量是否賦值啦.因此特地建議變量一定要進行初始化養成良好習慣

 @Override
    public Student query(int id) {
        QueryRunner qr = new QueryRunner (C3P0Util.getDataSource ());
        String sql = "select * from student where id = ?";
        Student stu = new Student();
        Map<String,Object> map = null;
        try {
            map = qr.query (sql,new MapHandler (),id);
        } catch (SQLException e) {
            e.printStackTrace ( );
        }

            for(Map.Entry<String,Object> entry:map.entrySet()){

                if("id".equals(entry.getKey())){
                    stu.setId((int)entry.getValue());
                }else if("name".equals(entry.getKey())){
                    stu.setName((String)entry.getValue());
                }else if("age".equals(entry.getKey())){
                    stu.setAge((int)entry.getValue());
                }else if("birthday".endsWith(entry.getKey())){
                    stu.setBirthday((Date)entry.getValue());
                }else if("course".equals(entry.getKey())){
                    String str = (String)entry.getValue();
                    if(str!="" && str!=null){
                        str = str.substring(0,str.length()-1);
                        String[] ss = str.split("#");
                        stu.setCourse(ss);
                    }
                }
            }
        return stu;
    }

2.mysql本身是不支持數據類型的插入,因此插入之前必須將其進行轉化.

存入的時候,將數組轉化爲字符串,每個元素之間最好利用分界符分開,便於取出;

取出來的時候,將字符串轉化爲數組,使用String的split方法

3.如果使用BeanUtils中自帶的日期轉化類型轉換器DateConverter對於null或者""拷貝時會出現異常.

解決方式自定義日期轉化類型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章