1. 程式人生 > >使用JSP+Servlet+Jdbc+Echatrs實現對豆瓣電影Top250的展示

使用JSP+Servlet+Jdbc+Echatrs實現對豆瓣電影Top250的展示

連接 html host 習慣 執行 result man 部分 quest

使用JSP+Servlet+Jdbc+Echatrs實現對豆瓣電影Top250的展示

寫在前面:
有的小夥伴,會吐槽啦,你這個標題有點長的啊。哈哈 ,好像是的!不過,這個也是本次案例中使用到的關鍵技術。如果,你正愁不會的數據可視化,那麽我接下來,我會帶你一步一步的實現這個數據可視化的功能。

效果圖:

技術分享圖片

技術分享圖片

開發工具:我們選擇的是IDEA,你還得準備一個豆瓣top250的數據源,我這裏用python爬蟲抓取統計了豆瓣top250電影各個國家電影數量。如何你擔心,沒有數據。先不用擔心,我會提供的。

小建議:在學習之前,你可以先把項目的源代碼,下載下來,自己可以先跑一邊,看一下,整體的效果。然後再接著看後面的步驟,這樣會比較好一些。這裏我把源代碼放在了碼雲上,地址:https://gitee.com/liuge36/Douban
可能有的小夥伴習慣用Github,這裏:https://github.com/liuge36/Douban 碼字不易,不喜勿噴

正式開始:

分析:
要如何開始呢?想想,我們現在有mysql裏面的數據,然後,只是需要把數據做一個展示,

1.在IDEA中新建一個項目

技術分享圖片

完整好包結構,規範的包結構是有利於我們後期維護修改代碼的

先簡單說一下,我們的開發思路,
我們常規操作是在entity中新建一個doubanc的實體類用於封裝我們從數據庫裏面讀出來的數據
接著,在dao下去寫一個類doubandao用於從數據庫中獲取到數據,這裏傳回一個doubanc的實體類對象的集合
然後,使用servlet來調用dao的數據,轉發到jsp頁面,
這樣我們也就實現了顯示與代碼分離的形式,也是不使用框架技術的常用操作。在這裏,我們就依據這個思路開始開發..

2.new一個實體類Doubanc

參照數據庫裏面表的字段:
技術分享圖片
,這裏,也就只有兩個字段。

因為比較簡單,直接貼上代碼:

package com.csylh.entity;

public class Doubanc {
    private String country;
    private int nums;
    public String getCountry() {
        return country;
    }
    public void setCountry(String country) {
        this.country = country;
    }
    public int getNums() {
        return nums;
    }
    public void setNums(int nums) {
        this.nums = nums;
    }
    public Doubanc(String country, int nums) {
        super();
        this.country = country;
        this.nums = nums;
    }
    public Doubanc() {
        super();
    }
    
    
}

3.new一個DoubanDao類

dao類的作用就是與完成與數據庫的交互工作,比如,從數據庫按照按照我們的需求把數據讀取出來,這裏,我們直接貼上我的代碼,在代碼中,每一步我都有詳細的解釋,這裏就使用到了JDBC的技術

package com.csylh.dao;

import com.csylh.entity.Doubanc;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class DoubanDao {
    public List<Doubanc> getDoubancList(){
        List<Doubanc> doubancList=new ArrayList<Doubanc>();
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet=null;


        try {
            //1.加載驅動
            Class.forName("com.mysql.jdbc.Driver");
            //2.驅動管理器獲取數據庫連接
            connection =DriverManager.getConnection("jdbc:mysql://localhost:3306/article","root","123456");
            //3.獲取statement,執行sql
            statement = connection.createStatement();
            //4.執行sql,返回結果集
            resultSet= statement.executeQuery("select country,nums from doubanc");
            //循環解析結果集
            while (resultSet.next()){
                //定義變量來收取我們的結果集
                String country=resultSet.getString("country");
                int nums=resultSet.getInt("nums");
                //把這些數據封裝到doubanc的對象裏面去,
                Doubanc doubanc=new Doubanc(country,nums);
                //把上面的對象添加到集合裏面去
                doubancList.add(doubanc);

            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
        
            try {
                if(resultSet!=null){
                    resultSet.close();
                }
                if(statement!=null){
                    statement.close();
                }
                if(connection!=null){
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        #不要忘記關閉資源
        return doubancList;
    }

}

4.編寫我們的servlet代碼

servlet一般用來做數據的調用和處理的。

我們新建一個servlet之後,第一步就是重新我們的init()方法,init()方法在整個servlet的生命周期內只執行一次,所以我們就可以把那些只是需要一次性的操作就ok的,放在這裏,
技術分享圖片

為了方便,我們直接在doget裏面調用dopost方法,這也做到了不復寫代碼這一點,也是一個通用的寫法

技術分享圖片

接下來,就是在dopost中寫我們的調用代碼了:

技術分享圖片

就這麽簡單的幾行代碼,我們就是實現了從數據庫裏面把數據讀出來,在頁面顯示為json格式的數據了

技術分享圖片

接著,就可以在jsp頁面調用這個DoubanServlet來獲取我們的數據了

修改我們的index.jsp頁面,當然,你新建一個也是可以的,我這裏就直接修改了,

因為我們是要數據圖形化展示,則需要在頁面中引入echarts的js文件,如果,你以前根本沒有接觸過echarts,也是,沒有關系的,你可以先到官網看一下那個5分鐘上手的教程,地址我也先貼在這裏吧:http://echarts.baidu.com/tutorial.html#5 其實,使用也是很簡單的

參照官網的說法,你可以看一下,我這裏的代碼:

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/";
%>
<!DOCTYPE HTML>
<html lang="en">
<head>
    <base href="<%=basePath%>">
    <meta charset="UTF-8">
    <script src="echarts.min.js"></script>
    <script src="jquery-1.8.3.min.js"></script>
</head>
<body onload="loadData()">

<div id="content" style="margin:40px auto;">
    <div id="myBarDiv" style="height:300px;width:1550px;display:inline-block"></div>
    <div id="myPieDiv" style="height:300px;width:1550px;display:inline-block"></div>
</div>

<script type="text/javascript">
    function loadData(option){

        $.ajax({
            type:"post",   //請求方式
            async:false,            //采用同步傳輸
            url:‘DoubanServlet‘,   //從剛才的servlet中把數據讀取出來
            data:{},
            dataType:‘json‘,

            success:function(result){
                if(result){
                    option.xAxis[0].data=[];
                    for(var i=0;i<result.length;i++){
                        option.xAxis[0].data.push(result[i].country);  //設置橫坐標的數據
                    }

                    //初始化series[0]的data
                    option.series[0].data=[];
                    for(var i=0;i<result.length;i++){
                        option.series[0].data.push(result[i].nums);   //設置縱坐標的數據
                    }
                }
            },
            error:function(errorMsg){
                alert("數據加載失敗");
            }



        });
    }
    //初始化Echarts
    var myChart=echarts.init(document.getElementById(‘myBarDiv‘));
    var option={
        title:{
            text:‘柱狀圖‘
        },
        tooltip:{
            show:true
        },
        legend:{
            data:[‘數量‘]
        },
        xAxis:[{

            type:‘category‘,
            axisTick:{
                alignWithLabel: true,//豎線對準文字
                interval:0,   //橫坐標的豎線的間隔
            },
            axisLabel:{
                interval:0
            } //橫坐標顯示全部信息
        }],
        yAxis:[{
            type:‘value‘
        }],
        series:[{
            name:‘數量‘,
            type:‘bar‘,

        }]

    };
    loadData(option);  //加載數據到option
    myChart.setOption(option);  //設置option(畫圖)
</script>

<script type="text/javascript">
    var myChart=echarts.init(document.getElementById(‘myPieDiv‘));

    function loadData(option){
        $.ajax({
            type:"post",
            async:false,
            url:‘DoubanServlet‘,
            data:{},
            dataType:‘json‘,
            success:function(result){
                if(result){
                    var country=[];
                    var number=[];

                    for(var i=0;i<result.length;i++){
                        country[i]=result[i].country;
                        var obj =new Object();
                        obj.name=result[i].country;
                        obj.value=result[i].nums;
                        number[i]=obj;

                    }
                    var option={
                        title:{
                            text:‘餅狀圖‘,
                            x:‘center‘
                        },
                        tooltip:{
                            show:true,
                            trigger:‘item‘
                        },
                        legend:{
                            data:country,
                            left:‘left‘,
                            orient:‘vertical‘
                        },
                        series:[{
                            name:‘數量‘,
                            type:‘pie‘,
                            radius:‘60%‘,
                            data:number

                        }]

                    };
                    option.legend.data=country;
                    myChart.setOption(option,true);
                    myChart.setSeries(seriesdata);
                }
            },
            error:function(errorMsg){
                alert("數據加載失敗");
            }


        });
    }
</script>
</body>
</html>

接下來,最關鍵的就是把添加架包了,其實之前,我們寫servlet的時候,我們就必須的引入部分架包的,這裏,我們的再說明一下:

在WEB-INF目錄在新建一個lib目錄用於存放架包,添加作為Library root,就可以使用了

技術分享圖片

接下來,就可以添加tomcat服務器,啟動我們的項目了

技術分享圖片

啟動之後,就是可以訪問的了,idea會自動跳轉的

效果圖:

技術分享圖片

好了,到這裏,我們的操作就基本完成了。實現了從數據庫把數據圖像化展示到頁面的功能,覺得感興趣的小夥伴,不妨一試喲。

使用JSP+Servlet+Jdbc+Echatrs實現對豆瓣電影Top250的展示