版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 武漢工程大學</b></p><p> 計算機科學與工程學院</p><p><b> 畢業(yè)實習報告</b></p><p> 武漢工程大學計算機科學與工程學院 制</p><p><b> 說明:</b></p><
2、;p> 1、 實習指導教師由學院校內(nèi)教師擔任,負責組織實習、學生管理、參加實習答辯、實習成績評定、給出實習評語等工作。</p><p> 2、 實習報告由武漢工程大學計算機科學與工程學院提供基本格式(適用于學院各專業(yè)),各專業(yè)教研室和指導教師可根據(jù)本專業(yè)特點及實習內(nèi)容做適當?shù)恼{(diào)整,學生須按指導教師下達的實習報告格式認真進行填寫。</p><p> 3、 實習成績由指導教師根據(jù)學
3、生的實習情況給出各項分值及總評成績。</p><p> 4、 指導教師評語一欄由實習指導教師(校內(nèi)教師)就學生在整個實習期間的表現(xiàn)給出客觀、全面的評價,包括實習期間的表現(xiàn)、實習報告的質(zhì)量、實習答辯的情況等。</p><p> 5、 學生必須參加實習答辯,凡不參加實習答辯者,實習成績一律按不及格處理。實習答辯小組應由2人及以上教師組成,其中校內(nèi)指導教師必須參加,否則視作無效答辯。<
4、/p><p> 6、 實習報告正文字數(shù)應不少于5000字,實習日記字數(shù)不少于300字/天。</p><p> 7、 實習報告正文中實習目的與任務、實習地點、實習內(nèi)容和要求等項,可由指導教師統(tǒng)一給出(自主實習除外)。學生自主實習的,可根據(jù)實習的情況自行填寫以上內(nèi)容。</p><p> 8、 自主實習的學生還應提供由實習單位出具的實習鑒定表(復印件),與實習報告一起裝
5、訂,作為參加實習答辯和評定成績的依據(jù)。</p><p><b> 畢業(yè)實習成績評定表</b></p><p> 學生姓名: 王冠豪 學號: 1005100120 班級: 01 </p><p><b> 畢業(yè)實習答辯記錄表</b></p
6、><p><b> 指導教師評語</b></p><p><b> 一、實習目的與任務</b></p><p> IT行業(yè)已經(jīng)滲透到各行各業(yè),非IT業(yè)的IT人才需求也穩(wěn)步增加,為解決企業(yè)IT人才需求瓶頸,滿足IT企業(yè)特別是跨國公司對.NET高級軟件人才的需要。針對各類專、本科院校的一些基礎扎實,有一定編程經(jīng)驗(能力)的大
7、學生,本次實習在達內(nèi)軟件有限公司協(xié)助下制定此提高班實習計劃。通過嚴格按照項目的真實開發(fā)流程設計,讓大學生在企業(yè)中經(jīng)歷體會,提高整體把握項目技能,掌握最新流行技術。</p><p> 本計劃以“服務社會、服務企業(yè)、服務大學生”為基本理念,結合大學相關專業(yè)學生的課程設計,實現(xiàn)企校合作,共同指導課程設計,以期實現(xiàn)學生走出教室,走向社會,通過實際的軟件項目實習,讓學生既完成了學科教學要求又使學生了解了企業(yè),熟悉了培訓平
8、臺。</p><p><b> 二、實習地點</b></p><p> 達內(nèi)軟件有限公司(武漢光谷龍安港匯城)。</p><p><b> 三、實習內(nèi)容和要求</b></p><p><b> 3.1.實習內(nèi)容:</b></p><p> 本項
9、目來自互聯(lián)網(wǎng)房產(chǎn)交易網(wǎng)站開發(fā)理念,在系統(tǒng)中完整的展現(xiàn)商業(yè)應用需求需要的業(yè)務實體,業(yè)務流程。相關互聯(lián)網(wǎng)應用成功成熟系統(tǒng)可參照億房網(wǎng),搜房網(wǎng)。隨著人們對于網(wǎng)絡的使用越來越多,本次畢業(yè)實習本著提高我們的動手實踐能力為目標,順應時代潮流,做一個web項目的開發(fā),增加我們對于互聯(lián)網(wǎng)的了解,同時熟悉一些開發(fā)環(huán)境和開發(fā)工具。由于是第一次做web項目,所以從servlet開始,模仿一些網(wǎng)站的首頁,做一個用戶注冊登錄的效果,同時做一個圖片文件的上傳。&l
10、t;/p><p> 3.1.1 環(huán)境搭建</p><p> 在開始開發(fā)之前,首先要搭建好開發(fā)環(huán)境,這次選用的是Myeclipse+Mysql+Tomcat,Myeclipse可以建立web項目,編寫后臺功能和前臺頁面,Mysql負責數(shù)據(jù)的存儲,Tomcat服務器負責瀏覽器提出的請求,然后交給后臺處理。在這其中數(shù)據(jù)庫的連接是一個非常重要的步驟。在項目中將與數(shù)據(jù)庫連接相關的類放在util包中。
11、主要是加載驅(qū)動,然后創(chuàng)建連接。在開發(fā)環(huán)境都準備好了之后,就可以開始開發(fā)了。本次項目實現(xiàn)的功能主要有注冊,登錄,圖片上傳等。</p><p><b> 3.1.2注冊模塊</b></p><p> 在設計用戶注冊頁面時,首先需要設計具體的注冊填寫項目,包括各種必填項目,選填項目等。設計項目時不能盲目設計,而應參考一些規(guī)范:</p><p>
12、 設計項目應目的明確設計注冊填寫項目時,應有明確目的。每一個需要用戶填寫的內(nèi)容,都應該是網(wǎng)站經(jīng)營者需要獲得的信息,而不是無聊的玩笑。</p><p> 設計項目應精簡易填網(wǎng)站的注冊項目應該通俗易懂。網(wǎng)站所需要面對的并不只是局限于專業(yè)用戶。過于艱深的詞匯可能造成用戶誤解,以致注冊無法進行。因此,能使用中文時盡量使用中文,能使用簡單詞匯,盡量少使用術語。</p><p> 注冊功能
13、主要是要和數(shù)據(jù)庫進行交互,使用的Mysql數(shù)據(jù)庫。在插入數(shù)據(jù)之前首先要從頁面上獲得數(shù)據(jù)。該功能用jsp實現(xiàn),即用一個表單將信息傳到后臺,然后進行驗證。當然在這之前,要通過xml配置文件,選擇正確的servlet。xml中的內(nèi)容如下:</p><p><b> <servlet></b></p><p> <servlet-name>frie
14、nd</servlet-name></p><p> <servlet-class>service.FriendServlet</servlet-class></p><p> </servlet></p><p> <servlet-mapping></p><p> &l
15、t;servlet-name>friend</servlet-name></p><p> <url-pattern>*.do</url-pattern></p><p> </servlet-mapping></p><p> 首先通過*.do找到請求,然后根據(jù)這個名字找到friend中的FriendSe
16、rvlet,讓他去執(zhí)行具體的后臺處理。在后臺我們通過if語句來處理不同的請求。注冊功能的實現(xiàn)如下:</p><p><b> //處理注冊事務</b></p><p> //1.獲取從頁面?zhèn)鬟^來的數(shù)據(jù)</p><p> User user =new User();</p><p> user.setUserNam
17、e(request.getParameter("username"));</p><p> //判斷用戶名是否被占用</p><p> boolean registed = userDao.findByUserName(user.getUserName());</p><p> if(registed){</p><p&
18、gt; //不能注冊,提示用戶已經(jīng)被注冊,跳轉到注冊界</p><p> request.setAttribute("username_error", "用戶名已經(jīng)被注冊"); RequestDispatcherrd=request.getRequestDispatcher("regist.jsp");</p><p>
19、rd.forward(request, response);</p><p><b> return ;</b></p><p><b> }</b></p><p><b> //判斷密碼</b></p><p> String pwd = request.getPa
20、rameter("pwd");</p><p> user.setPwd(pwd);</p><p> if(pwd.equals("")){</p><p> //提示密碼不能為空</p><p> request.setAttribute("pwd_error", &qu
21、ot;密碼不能為空");</p><p> RequestDispatcher rd = request.getRequestDispatcher("regist.jsp");</p><p> rd.forward(request, response);</p><p><b> return;</b>&l
22、t;/p><p><b> }</b></p><p> //判斷年齡(自己編寫)</p><p> Pattern p= Pattern.compile("\\d{1,3}");</p><p> String age = request.getParameter("age"
23、);</p><p> Matcher m = p.matcher(age);</p><p> boolean agechecked = m.matches();</p><p> System.out.println(agechecked);</p><p> if(!agechecked){</p><p&
24、gt; request.setAttribute("age_error","請輸入1-3位數(shù)字");</p><p> RequestDispatcher rd = request.getRequestDispatcher("regist.jsp");</p><p> rd.forward(request, respons
25、e);</p><p><b> return;</b></p><p><b> }else{</b></p><p> user.setAge(Integer.parseInt(age));</p><p><b> }</b></p><p&g
26、t; String checkcode =request.getParameter("checkCode");</p><p> session = request.getSession();</p><p> if(!session.getAttribute("number").equals(checkcode))</p>&l
27、t;p><b> {</b></p><p> request.setAttribute("checkcode_error", "驗證碼輸入有誤,請重新有誤");</p><p> RequestDispatcher rd = request.getRequestDispatcher("regist.jsp
28、");</p><p> rd.forward(request, response);</p><p><b> return ;</b></p><p><b> }</b></p><p> user.setName(request.getParameter(
29、"name"));</p><p> System.out.println(request.getParameter("username")+",,,,"+user.getUserName());</p><p> user.setGendar(Integer.parseInt(request.getParameter(&qu
30、ot;gendar"));</p><p> user.setPhone(request.getParameter("phone"));</p><p> //把數(shù)據(jù)插入到數(shù)據(jù)庫</p><p> userDao.save(user);</p><p> response.sendRedirect(&qu
31、ot;login.jsp");</p><p> 在登錄界面中做了一些驗證,當然又涉及到與數(shù)據(jù)的交互,比如說通過用戶名查詢該用戶名是否被注冊過,用到了userDao中的findByUsername函數(shù),該函數(shù)主要是通過執(zhí)行SQL語句來查詢數(shù)據(jù)庫中是否有同用戶名的人。用到的對象初始化如下:</p><p> Connection conn = null;</p>
32、<p> PreparedStatement statement = null;</p><p> ResultSet rs = null;</p><p> conn = DBUtil.getConnection();</p><p> 然后執(zhí)行SQL語句,返回boolean類型。</p><p> 在注冊功能中還有一
33、個就是驗證碼的功能,為了這個功能,專門做了一個servlet,叫做CheckCodeServlet,這個servlet也一樣的需要在xml文件中進行配置,代碼如下:</p><p><b> <servlet></b></p><p> <servlet-name>checkCode</servlet-name></p&g
34、t;<p> <servlet-class>service.CheckCodeServlet</servlet-class> </p><p> </servlet> </p><p> <servlet-mapping></p><p> <servlet-name>check
35、Code</servlet-name></p><p> <url-pattern>/checkCode</url-pattern> </p><p> </servlet-mapping></p><p> 實際上這里的功能實現(xiàn)原理,和上一個是一樣的,只是寫法不一樣罷了,特別是在url-pattern中,用
36、了一種新的寫法,而不是*.do,這種方式就只能獲取到form表單中src="checkCode"的請求了。</p><p> 由于畫驗證碼是一個新的功能,以前沒有接觸過,所以此出列出CheckCodeServlet的主要代碼如下:</p><p> public class CheckCodeServlet extends HttpServlet{</p>
37、;<p> HttpSession session =null;</p><p><b> @Override</b></p><p> protected void service(HttpServletRequest req, HttpServletResponse resp)</p><p> throws Serv
38、letException, IOException {</p><p> //1.設置content-type 消息頭,告訴瀏覽器,返回數(shù)據(jù)類型</p><p> resp.setContentType("image/jpeg");</p><p> //2.圖片的內(nèi)存映像</p><p> BufferedIma
39、ge image = new BufferedImage(80, 30,BufferedImage.TYPE_INT_RGB);</p><p><b> //3,。獲取畫筆</b></p><p> Graphics g = image.getGraphics();</p><p><b> //
40、4.畫背景顏色</b></p><p> Random r = new Random();</p><p> g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));</p><p> g.fillRect(0, 0, 80, 30);</p><
41、;p> //5.畫數(shù)字(字母)</p><p> String number = r.nextInt(99999)+"";</p><p> System.out.println(number);</p><p> session = req.getSession();</p><p> session.s
42、etAttribute("number", number);</p><p> g.setColor(Color.white);</p><p> g.drawString(number, 5, 15);</p><p><b> //6.畫干擾線</b></p><p> g.setColo
43、r(Color.black);</p><p> for(int i= 0 ;i<5;i++){</p><p> g.drawLine(r.nextInt(50), r.nextInt(20), r.nextInt(60), r.nextInt(20));</p><p><b> }</b></p><p&g
44、t; //7.壓縮成jpg格式</p><p> JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(resp.getOutputStream()); </p><p> encoder.encode(image);</p><p&
45、gt;<b> }</b></p><p><b> }</b></p><p> 這樣一個注冊模塊就基本實現(xiàn)了,而且功能還很完善,各種檢查,例如空檢查、用戶名已經(jīng)存在,密碼檢查等。</p><p><b> 3.1.3登錄模塊</b></p><p> 設計合理的用
46、戶界面,編制程序,實現(xiàn)如下功能:</p><p> 1、建立一隨機文件,順序文件或者數(shù)據(jù)庫表文件,建立用戶檔案,預先存儲一些用戶的基本信息(用戶名, 密碼,姓名等);</p><p> 2、當輸入“用戶名”和“密碼”并選擇“登錄”后,單擊“確定”按鈕,則在數(shù)據(jù)文件中去查找該用戶名和密碼是否均為正確。若用戶名和密碼正確,則在對話框中提示“合法用戶!”,否則提示“不是合法用戶或密碼錯誤!”
47、 ,給用戶提供3次輸入的機會,超過3次則程序退出或進入一死循環(huán)程序執(zhí)行。</p><p> 我們處理的主要是表單中的內(nèi)容,具體html方面,并不是這次項目關注的重點,其中form表單中的代碼如下:</p><p> <form action="login.do" method="post"></p><p>
48、 <table cellpadding="0" cellspacing="0" border="0"</p><p> class="form_table" width="647" height="100"></p><p><b> <t
49、r></b></p><p> <td valign="middle" align="right"></p><p><b> 用戶名:</b></p><p><b> </td></b></p><p>
50、<td valign="middle" align="left"></p><p> <input type="text" class="inputgri" name="username" /></p><p><b> </td></
51、b></p><p><b> </tr></b></p><p><b> <tr></b></p><p> <td valign="middle" align="right"></p><p><b&
52、gt; 密 碼:</b></p><p><b> </td></b></p><p> <td valign="middle" align="left"></p><p> <input type="password" class=&
53、quot;inputgri" name="pwd" /></p><p><b> </td></b></p><p><b> </tr></b></p><p><b> </table></b></p>
54、<p><b> <p></b></p><p> <input type="submit" class="button" value="提交 »" /></p><p> </p></p><p&g
55、t; <div class = "error"></p><p> <%String error = (String)request.getAttribute("error");%></p><p> <% if(error == null){%></p><p> <%e
56、rror = "";%></p><p> <%}%></p><p> <h4 style="color:red"><%=error %></h4></p><p> </div></p><p><
57、;b> </form></b></p><p> 在其中通過post方式提交了login.do的請求。然后還有處理登錄出錯的java代碼,通過request內(nèi)置對象來實現(xiàn)界面和后臺的交互,如他的getAttribute函數(shù),就是獲得后臺傳過來的信息。當然后臺首先是獲得他提出的請求,然后做出相應的處理,在FriendServlet類中處理代碼如下:</p><p
58、> if("/login".equals(action)){//處理登錄事物</p><p> String username = request.getParameter("username");</p><p> String pwd = request.getParameter("pwd");<
59、/p><p> User user = userDao.findByUsernameAndPwd(username,pwd);</p><p> if(user == null){</p><p> request.setAttribute("error","username or password wrong");&
60、lt;/p><p><b> //轉發(fā)</b></p><p> RequestDispatcher rd = </p><p> request.getRequestDispatcher("Login.jsp");</p><p> rd.forward(request,response);
61、</p><p><b> }</b></p><p> else{//登錄成功,設置sessiom</p><p> session = request.getSession();</p><p> session.setAttribute("username",user.getUsern
62、ame());</p><p> //登錄跳轉到列表顯示界面,重定向</p><p> response.sendRedirect("list.do");</p><p><b> }</b></p><p><b> }</b></p><
63、p> 值得注意的是,在區(qū)分不同的處理過程時,是通過request.getRequestURL()的路徑來區(qū)分的。登錄時,首先獲得用戶名和密碼,然后調(diào)用findByUsernameAndPwd函數(shù),在數(shù)據(jù)庫中查詢是否有這個用戶,如果沒有用戶,則采用轉發(fā)的方式頁面返回登錄界面,并顯示出錯信息,這個是在jsp頁面中完成的。如果登錄成功,那么就通過request內(nèi)置對象獲得一個會話,采用重定向的方式將頁面跳轉到用戶列表頁面中。這里采用兩
64、種不同的頁面跳轉方式。</p><p> 在用戶列表中,是通過一個table實現(xiàn)用戶信息的顯示的,采用了for循環(huán)的方式。這其中要用到容器,即一個裝著用戶的容器List<User>,然后通過findByAll函數(shù)實現(xiàn)顯示。函數(shù)實現(xiàn)如下:</p><p> public List<User> findAll(){</p><p> Con
65、nection conn = null;</p><p> PreparedStatement statement = null;</p><p> ResultSet rs = null;</p><p> List<User> users = new ArrayList<User>();</p><p>
66、String sql = "select * from friend_user";</p><p> conn = DBUtil.getConnection();</p><p><b> try {</b></p><p> statement = conn.prepareStatement(sql);<
67、/p><p> rs = statement.executeQuery();</p><p> while(rs.next()){</p><p> User user = new User();</p><p> user.setId(rs.getInt("id"));</p><p> u
68、ser.setUsername(rs.getString("username"));</p><p> user.setPwd(rs.getString("password"));</p><p> user.setName(rs.getString("name"));</p><p> user.s
69、etAge(rs.getInt("age"));</p><p> user.setGendar(rs.getInt("gendar"));</p><p> user.setPhone(rs.getString("phone"));</p><p> users.add(user);</p&g
70、t;<p><b> }</b></p><p> } catch (SQLException e) {</p><p> e.printStackTrace();</p><p><b> }</b></p><p> return users;</p>
71、<p><b> }</b></p><p> 該函數(shù)主要是在進行一些數(shù)據(jù)庫的操作,用到了Connection, PreparedStatement, ResultSet對象,一個負責連接,一個負責執(zhí)行SQL語句,一個負責返回操作結果。這樣就獲得了所有的user,然后后臺將這些信息傳到前臺,在網(wǎng)頁中顯示出來??傮w來說,登錄模塊具有兩個功能,一個是驗證,判斷是否是注冊用戶,另一
72、個是將所有用戶信息以列表的形式顯示出來。雖然在網(wǎng)頁設計方面還有不足,比如所有用戶都在一個table中,當用戶數(shù)量增加時,網(wǎng)頁也變大,不太美觀。不過主要的信息傳遞和工作原理還是充分反映在了項目之中。</p><p> 3.1.4用戶詳細信息</p><p> 在這個模塊之中主要是顯示單個用戶的詳細信息。對與登錄用戶,可以上傳自己的照片,查看別人的信息,但是不能上傳照片。主要是實現(xiàn)圖片上傳
73、。圖片上傳時,首先要判斷是不是登陸者。然后獲得一些參數(shù),交給后臺處理。頁面中的代碼實現(xiàn)如下:</p><p> <%//判斷上傳圖片的人是不是登錄者 </p><p> String username = (String)session.getAttribute("username");</p><p> if(username.eq
74、uals(user.getUsername())){%></p><p><b> <h1></b></p><p><b> 上傳圖片:</b></p><p><b> </h1></b></p><p> <form actio
75、n="loadPic.do?id=<%=user.getId() %>" method="post"</p><p> enctype="multipart/form-data"></p><p><b> 文件路徑:</b></p><p> <inpu
76、t type="file" name="file1" /></p><p> <input type="submit" value="提交" /></p><p><b> </form></b></p><p><b>
77、 <%} %></b></p><p> 文件上傳,實際上是將文件上傳到了Tomcat服務器,我們可以在tomcat的安裝包中看到用戶上傳的圖片。當然這些工作都是在servlet中完成的。相應的代碼如下:</p><p> else if("/loadPic".equals(action)){//上傳圖片</p><p&
78、gt;<b> //獲取用戶id</b></p><p> int id = Integer.parseInt(request.getParameter("id"));</p><p> //上傳圖片(加載上傳文件的jar包)</p><p> //1.給要上傳的圖片在服務器配置空間</p>&l
79、t;p> DiskFileItemFactory dfif = new DiskFileItemFactory();</p><p> //2.文件上傳工具類</p><p> ServletFileUpload upload = new ServletFileUpload(dfif);</p><p> upload.setHeaderEnco
80、ding("utf-8");</p><p><b> try {</b></p><p> List list = upload.parseRequest(request);</p><p> for(int i = 0;i < list.size();i++){</p><p>
81、 FileItem item = (FileItem)list.get(i);</p><p> String filename = item.getName();</p><p> System.out.println("上傳文件時輸出的Name:"+filename);</p><p> StringBuffer sb = new S
82、tringBuffer(filename);</p><p><b> //文件名</b></p><p> filename = sb.substring(sb.lastIndexOf("\\")+1);</p><p> //獲取保存文件的路徑</p><p> String pathTo
83、m = this.getServletContext().getRealPath("upload");</p><p> System.out.println(pathTom);</p><p> //創(chuàng)建用戶的文件夾</p><p> String pathUser = pathTom +"/" +"pic_
84、"+id;</p><p> File file = new File(pathUser);</p><p> file.mkdir();</p><p><b> //寫文件</b></p><p> file = new File(pathUser,filename);</p>
85、<p><b> try {</b></p><p> item.write(file);</p><p> //把文件寫到數(shù)據(jù)庫</p><p> Pic pic = new Pic();</p><p> pic.setPicName(filename);</p><p&g
86、t; pic.setUserId(id);</p><p> picdao.sava(pic);</p><p> response.sendRedirect("detail.do?id="+id);</p><p> } catch (Exception e) {</p><p> e.printS
87、tackTrace();</p><p><b> }</b></p><p><b> }</b></p><p> } catch (FileUploadException e) {</p><p> e.printStackTrace();</p><p&
88、gt;<b> }</b></p><p><b> }</b></p><p> 上傳的文件是根據(jù)用戶的id來判斷的,為每個用戶建立一個文件夾,來保存他的圖片,即每個用戶可以上傳多張圖片。我們在打開用戶詳細信息時,如果用戶有照片,那么就需要把它顯示出來,在頁面中的代碼如下:</p><p><b>
89、; <%//獲取圖片</b></p><p> List<Pic> picList = (List)request.getAttribute("picList");</p><p> for(int i = 0;i < picList.size();i++){</p><p> Pic pic = pi
90、cList.get(i); %></p><p> <img src="upload/pic_<%=user.getId() %>/<%=pic.getPicName() %>" width="300"height="200" /></p><p><b> <%}
91、%></b></p><p> 這樣上傳顯示用戶的詳細信息的模塊基本上就完成了,這其中也涉及到數(shù)據(jù)庫的操作,實際上和前面顯示用戶列表的操作是差不多的,都需要幾個對象,然后對數(shù)據(jù)庫進行操作。整個詳細設計也就基本完成了,雖然功能不是那么的完善,但是也是熟悉了servlet的基本原理,以及一些html,jsp的知識。</p><p><b> 3.2實習要求:&
92、lt;/b></p><p> 對系統(tǒng)開發(fā)及軟件工程思想有實踐的體驗和理解。鞏固已經(jīng)初步掌握的JavaSE,JavaEE系統(tǒng)知識。實踐體驗系統(tǒng)開發(fā)的整體工作流程。按時參加實習活動,不曠課、遲到、早退等情況。遵守實習單位紀律和安排,不違反實習單位規(guī)定的情況;聽從指導教師的安排,參加各項活動,服從教師管理的現(xiàn)象。按期圓滿完成規(guī)定的任務,工作量飽滿;能運用所學知識和技能去發(fā)現(xiàn)與解決實際問題,工作中有創(chuàng)新意識。&
93、lt;/p><p><b> 實習總結及分析</b></p><p><b> 4.1實習分析</b></p><p> 首先打開tomcat服務器,然后對項目進行配置,最后通過瀏覽器輸入http://localhost:8080/web02/login.jsp進入登錄界面,對功能進行測試如下圖所示:</p>
94、;<p> 圖 4.1.1登錄界面</p><p> 若用戶沒有注冊則會出現(xiàn)用戶名或者密碼錯誤的提示消息,如下圖所示:</p><p> 圖4.1.2 錯誤提示窗口</p><p> 接下來就是用戶注冊窗口,該窗口提供用戶需要填寫的基本信息。如下圖所示:</p><p> 圖 4.1.3 注冊窗口</p>
95、<p> 現(xiàn)在用huan的用戶名正確登錄進去,將會看到所有用戶的信息列表。如圖3.5所示。</p><p> 圖 4.1.4 用戶信息列表</p><p> 點擊詳細信息,查看詳細信息,同時上傳照片,然后顯示出來,如下圖所示。</p><p> 圖 4.1.5 詳細信息窗口</p><p> 然后點擊選擇文件按鈕,會出現(xiàn)
96、文件選擇對話框,如下圖所示:</p><p> 圖4.1.6圖片信息選擇窗口</p><p> 擇用戶需要上傳照片后,點擊提交按鈕。會看到用戶的照片顯示在網(wǎng)頁上,如下圖所示:</p><p> 圖 4.1.7 上傳圖片后窗口</p><p><b> 4.2實習總結</b></p><p&g
97、t; 通過實習分析可知,基本上完成應有功能。</p><p> 用戶登錄界面實現(xiàn)用戶成功登錄系統(tǒng),當輸入“用戶名”和“密碼”并選擇“登錄”后,單擊“確定”按鈕,則在數(shù)據(jù)文件中去查找該用戶名和密碼是否均為正確。若用戶名和密碼正確,則在對話框中提示“合法用戶!”,否則提示“不是合法用戶或密碼錯誤!” ,給用戶提供3次輸入的機會,超過3次則程序退出或進入一死循環(huán)程序執(zhí)行。</p><p>
98、 用戶注冊頁面也是互聯(lián)網(wǎng)中最常見的用戶交互界面類型。其與用戶登錄網(wǎng)站類似,都是提供一些表單供用戶填寫,通過網(wǎng)頁獲取用戶填入的信息,再把用戶信息寫入到網(wǎng)站的數(shù)據(jù)庫中。用戶注冊往往是網(wǎng)站用戶系統(tǒng)與用戶交互的第一步。具有十分重要的作用。主要用到了數(shù)據(jù)庫的增刪改查,當然先要熟悉連接數(shù)據(jù)庫,數(shù)據(jù)庫操作主要分四步:1.加載驅(qū)動;2.獲取鏈接;3.執(zhí)行sql語句,并返回結果集;4.釋放鏈接。也可以對自己的個人信息加以修改,比如說添加圖片,</p
99、><p> 當然還有一些值得完善的地方。但是在短短的時間內(nèi),能做成這樣已經(jīng)很不錯了。主要還是以了解servlet的工作原理為主。Servlet的主要工作模式:客戶端發(fā)送請求至服務器;服務器啟動并調(diào)用Servlet;Servlet根據(jù)客戶端請求生成響應內(nèi)容并將其傳給服務器;服務器將響應返回客戶端。這樣這個功能也就演示完了?;旧蠈崿F(xiàn)了最初的目標。</p><p> 通過一個學期對JAVA高級
100、語言程序設計的學習,我已經(jīng)掌握了一些常用的控件的使用方法,對簡單的程序設計的常用算法也有了一定的了解,還掌握了對文件輸入與輸出的一些基本操作。為了進一步加深理解、驗證、鞏固課堂教學內(nèi)容,加深對可視化編程思想的理解,強化JAVA對程序流程控制、常用控件的屬性、事件、方法的理解和使用;為了進一步提高編程能力、程序的調(diào)試能力,理論聯(lián)系實際的能力;鞏固所學的這些程序設計的方法,為了達到后續(xù)課程對實際編程計算能力的要求,特選定“用戶登錄界面程序設
101、計”題目作為課程設計實踐教學環(huán)節(jié)的題目,有助于培養(yǎng)綜合運用所學知識解決實際問題的能力,可以充分發(fā)揮想象力和創(chuàng)新能力;有助于提高獨立思考能力,自學能力。</p><p> 在此之前一直對網(wǎng)頁的編寫充滿了好奇,正好這次實習通過網(wǎng)頁編程我了解了網(wǎng)頁的格式、方法和內(nèi)容,并了解了網(wǎng)頁的后臺控制機制,和一些網(wǎng)站設計的框架,讓我有了非常大的收獲。此外,通過這次實驗,讓我明白了只有理論聯(lián)系實踐才能提高自己的實際操作能力,做任何
102、事都得有個嚴格、規(guī)范的流程,都得遵循固的一套體系來完成,特別是對于軟件開發(fā)這種存在諸多不穩(wěn)定因素的工程。因此這次畢業(yè)設計成功地讓我們和社會接上了軌道,在畢業(yè)前夕感受到了以后所要經(jīng)歷的工作生活。</p><p><b> 實習體會</b></p><p> 這次實習主要是學習Java Web開發(fā)方面的相關知識,主要的有JSP、Servlet、HTML,另外還有JDB
103、C,Mysql數(shù)據(jù)庫等等。首先是JSP,它是Java Web開發(fā)的基礎,需要的頁面都是用JSP來建立的,它是一種動態(tài)的網(wǎng)頁技術,其中,可以顯示動態(tài)畫面以及動畫效果,在其中也可以編寫Java代碼,也可以加入html編寫語言,通過form表單中的action屬性可以實現(xiàn)頁面間的跳轉,點擊不同的按鈕,可以跳轉到相應的頁面,它是Java Web編程中必不可少的部分,Java語言開發(fā)的任何項目都要用到它; 其次是Servlet,它也是Java
104、Web開發(fā)中必不可少的部分,Servlet是位于Web 服務器內(nèi)部的服務器端的Java應用程序,與傳統(tǒng)的從命令行啟動的Java應用程序不同,Servlet由Web服務器進行加載,該Web服務器必須包含支持Servlet的Java虛擬機。Servlet生成響應內(nèi)容并將其傳給Server,響應內(nèi)容動態(tài)生成,通常取決于客戶端的請求。service()方法可能激活其它方法以處理請求,如doGet()或doPost()或程序員自己開發(fā)的新的方法,
105、用的比較普</p><p> 做完這個項目時我們都很激動,這是我們這么多天的勞動成果。當我們把所有的功能都測試完成后,總感覺還有些不足,也許是時間的關系,我們沒來的急對頁面美化做進一步的處理,所以比較平凡,與簡陋。同時還有一些代碼的冗余。應該把重復的代碼封裝起來,這樣更加完美。雖然功能上得到實現(xiàn)。但對字符的處理還存在一些問題。比如中文的支持,做的不是很好。在當初設計的時候就應該考慮到這些問題,如果等到后期修改,
106、代碼量以及工作量會很大。所以給我的啟示是,前期工作一定要做完善??偟膩碚f,結果和我預期的差不多,基本滿足了我們的要求。</p><p> 這次實習使我們大學生將課堂所學的知識逐步轉化為社會所需要的才能,令我們獲益匪淺??偠灾?,通過這次的軟件開發(fā),通過實習,我們培養(yǎng)了自己獨立思考和獨立作業(yè)的能力,更加能夠自信地面對即將踏入的社會。</p><p><b> 附實習日記<
107、/b></p><p> 2014.2.24 星期一 武漢達內(nèi)培訓中心</p><p> 大學了的最后一學期了,這也是我們在母校最后一次好好學習的機會了,頓感時間飛逝啊,四年的大學時光就要過完了,感慨頗多啊。最后這次畢業(yè)實習必須要好好搞,這是進入社會的最后一次充電了,我們都要抓好這次機會。今天主要是介紹下畢業(yè)實習的事情,我們安排的是到武漢達內(nèi)培訓中心,以前就讓達內(nèi)老師帶著做過QQ
108、聊天系統(tǒng),達內(nèi)老師講的還不錯,也很負責,給學校老師和我們都留下了深刻的印象,那次課程設計學到了很多。來到教室我們簽了到就在老師的安排下找了一個座位坐下,然后就打開啦桌面前的電腦,可是不曾想它卻罷工啦,當然出現(xiàn)這種情況的還有別的同學,那邊負責人就安排專員來維修電腦,所以今天上午我們沒有開始編程,而是負責本次實習的張?zhí)m老師給我們講解了一下Java方面的一些知識,到最后電腦快弄好,編程時來不及啦,老師就給我們演示了一下這次首先要做的“捕魚達人
109、”。</p><p> 2014.2.25 星期二 武漢達內(nèi)培訓中心</p><p> 今天是第一天,在開課前準時到達武漢達內(nèi)培訓中心。Servlet是使用Java Servlet 應用程序設計接口及相關類和方法的 Java 程序。。Java Servlet API 定義了一個servlet 和Java使能的服務器之間的一個標準接口,這使得Servlets具有跨服務器平臺的特性。Ser
110、vlet 通過創(chuàng)建一個框架來擴展服務器的能力,以提供在 Web 上進行請求和響應服務。當客戶機發(fā)送請求至服務器時,服務器可以將請求信息發(fā)送給 Servlet,并讓 Servlet 建立起服務器返回給客戶機的響應。 當啟動 Web 服務器或客戶機第一次請求服務時,可以自動裝入 Servlet首先是熟悉java的基礎語法,把基礎打扎實,以后在開發(fā)中才能如魚得水。</p><p> 2014.2.26 星期三 武漢達
111、內(nèi)培訓中心 </p><p> 首先老師對昨天所講的網(wǎng)站的一些內(nèi)容的回顧,然后對網(wǎng)站作一些必要的介紹。該項目以房產(chǎn)交易網(wǎng)為背景,主要實現(xiàn)其用戶登錄、用戶注冊、用戶詳情及用戶列表等簡單功能。在需求分析的基礎上,對功能需求及功能實現(xiàn)的相關細節(jié)作了詳盡的描述。另外,先復習了javaSE的相關概念,如類、繼承、抽象的概念,類之間的關系:關聯(lián)、聚合、繼承、實現(xiàn)和多態(tài)。Static關鍵字:靜態(tài)修飾符,它修飾的方法、
112、類和變量可以全局調(diào)用。線程的實現(xiàn)方法,IO流等等。緊接著在了解之后就開始介紹捕魚達人和房產(chǎn)交易網(wǎng)的基本實現(xiàn)原理,這包括其中具體用到的那些我們所學的知識點、方法及原理,經(jīng)老師的逐步分解講解,其實我們會發(fā)現(xiàn)捕魚達人也并沒有想象中的那么不可行,我們還是能夠自己獨立完成的,畢竟都是一些我們所學的知識,只不過是把它們整合到一起而已。</p><p> 2014.2.27 星期四 武漢達內(nèi)培訓中心</p>&
113、lt;p> 作為當前程序開發(fā)中最流行編程語言的一種,它以面向?qū)ο?,跨平臺,安全,穩(wěn)定以及可擴展性吸引了用戶。Java的應用領域比較廣,目前的一個最為主要的用途是開發(fā)Web應用程序。而Web程序的入口點則是Servlet,Servlet主要處理各種業(yè)務邏輯,它比JSP更具有業(yè)務邏輯層的意義。了解它們的基本原理,我們就該開始在老師的帶領下著手啦,所謂巧婦難為無米之炊,在開始編程之前一些相關的環(huán)境搭建還是很有必要的,所這一天上午在老師
114、的帶領下我們在進行開發(fā)前的環(huán)境變量的配置以及開發(fā)工具的選取,完了之后就該是寫一份完整的開發(fā)的詳細設計報告,以為明天的編程的開始而準備。</p><p> 2014.2.28 星期五 武漢達內(nèi)培訓中心</p><p> 今天老師開始教我們捕魚達人的編程,這個讓我們興奮不已,因為我們都很早就玩過這個游戲,能了解這個游戲的開發(fā)過程讓我們很感興趣。老師給我們講了很多,包括界面設計,動畫效果原理
115、。其中界面主要就是圖片加載,畫面背景設置,加強游戲效果。而動畫效果原理則比較簡單,用多張圖片在較短的時間內(nèi)來回切換,這個就需要用線程來實現(xiàn)。魚的游動效果也很簡單,同樣是在單位時間內(nèi)變化魚的坐標,加上圖片切換效果,就可以達到魚在背景圖片上“游動”的效果。實現(xiàn)細節(jié)上,分析了系統(tǒng)的大致結構,所需要編寫的類及其屬性、方法等等。對于線程的實現(xiàn)方法,采用了兩種方法:繼承Thread類和實現(xiàn)Runnable接口。</p><p&g
116、t; 2014.3.3 星期一 武漢達內(nèi)培訓中心</p><p> 完成了捕魚達人的項目,對此項目進行了一些完善工作,包括分數(shù),子彈的控制等。在搞完之后,正式進入網(wǎng)站設計。</p><p> 首先熟悉html的基本結構,編碼格式,常用標簽等,然后開始嵌入簡單的JSP代碼,獲取頁面輸入的數(shù)據(jù),并反饋相關信息。其中重點講解了JSP的九大內(nèi)置對象(包括request,response,se
117、ssion,application,page,pageContext,out,exception,config),<table>標簽的使用,以及<form>表單的提交、請求等基本知識點。還好,這些我都自學過,雖然老師講的有點快,但還是可以跟上的。</p><p> 2014.3.4 星期二 武漢達內(nèi)培訓中心</p><p> 熟悉了JSP網(wǎng)頁編程后,接下來開始使
118、用Servlet框架。使用Servlet框架需要在網(wǎng)頁配置文件web.xml中添加相應的servlet相應處理,這里為了方便,我們用一個Servlet類攔截所有的請求,將其解析成不同的請求,同時作出相應的處理,并跳轉到對應的網(wǎng)頁。其中,會涉及相關的數(shù)據(jù)庫操作和相關類。</p><p> 這里的跳轉用到了頁面之間跳轉的方式:1.連接<a href='連接的地址'>百度</a>
119、; ;2.重定向request.sendRedirect("跳轉的路徑");3.轉發(fā)RequestDispatcher rd =request.getRequestDispatcher("請求轉發(fā)到的路徑");rd.forward(request, response);//把當前頁面的請求和響應也傳到下一個頁面。需注意重定向和轉發(fā)的區(qū)別。</p><p> 2014.3
120、.5 星期三 武漢達內(nèi)培訓中心</p><p> 今天主要是數(shù)據(jù)庫的操作和相關類編寫。這里使用的是mysql數(shù)據(jù)庫,雖然對SQL Server更熟悉,但是感覺它們差別不是很大。后臺控制使用實體類+工具類來對數(shù)據(jù)庫的相應表格進行增刪改查操作,其中為了方便鏈接和操作,我們單獨編寫了一個工具類dao,專門進行鏈接工作和執(zhí)行工作。</p><p> 數(shù)據(jù)庫操作主要分四步:1.加載驅(qū)動;2.獲取
121、鏈接;3.執(zhí)行sql語句,并返回結果集;4.釋放鏈接。為了明細系統(tǒng)結構,方便查找,我們編寫了工具類和實體類,對應數(shù)據(jù)庫的相應表格。例如需求分析中數(shù)據(jù)庫需要設計一個User表,來存儲用戶信息,其對應的實體類是只有屬性、set和get方法的javaBean,對應的工具類(DAO:database access object)封裝著一些方法,對實體和數(shù)據(jù)庫表進行交互信息,如findUserByName()、findUserById()、sav
122、eUser()、modifyUserById()等。</p><p> 2014.3.6 星期四 武漢達內(nèi)培訓中心</p><p> 在完善了數(shù)據(jù)庫鏈接和操作后,接著就是在網(wǎng)頁中進行應用。今天主要完成了兩項任務:用戶詳情頁面和用戶列表頁面。Web服務器在遇到訪問JSP網(wǎng)頁的請求時,首先執(zhí)行其中的程序段,然后將執(zhí)行結果連同JSP文件中的HTML代碼一起返回給客戶。插入的Java程序段可以
123、操作數(shù)據(jù)庫、重新定向網(wǎng)頁等,以實現(xiàn)建立動態(tài)網(wǎng)頁所需要的功能。JSP與JavaServlet一樣,是在服務器端執(zhí)行的,通常返回給客戶端的就是一個HTML文本,因此客戶端只要有瀏覽器就能瀏覽。今天主要完成了兩項任務:用戶詳情頁面和用戶列表頁面。用戶詳情頁面有三個內(nèi)容板塊:用戶個人信息、上傳圖片和查閱用戶圖片。用戶信息根據(jù)登錄名從數(shù)據(jù)庫表中查詢,然后以列表的形式顯示。用戶列表則查詢所有用戶的信息,同樣以列表的形式顯示,右邊還有一個“詳情”的鏈
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論