本文爲本人原創,如需轉載請註明出處!javascript
爲期五天的實訓結束了,其實算起來除去機房被佔用頂多四天多一點。css
來給咱們作培訓的是優才學院(沒有打廣告的意思,本着實事求是的態度),老師頗有耐心,確實學到不少東西。html
今天剛結束我想趁熱打鐵趕忙寫一份總結,近兩天總結完(明天考兩門考研大科我怎能安心更博客啊!)。前端
(代碼都是本身照着老師的敲的依照我的喜愛略有改動,數據庫是老師給的,若是有侵權的地方,請聯繫我,我將當即刪掉。)java
簡單記錄一下五天的內容 重要的是作一個微票的微信小程序。mysql
微信小程序4月份的時候我研究過, 還買了本書(建議不要買書,這個東西改朝換代很快的,並且不像java那麼難學),每次登錄開發者工具都有更新, 還有更新日誌,發展很迅猛。主要是輕量級的,簡易方便。打算暑假作比賽有餘力就再寫個小程序(上一屆比賽確定是沒有這個東西的)。雖然學過,但通過老師一講,果真!本身看書跟有老師帶着就是不同!!sql
第一天下午+次日上午 飛機大戰遊戲 截圖以下數據庫
不是特別難,重要的是理清邏輯。json
編譯器是eclipse jdk8小程序
次日下午 數據庫等基本操做 不作詳細記錄 但做爲後期基礎
第三天 json的生成 此處詳細記錄,後期的基礎
一、
首先建立項目導入gson包 https://pan.baidu.com/s/1c2GiCRQ百度雲
和mysql-connector包http://pan.baidu.com/s/1nvlyklV
配置文件(右擊項目 buil path add jars)
三個sql文件wp,wp_image, wp_cinema http://pan.baidu.com/s/1pLylqFx導入到數據庫中
建立這幾個包 bean:實體類 biz:控制層也就是業務邏輯層
Dao:訪問數據庫的方法 servlet:服務器 util:數據庫工具
二、 在bean裏建立一個WeiPiao的實體類,代碼不作展現,照着數據庫表的寫出成員,其餘的構造和getset一鍵生成。不要把id放到構造函數裏!總之不要讓id參與進來不然會很 麻煩
a.先搞數據庫(不管是什麼項目,先把數據庫搞通)properties那裏邊:
jdbcDriver = com.mysql.jdbc.Driver
jdbcUrl = jdbc:mysql://localhost:3306/你的數據庫名?user=你的數據庫用戶名&password=密碼
b.util裏建立PropertiesUtil類,如下只寫類裏的方法和必要的成員變量
public static String getValue(String key,String proName){ String value = null; Properties p = new Properties(); String path = PropertiesUtil.class.getResource("/").getPath(); try { p.load(new FileInputStream(new File(path,proName))); value = p.getProperty(key); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return value; }
和DBUtil類
public static Connection getConn(){ Connection conn =null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?user=root&password=123456"); } catch (Exception e) { e.printStackTrace(); } return conn; } public static void closeAll(Connection conn,PreparedStatement ps,ResultSet rs){ try { if (rs!=null) { rs.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (ps!=null) { ps.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (conn!=null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } }
c.
dao包裏建立一個InfoDao接口和InfoDaoImpl實現類
就一個方法:
public List<WeiPiao> getAll() Connection conn=null; PreparedStatement ps=null; ResultSet rs=null; List<WeiPiao> list = new ArrayList<WeiPiao>(); try { conn=(Connection) DBUtils.getConn(); ps=conn.prepareStatement("select * from wp"); rs=ps.executeQuery(); //遍歷結果對象,獲取對應字段的數據 while(rs.next()){ String image=rs.getString("image"); String title = rs.getString("title"); String subTitle = rs.getString("subTitle"); String actor=rs.getString("actor"); String score=rs.getString("score"); String action=rs.getString("action"); //聲明weipiao對象,而且傳入每一個字段的數據 WeiPiao weiPiao = new WeiPiao(image, title, subTitle, actor, score, action); //將對象添加到集合裏 list.add(weiPiao); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { DBUtils.closeAll(conn, ps, rs); } return list;
這個包裏主要作的工做就是把數據庫裏wp表的內容讀出來。
d.biz裏也就兩個:InfoBiz接口和InfoBizImpl實現類
private InfoDao dao = new InfoDaoImpl(); @Override public String getInfo(String type) { /* * 拿到參數 * 一、若是參數是wp,獲取所有的影片信息 */ //聲明集合 List<WeiPiao> list=new ArrayList<WeiPiao>(); List<WeiPiaoImage> list2=new ArrayList<WeiPiaoImage>(); List<Cinema> list3=new ArrayList<Cinema>(); if("wp".equals(type)){//wp在前,避免空指針異常 list=dao.getAll(); String json=wpToJson(list); return json; } else if("wp_image".equals(type)){ list2=dao.getAllimage(); String json=wpiToJson(list2); return json; } else if("cinema".equals(type)){ list3=dao.getAllCinema(); String json=wpcToJson(list3); return json; } return "參數寫錯"; } //將集合寫成json數據而且返回 public String wpToJson(List<WeiPiao> list){ //聲明一個root對象 Root root = new Root(); //將集合放入到root對象中 root.setResult(list); //使用gson,將root寫成json數據 Gson gson = new Gson(); String json =gson.toJson(root); return json; } 這個包作的事情就是把都出來數據庫裏邊的數據生成json數據 e. servlet包裏建一個servlet :GetInfo @WebServlet("/GetInfo") public class GetInfo extends HttpServlet { private static final long serialVersionUID = 1L; private InfoBiz biz = new InfoBizImpl(); public GetInfo() { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 一、接收用戶的請求數據 * 二、根據要求從數據庫中獲取數據 * 三、將取出來的數據封裝成對象,並寫成json字符串 * 四、將json數據寫入到客戶端 */ //設置返回數據的編碼格式 response.setContentType("text/html;charset=utf-8"); //獲取請求的參數,交給業務層處理 String type=request.getParameter("type"); //獲取業務層返回的json數據 String json=biz.getInfo(type); //將json數據寫在頁面 response.getWriter().println(json); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
用doget方法!!方便選擇不一樣的數據表!
f.運行:右擊項目 run as 第一個 地址欄加入參數:GetInfo?type=wp//傳參造麼?而後就會出現:
這就是json!!天啦好神奇!!!很差看是吧?百度be json格式化一下!這個就是咱們接下來須要的json數據。
固然還有image cinema,都是照葫蘆畫瓢的,也就是說,咱們能夠生成三個json的。
走完這一步,由於我是緊跟老師步伐,因此沒有什麼報錯,可是經過給同窗改程序,基本有如下幾個錯誤:
①-數據庫部分走不動:多是properties寫的不對,也可能mysql-connector放到lib包裏了可是沒有配置好,還有可能sql語言寫錯了。建議:單獨把數據庫部分 拿出來跑,調通後放回去,沒毛病。
②-@這個符號所在的一行報錯:是沒有配置jdk吧?或者jdk版本/tomcat版本太低,jdk1.6如下的請換更高版本,畢竟向下兼容,高了不吃虧。建議:build path 看看,該換換,通常就是這種緣由。
③-亂碼:數據庫有的視圖化工具導入表時有選擇編碼項必定要注意,還有工程自己也有編碼,編碼不一致纔會亂碼。建議:從新導表utf8編碼,右擊項目-- properties---resourse裏邊改編碼。
④-代碼怎麼看都沒錯但就是提示各類各樣奇怪的錯誤:李同窗經典作法,報錯從後往前調,以每一個錯誤爲一個結點,輸出信息或者其餘方式調試程序(不愧是 作ACM的),總比干瞪眼好。實在不行從新建立一個項目把原來的代碼粘貼進去。
/(ㄒoㄒ)/~~忍痛離開
----------------------暫更,跑開去複習---------------------------------------------------------------------------------------------------------------------------------------------------------6.23
6.24 繼續
艾瑪 終於考完了兩門大科,行了不吐槽了,血槽空了,來咱們繼續。
第四天 微信小程序之佈局演示、從本地獲取視頻播放(最後來記錄)
第五天 微信小程序之(#`O′微票 先展現一下老師作的:不同大就不同大吧。。。
但若是按照下邊的來作,將會看到如下
樣式能夠改,改爲本身喜歡的均可以。
上面已經生成了json。
如今來寫前端。首先,有一個微信小程序開發者工具、還要有一個開發者帳號,操做步驟在微信公衆號平臺都有。域名什麼的,買一個就好。
pages裏建立三個文件夾 home cinema my
app.json裏邊:
{ "pages":[ "pages/home/index", "pages/cinema/index", "pages/logs/logs", "pages/my/index" ], "window":{ "backgroundTextStyle":"light", "navigationBarBackgroundColor": "#fff", "navigationBarTitleText": "微票", "navigationBarTextStyle":"black" }, "tabBar": { "selectedColor": "#3cc51f", "list": [{ "pagePath": "pages/home/index", "text": "上映", "iconPath": "image/icon_normal.png", "selectedIconPath": "image/icon_pressed.png" }, { "pagePath": "pages/cinema/index", "text": "影院", "iconPath": "image/icon_normal.png", "selectedIconPath": "image/icon_pressed.png" }, { "pagePath": "pages/my/index", "text": "個人", "iconPath": "image/icon_normal.png", "selectedIconPath": "image/icon_pressed.png" } ] } }
home/index.js
//home/index.js //獲取應用實例 var app = getApp() //初始化數據 Page({ data: { }, //生命週期函數,頁面加載時調用 onLoad: function () { var that=this //獲取輪播圖數據 wx.request({ url: 'https://www.****/WeiPiao/GetInfo?type=image', data:{}, method:'GET', //設置請求 header:{ "Accept":"application-json" }, success:function(res){ console.log(res); var data=res.data.images; console.log(data); //解析到數組,設置數據給頁面 that.setData({ image:data }) } }), //獲取接口請求信息 wx.request({ //修改1 url: 'https://www.****/WeiPiao/GetInfo?type=wp', data: {}, method: 'GET', //設置請求 header: { "Accept": "application-json" }, success: function (res) { console.log(res); //修改2 var data = res.data.result; console.log(data); //解析到數組,設置數據給頁面 that.setData( //修改三 { items: data }) } }) } })
home/index.wxml
<!--index.wxml--> <view class="container"> <!--indicator-dots="true"顯示面板指示點--> <!--autoplay="true" 自動輪播--> <!--interval="3000"自動輪播的時間間隔--> <!--duration="1000"滑動動畫時長--> <swiper class="swiper_box" indicator-dots="true" autoplay="true" interval="3000" duration="1000"> <!--swiper-item滑動視圖的每一項--> <!--wx:for 綁定一個數組,便可使用數組中各項的數據重複渲染該組件--> <!--wx:for-item 子元素,至關於數組中的每一項--> <swiper-item wx:for="{{image}}" wx:for-item="item"> <image src="{{item.images}}" class="slide_image"></image> </swiper-item> </swiper> <!--2--> <view class="text"> <view class="line_flag"></view> <view class="text_content">正在上映</view> </view> <!--3--> <view wx:for="{{items}}" wx:for-item="item"> <view class="item"> <!--左邊部分--> <view class="item_left"> <image src="{{item.image}}"></image> </view> <!--中間--> <view class="item_middle"> <!--影片名--> <view> <text class="title"> {{item.title}} </text> </view> <!--影片簡介--> <view> <text class="sub_title"> {{item.subTitle}} </text> </view> <!--演員--> <view> <text class="actor"> {{item.actor}} </text> </view> </view> <!--右邊--> <view class="item_right"> <!--評分--> <view> <text class="score"> {{item.score}} </text> </view> <!--購票方式--> <view> <text class="action"> {{item.action}} </text> </view> </view> </view> </view> </view>
wxss 樣式表裏本身能夠隨意改,按照本身的風格來。css具體樣式w3school都有。
/**index.wxss**/ .container{ background-color: #f2f2f2; } .swiper_box{ width:100%; height:200px; } .slide_image{ width:100%; height:200px; display:inline-block; overflow:hidden; } /*第二部分樣式*/ .text{ display:flex; width: 100%; padding: 10px; color: #656565; background-color: #ddd; } /*標記的樣式*/ .line_flag{ width: 3px; height:18px; background-color:hotpink; margin-left: 10px; } .text_content{ line-height:18px; margin-left: 10px; font-family: "kaiti"; } .score{ color:red; font-size: 70%; } .item_middle{ float:left; margin:auto; width:50%; height:200px; } .item_right{ width:25%; height:200px; float:right; } .action{ border-style: solid; border-bottom-color: greenyellow; font-size:70%; color:greenyellow; } .actor{ font-size: 80%; } .sub_title{ font-size:80%; }
一樣,cinema的也能夠照貓畫虎。
到此,微票這一塊就總結完畢了。
這是作的其餘微信小程序的項目,還能發彈幕,神奇!!
--------------------------------------------------------------------------------------------------正經的分割線開始---------------------------------------------------------------------------------------------------
聲明:爲了保護老師所在培訓學校的知識產權某些url打了馬賽克。另外,這不是教學帖,只是實訓總結,因此不必由於徹底照抄本人的代碼而出了任何bug來追究本人的責任。
---------------------------------------------------------------------------------------------------正經的分割線結束---------------------------------------------------------------------------------------------------