第一個JavaWeb項目體驗


     從四月初到五月十五,一直在忙一個JavaWeb項目。昨天交了主辦方規定要交的文檔和視頻之后,比賽算是暫時告一段落了。身體累其實也不算什么,主要心很累。想寫的沖動並不太強烈,只是覺得總該總結一下,過幾天估計還得繼續忙這個破事,到時候又沒時間了,所以還是跑到圖書館帶上耳機開始好好總結一下。技術上的,感悟上的都有。

     當時決定參加這個浙江省服務外包大賽的時候其實是信心滿滿的,還一副有十足把握的樣子鼓勵隊友要自信。結果剛起步不久就被一個SSH框架給卡死。技術不成熟是一方面的原因,畢竟這個學期才開WEB課,而且基本自學。但是程序員不就是講究一個快速的自學能力嗎,自己花了一個多星期,還不能搞懂該如何套着框架寫代碼,當時是各種自責和心急如焚。越急,越不能靜下心來看書或者教學視頻。不知道怎么把握團隊的方向,只知道到圖書館一摞一摞的書借過來,這本翻一翻那本看一看,感覺都用不上,煩,急,崩潰。

     幸好隊伍里面另外一名隊友找到突破口了,確定采用SSH2框架,並且能夠教其他隊友按照那個模式碼代碼。現在我會坦承是“幸好”,當時的我並不這么想呀。20歲的小伙子,平時就是爭強好勝很多方面都不願輸給誰的一個人。當時感覺自己那么拼命的花了那么多時間和精力為什么我搞不出來,為什么。隊友弄出來的時候我卻想逃,想自己也馬上去弄一個出來,至少把原理搞懂不要只按照他說的填代碼。可是越這么想我發現自己越痛苦而且越弄不出來。那段時間經常給老姐打電話講起這個比賽的事,講起自己不是隊伍的一把手怎么怎么不太開心。姐說她整個大學參加過的各種活動各種社團各種比賽中,她通常都是當二把手的,輔助隊伍的核心。數學建模國賽美賽均是一等獎,創新立項兩個,自己帶的編輯部也是充當二把手,現在也保研到復旦金融系了。她還講團隊競賽的意義不是要在隊內競爭證明我比誰強,我偏不聽誰的,我偏要當核心,而是要去證明我們這個團隊比別的隊伍強比別的隊伍好比別的隊伍更懂團結。這些道理平時要讓我說我也會說,但是真的碰上問題了,我還是難改好斗的本性。但好在,我還是強按住了自己的本性,一臉歉意的找那個隊友幫我講解了一下SSH2的跳轉映射流程,框架這個坎就算這樣邁過去了,我也算調整好心態,當奶媽打輔助。

    之后在一個留言板功能模塊,涉及到寫入數據庫,但是寫入之后發現亂碼了。沒什么經驗,所以就百度,百度上主要提供的一個信息就是可能是MySql的統一編碼方式沒有設好,我用命令行檢查了一下:

發現沒問題啊,清一色UTF-8。后來又看到說MySql的編碼方式要設置到數據表的字段一級。然后我就把留言那張表的字段一個個的檢查了一遍,依然全部是utf-8.之后是各種坑爹的關於配置文件可能出錯的說法,要去C盤找my.ini配置文件然后在里面再改編碼方式,按照這個東西弄下去我終於成功的把MySql服務弄的不能開啟了,OK。絕望的邊緣以為要重裝MySql了,不過好在胡亂的又把配置文件根據記憶給改了回來,MySql服務正常開啟。也是從這里開始事情好像發生轉機,我決定根據參數的傳遞路徑來查一下到底是不是數據庫編碼亂碼。沒想到直接在Action中將JSP頁面傳過來的參數打印一下就出現亂碼。尼瑪問題范圍瞬間縮小了。

System.out.println(Message.getReply());

     打印出來是這樣的:

 

     於是又去百度,說這種從JSP傳到Action中就亂碼的問題可以通過寫一個過濾器放在web.xml里面,我百度了一段代碼放進去,重啟Tomcat,依然不行。又在無意中發現,據說這是struts2-core-2.1.6.jar的一個bug,建議使用struts2-core-2.1.8.jar。尼瑪我打開工程的Web App Library文件夾一看果然使用的是struts2-core-2.1.6.jar。正准備換2.1.8試試,又發現某位好心人說有一種簡單的解決方式,就是對傳過來的字符串先解碼,再編碼,最后再保存到數據庫,代碼如下:

1 Message msg=messageService.findByid(Message.getId());  //通過ID找到某條留言。
2 String s1=new String(Message.getReply().getBytes("ISO8859_1"), "UTF8");  
//接收從jsp傳過來的留言回復字段的值,按照ISO8859_1標准解碼,再按照UTF-8標准重新編碼,生成新的字符串s1.
3 msg.setReply(s1); //將msg的回復字段值設為s1. 4 messageService.update(msg); //更新msg。


    按照他說的做了,真的成功了,好開心!

   

    亂碼的問題解決了,感覺心情好一點了,畢竟困擾了兩三天。然后信心回來一點了,於是決定再靜下心來把一直想解決的分頁查看功能實現一下。還是以留言為例,要實現分頁,可以在數據庫中取的時候就分頁,即為真分頁。也可以把數據全部取出來,存在LIST對象中,在JSP頁面控制顯示,即為假分頁。之前在很多諸如《javaweb典型模塊與項目實戰》等參考書中看到過分頁功能的實現,可能是因為采用的框架不同,又或者是我心浮氣躁,反正就是感覺用那些書上的代碼套不到我們的項目中來,分頁始終實現不出來。那天煩躁的不行,一怒之下甩開各種書啊視頻什么的,自己寫了一個假分頁。原理很簡單,但是算是自己的原創,不算抄代碼,感覺倍兒爽。下面代碼奉上:

 1  <%
 2           List<MessageView> list = (List) request.getAttribute("messagelist");  //取得Action中查出來存起來的留言LIST
 3           int begin = 0;  //begin代表該頁從第幾條留言開始顯示,初始化為0
 4            if (request.getParameter("begin") == null) {
 5                begin = 0;
 6            } else {
 7                begin = Integer.parseInt(request.getParameter("begin"));
 8            }
 9    %>
10   <%    for (int i = begin; i < (((begin + 4)<list.size())?(begin+4):list.size()); i++) {
11   %>//這里4代表每頁顯示的留言條數,可以自己設置。循環的判斷中用到三目預算,主要是針對最后一頁,如果最后一頁數據少於4條然而依然使用和其他頁一樣的遍歷方式就會報錯空指針。
12   留言內容: <%=list.get(i).getContent()%>
13   ...
14   <%}%>
15  
16 //下面的代碼通過簡單的邏輯判斷來控制是否顯示上一頁和下一頁的超鏈接,不做詳細解釋了,相信能看懂。
其中的超鏈接跳轉的地址是本頁面,但是傳的參數begin會變化,頁面也是根據取到的begin參數來決定從哪一條記錄開始顯示的。
17 <%if(begin>=4) {%> 18 <a href="messageQuery?begin=<%=begin -4%>">上一頁</a>&nbsp;&nbsp; 19 <%} 20 if(begin<=(list.size()-4)){ %> 21 <a href="messageQuery?begin=<%=begin + 4%>">下一頁</a> 22 <%} else{%> 23 已到最后一頁 24 <%} %><br>

   雖然很簡陋,估計以后也不能用在正規的項目中,但只是想說有些問題如果參看別人的方法感覺搞不出來的話,自己嘗試擼一下,說不定就擼出來了。

  

   好,分頁功能實現。轉去實現一個訂單功能。隊友在建數據庫的時候很專業的把訂單表的表名取為Order,是吧,訂單用英語翻譯過去就是Order啊!可是尼瑪就是這個破Order表坑了我三天,信心和耐心都幾乎被磨滅殆盡。其實實現下訂單的功能和其他功能一樣呀,都是對一張表實現增刪改查操作。但是每次一點確定預定,就報錯,說

could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query

 

   剛開始百度說可能是字段名和MySql關鍵字沖突了,將信將疑的在這張Order表的所有字段名的前面全部加了"my_"前綴,再跑。還是could not execute query、could not execute insert;等等等等。煩死了,找另一個隊友說,你來寫一遍,不要看我的代碼,看看是不是我哪個地方沒注意,字段名尼瑪都這樣了怎么會沖突了,肯定是有其他原因。結果那妹子寫了一遍,報了同樣的錯誤,我不知道該說什么了。正當念着Order,Order我草你丫的時候,腦袋轉過來了,Order!Order!!!尼瑪自己經常用 Order by id desc 語句來實現對查詢結果的倒序排列,這個時候沒注意,肯定是Order與MySQL關鍵字沖突了。於是簡單粗暴的把這張破Order表的表名改成了Dingdan. D-ing訂,D-an單,多好記啊!多好用啊!馬上各種query啊,insert啊,delete啊再也不報錯了。三天的陰影解除,Fuck.

   還有遇到過一些小問題,大多解決的比較快,這里就不多說了。初賽的作品要刻到光盤上,因為有個破緩存文件搗亂,昨天刻壞了7張盤才成功。隊友一起寫的60多頁的文檔用彩紙印刷出來真是高大上,盡管作品本身技術含量不算高,但是畢竟都盡力了。

   第一篇半隨筆半技術博客,希望自己以后能學到更多可以拿出來分享的東西。周末愉快。

 

 

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM