【ssm個人博客項目實戰(zhàn)09】寫博客與自定義監(jiān)聽器

前面我們已經(jīng)完成了博客的分頁顯示模糊查詢刪除等功能,現(xiàn)在我們就講一下如何實現(xiàn)寫博客與修改博客的功能。

1跷究、

寫博客 顧名思義肯定要要寫 所以我用了一個富文本編輯器(百度UE) 當然大家有更好的選擇可以使用自己熟悉的富文本編輯器 或者使用markdown編輯器碌廓。 這里我就以百度UE為示例來給大家講解机蔗。
首先給大家看一下寫博客的界面

寫博客
修改博客

2、

首先我們來了解一下百度UE怎么使用
1膘格、下載百度UE插件
2峭范、新建一個html頁面 并且寫入以下代碼

image.png

3、使用瀏覽器的方式打開該頁面就能看到運行結(jié)果 如圖下

image.png

4瘪贱、具體詳細配置使用請參考下面網(wǎng)址

現(xiàn)在我們已經(jīng)初步了解百度UE如何使用 那么就可以正式開始我們的開發(fā)了纱控!

首先我們在admin目錄下面新建一個writeBlog.jsp

然后同樣的導入我們的公共頭文件
<%@include file="./common/head.jspf"%>
這樣我們easyui所用到的一些js或者css就載入進來了
另外我們還需要把百度UE相關(guān)的js引入

<script type="text/javascript" charset="utf-8"
    src="${blog}/static/ueditor1_4_3_3/ueditor.config.js"></script>
<script type="text/javascript" charset="utf-8"
    src="${blog}/static/ueditor1_4_3_3/ueditor.all.min.js">
    
</script>
<!--建議手動加在語言,避免在ie下有時因為加載語言失敗導致編輯器加載失敗-->
<!--這里加載的語言文件會覆蓋你在配置項目里添加的語言類型菜秦,比如你在配置項目里配置的是英文甜害,這里加載的中文,那最后就是中文-->
<script type="text/javascript" charset="utf-8"
    src="${blog}/static/ueditor1_4_3_3/lang/zh-cn/zh-cn.js"></script>

然后根據(jù)百度UE的相關(guān)文件寫出以下代碼 等下我解釋相關(guān)代碼的作用

<body style="margin: 10px; font-family: microsoft yahei">

    <div id="p" class="easyui-panel" title="編寫博客" style="padding: 10px;">
        
        <table cellspacing="20px">
            <tr>
                <td width="80px">博客標題:</td>
                <td><input type="text" id="title" name="title" style="width:400px" /></td>
            </tr>
            <tr>
                <td>所屬類別:</td>
                <td><select id="blogTypeId" class="easyui-combobox"
                    name="blogType.id" style="width:154px" editable="false"
                    panelHeight="auto">
                        <option value="">請選擇博客類別...</option>
                        <c:forEach items="${blogTypeList }" var="blogType">
                            <option value="${blogType.id }">${blogType.typeName }</option>
                        </c:forEach>
                </select></td>
                <td></td>
            </tr>
            <tr>
                <td valign="top">博客內(nèi)容:</td>
                <td><script id="editor" name="content" type="text/plain"
                        style="width:95%; height:200px;"></script></td>
            </tr>
            <tr>
                <td>關(guān)鍵字:</td>
                <td><input type="text" id="keyWord" name="keyWord"
                    style="width:400px" />&nbsp;&nbsp;&nbsp;多個關(guān)鍵字的話請用空格隔開</td>
            </tr>
            <tr>
                <td></td>
                <td><a href="javascript:submitData()" class="easyui-linkbutton"
                    data-options="iconCls:'icon-submit'">發(fā)布博客</a></td>
            </tr>
        </table>
    </div>




    <!-- 實例化編輯器 -->
    <script type="text/javascript">
        var ue = UE.getEditor('editor');
    </script>
    <script type="text/javascript">
        /**
         * 發(fā)布博客
          */
        function submitData() {
            //獲取博客標題
            var title = $("#title").val();
            //獲取博客類別id
            var blogTypeId = $("#blogTypeId").combobox("getValue");
            //獲取博客內(nèi)容 帶標記
            var content = UE.getEditor('editor').getContent();
            //截取博客前155字符 作為博客簡介
            var summary = UE.getEditor('editor').getContentTxt().substr(0, 155);
            //博客關(guān)鍵詞
            var keyWord = $("#keyWord").val();
            //獲取博客內(nèi)容  不帶標簽 純文本
            var contentNoTag = UE.getEditor('editor').getContentTxt();
            //校驗
            if (title == null || title == '') {
                $.messager.alert("系統(tǒng)提示", "請輸入標題球昨!");
            } else if (blogTypeId == null || blogTypeId == '') {
                $.messager.alert("系統(tǒng)提示", "請選擇博客類型尔店!");
            } else if (content == null || content == '') {
                $.messager.alert("系統(tǒng)提示", "請編輯博客內(nèi)容!");
            } else {
               //ajax請求 請求后臺寫博客接口
                $.post("${blog}/admin/blog/save.do",
                        {
                            'title' : title,
                            'blogType.id' : blogTypeId,
                            'content' : content,
                            'summary' : summary,
                            'keyWord' : keyWord,
                            'contentNoTag' : contentNoTag
                        }, function(result) {
                            if (result.success) {
                                $.messager.alert("系統(tǒng)提示", "博客發(fā)布成功!");
                                clearValues();
                            } else {
                                $.messager.alert("系統(tǒng)提示", "博客發(fā)布失斚荨鲫售!");
                            }
                        }, "json");
            }
        }
        //清空功能
        function clearValues() {
            $("#title").val("");
            $("#blogTypeId").combobox("setValue", "");
            UE.getEditor("editor").setContent("");
            $("#keyWord").val("");
        }
    </script>
</body>

首先要解釋的是“博客類型” 因為當我寫一篇博客的時候我需要給這篇博客選中一個類別 意味著當我打開這個頁面的時候我就應該把數(shù)據(jù)庫中所存的所有博客類別給查詢出來然后把發(fā)給我們的前端視圖,因為我們的修改博客界面也需要這個一博客類型信息该肴,所以我就用一個監(jiān)聽器來實現(xiàn)查詢博客類型這個功能情竹。


首先我們新建一個listener包 用于存放監(jiān)聽器

然后新建一個自定義監(jiān)聽器

@Component
/**
 * @Author xp
 * @Description 監(jiān)聽程序初始化
 * @Date 2017/4/23 21:48
 */
public class InitBloggerData implements ServletContextListener, ApplicationContextAware {

    private static ApplicationContext applicationContext;
    
    public void contextInitialized(ServletContextEvent sce) {
        //先獲取servlet上下文
        ServletContext application = sce.getServletContext();
        //同上,獲取博客類別信息service
        BlogTypeService blogTypeService = applicationContext.getBean(BlogTypeService.class);
        List<BlogType> blogTypeList = blogTypeService.getBlogTypeData();
        application.setAttribute("blogTypeList", blogTypeList);
    }

    public void contextDestroyed(ServletContextEvent sce) {
        // TODO Auto-generated method stub
        
    }

    public void setApplicationContext(ApplicationContext applicationContext) 
            throws BeansException {
        InitBloggerData.applicationContext = applicationContext;
    }

}

實現(xiàn)一個用于自定義監(jiān)聽器 實現(xiàn)要實現(xiàn)ServletContextListener接口
由于我們要獲取spring容器 所以我們還要實現(xiàn)ApplicationContextAware接口 并且實現(xiàn)對應的方法沙庐。
然后通過spring容器獲取的我們的BlogTypeService對象
獲取到博客類型列表blogTypeList 并且把它存到我們的application中
這樣我們的自定義監(jiān)聽器就配置ok 但是還沒有完成鲤妥。
我們需要在web.xml中配置一下我們的監(jiān)聽器
需要注意的是我們的監(jiān)聽器配置代碼的位置一定要在spring監(jiān)聽器的下面 因為我們的監(jiān)聽器依賴于spring監(jiān)聽器

   <listener>
        <listener-class>ssm.blog.listener.InitBloggerData</listener-class>
    </listener>

當我們獲取到了blogTypeList我們就可以通過jstl的foreach把博客類別遍歷并且放在select中

其他代碼 注解講的都很詳細 我就不在說了。

這樣 我們的寫博客功能就算完成

3拱雏、

測試

image.png
image.png

ok 今天就到這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棉安,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子铸抑,更是在濱河造成了極大的恐慌贡耽,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹊汛,死亡現(xiàn)場離奇詭異蒲赂,居然都是意外死亡,警方通過查閱死者的電腦和手機刁憋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門滥嘴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人至耻,你說我怎么就攤上這事若皱。” “怎么了尘颓?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵走触,是天一觀的道長。 經(jīng)常有香客問我疤苹,道長互广,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任卧土,我火速辦了婚禮惫皱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尤莺。我一直安慰自己逸吵,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布缝裁。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捷绑。 梳的紋絲不亂的頭發(fā)上韩脑,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音粹污,去河邊找鬼段多。 笑死,一個胖子當著我的面吹牛壮吩,可吹牛的內(nèi)容都是我干的进苍。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼鸭叙,長吁一口氣:“原來是場噩夢啊……” “哼觉啊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起沈贝,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤杠人,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宋下,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗡善,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年学歧,在試婚紗的時候發(fā)現(xiàn)自己被綠了罩引。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡枝笨,死狀恐怖袁铐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伺帘,我是刑警寧澤昭躺,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站伪嫁,受9級特大地震影響领炫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜张咳,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一帝洪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧脚猾,春花似錦葱峡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春军援,著一層夾襖步出監(jiān)牢的瞬間仅淑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工胸哥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留涯竟,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓空厌,卻偏偏與公主長得像庐船,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嘲更,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理筐钟,服務發(fā)現(xiàn),斷路器哮内,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,842評論 25 707
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,778評論 6 342
  • 看過很多資料北发,還是不知道怎么考研or保研纹因, 為了幫助到大家~青問Live為大家推出了這一季【進擊研究生系列課程】 ...
    紅燒兔0閱讀 568評論 0 1
  • 木耳 / 文 1.老屋 說著老家瞭恰,說著老院 說著,說著 我們就沉默了 默如老屋狱庇,默如蒿草 正被風吹著 一陣惊畏,緊似一...
    木耳_515閱讀 350評論 0 1