天天看點

第三次作業

031302223 031302331

一.将初始排課表導入系統資料庫

     我們使用的是MySQL來存儲excel中的資料,Navicat for MySQL是MySQL的管理工具,下載下傳位址:http://www.mysql.com/downloads/;安裝好MySQL和Navicat for MySQL後,打開Navicat for MySQL:

1.建立一個表,就是MySQL中的表course,并設定好類型和主鍵;

第三次作業

2.建好course表後,右鍵選擇導入向導,這次的資料儲存在excel中,是以我們選擇excel檔案;

然後選擇你要導入的檔案的所在位置;

第三次作業
3.接下來填好欄位名行,第一個資料行,最後一個資料行,根據你要導入的excel檔案進行填寫;
第三次作業
4.接下來如圖:
第三次作業
第三次作業
5.最後點選開始導入excel中的表格如圖:
第三次作業

二.将系統資料庫的排課資料 顯示在 web界面裡

1.首先下載下傳好Myeclipse和tomcat-7.0.64

Mycelipse:http://www.my-eclipse.cn/

tomcat-7.0.64:http://download.csdn.net/download/coding_cc/6409105(推薦7.0解壓版)

2.下載下傳好後就要配置Tomcat伺服器環境(要下載下傳安裝JDK),

計算機->屬性->進階系統設定->環境變量

建立一個變量名:JAVA_HOME,變量值為你JDK所在的目錄;

第三次作業

建立一個變量名:CLASSPATH ,變量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

編輯path的環境變量,變量值為:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

第三次作業
第三次作業
配置好環境後,測試Tomcat,打開浏覽器,在位址欄中輸入http://localhost:8080回車,如果看到Tomcat自帶的一個JSP頁面,說明你的JDK和Tomcat已搭建成功。
第三次作業
3.Myeclipse配置tomcat,由于myeclipse自帶的tomcat不實用(網上有相應的讨論),個人感覺也還是自己的好,并且配置檔案也比較好修改如端口号主機名(關于tomcat web伺服器,詳情百度及官方文檔),在主界面 windows->Preference->>
第三次作業

 設定enable, 及本地tomcat的相應映射

4.打開Myeclipse,建立一個Web project,由于暫時不需要用到maven管理,這裡我們建立時不勾選maven配置(不了解maven的請自行百度)

注意這邊有一點:web.xml 一般在建立的時候勾選,當然也可以選擇複制ROOT項目的進行修改。

5.項目結構:mvc 架構

Model層:

Course類

package com.c2.bean;
 
public class Course {  
   private String nianji;  
   private String zhuanye;  
    private String renshu;  
  private String mingcheng;  
    private String leixing;
    private String xuefen;
    private String xueshi;
    private String shiyanxueshi;
    private String shangjixueshi;
    private String zhouxu;
    private String jiaoshi;
    private String beizhu;
  //setter and getter ..  關于變量命名,這邊使用pinyin不夠規範 建議駝峰法
     
   
}        

Control層

CourseServlet

package com.c2.servlet;

import java.io.IOException;  
import java.io.PrintWriter;  
import java.util.ArrayList;  
 

import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  

import com.c2.bean.Course;  
import com.c2.util.DBConnection;
 
  
public class CourseServlet extends HttpServlet {  
 
  
   public void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
  
        this.doPost(request, response);  
    }  
  
    public void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
  
        DBConnection db = new DBConnection();  
         
        String sql = "select * from Course";  
          
        ArrayList<Course> list = db.getCourseList(sql);  
          
        request.setAttribute("list", list);  
        request.getRequestDispatcher("index.jsp").forward(request, response);  
    }  
        
  }        

具體的業務邏輯,接受post 請求 和 get 請求,在這裡我們接受get請求,然後去用工具類(見下文)去資料庫拿資料,最後放到Attribute值域中,通過轉發在jsp中取得資料;

工具類:

資料庫操作 注意要

package com.c2.util;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.ArrayList;

import com.c2.bean.Course;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;

public class DBConnection {
    
    /**
     * 驅動類名稱
     */
    private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
    
    /**
     * 資料庫連接配接字元串
     */
    private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/coursemanagement";
    
    /**
     * 資料庫使用者名
     */
    private static final String USER_NAME = "root";
    
    /**
     * 資料庫密碼
     */
    private static final String PASSWORD = "";
    
    /**
     * 資料庫連接配接類
     */
    private static Connection conn;
    
    /**
     * 資料庫操作類
     */
    private static Statement stmt;
    
    
    
    // 加載驅動
    static{
        try {
            Class.forName(DRIVER_CLASS);
        } catch (Exception e) {
            System.out.println("加載驅動錯誤");
            System.out.println(e.getMessage());
        }
    }
    
    // 取得連接配接
    private static Connection getConnection(){
        
        try {
            conn = (Connection) DriverManager.getConnection(DATABASE_URL, USER_NAME, PASSWORD);
        } catch (Exception e) {
            System.out.println("取得連接配接錯誤");
            System.out.println(e.getMessage());
        }
        return conn;
    }
    
    
    public void ExecuteDel(String sql){
        
        try {
            stmt = (Statement) getConnection().createStatement();
        } catch (Exception e) {
            System.out.println("statement取得錯誤");
            System.out.println(e.getMessage());
        }
        
        try {
            int rows = stmt.executeUpdate(sql);
            if(rows >= 1){
                System.out.println("成功删除.....");
            } else {
                System.out.println("删除失敗.....");
            }
            
        } catch (Exception e) {
            // TODO: handle exception
        }
        
        
    }
    
    public ArrayList<Course> getCourseList(String sql){
        
        ArrayList<Course> list = new ArrayList<Course>();
        
        // 取得資料庫操作對象
        try {
            stmt = (Statement) getConnection().createStatement();
        } catch (Exception e) {
            System.out.println("statement取得錯誤");
            System.out.println(e.getMessage());
            return null;
        }
        
        try {
            
            // 查詢資料庫對象,傳回記錄集(結果集)
            ResultSet rs = stmt.executeQuery(sql);
            
            // 循環記錄集,檢視每一行每一列的記錄
            while (rs.next()) {
                // 第一列 sno
                
                
                Course stu = new Course();
                int i=1;
                stu.setNianji(rs.getString(i++));
                stu.setZhuanye(rs.getString(i++));
                stu.setRenshu(rs.getString(i++));
                stu.setMingcheng(rs.getString(i++));
                stu.setLeixing(rs.getString(i++));
                stu.setXuefen(rs.getString(i++));
                stu.setXueshi(rs.getString(i++));
                stu.setShiyanxueshi(rs.getString(i++));
                stu.setShangjixueshi(rs.getString(i++));
                stu.setZhouxu(rs.getString(i++));
                stu.setJiaoshi(rs.getString(i++));
                stu.setBeizhu(rs.getString(i++));
                list.add(stu);
            }
            
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return list;
    }
}      

表現層:

index.jsp

通過使用jstl來輸出資料

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  
 <body>
      
      <table border="1">
          <tr>
              <td>年級</td>
              <td>專業</td>
              <td>專業人數</td>
              <td>課程名稱</td>
              <td>選修類型</td>
              <td>學分</td>
              <td>學時</td>
              <td>實驗</td>
              <td>上機</td>
              <td>起訖周序</td>
              <td>任課教師</td>
              <td>備注</td>
              <td></td>
          </tr>
          
          <c:forEach items="${list}" var="stu">
              <tr>
                  <td>${stu.nianji }</td>
                  <td>${stu.zhuanye }</td>
                  <td>${stu.renshu }</td>
                  <td>${stu.mingcheng }</td>
                  <td>${stu.leixing }</td>
                  <td>${stu.xuefen }</td>
                  <td>${stu.xueshi }</td>
                  <td>${stu.shiyanxueshi }</td>
                  <td>${stu.shangjixueshi }</td>
                  <td>${stu.zhouxu }</td>
                  <td>${stu.jiaoshi }</td>
                  <td>${stu.beizhu }</td>
              </tr>
          </c:forEach>
      </table>
      
      
  </body>
</html>      

當然在送出的時候可能會出現亂碼,不過我們在編碼之前,隊伍已經做了些規範,字元集用的是UTF-8, 關于亂碼出現情況,請看我的另一篇部落格亂碼之UTF-8 &GBK

當然 寫到這裡,你可能會想,浏覽器的位址是如何映射到servlet, 剛剛那個web.xml有什麼用? 沒錯,配置就是在裡面配置的 參考下面我們的代碼,或許你應該就看懂了

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>C2</display-name>
  <servlet>
    <servlet-name>CourseServlet</servlet-name> <!-- 要與下面mapping的一緻-->
    <servlet-class>com.c2.servlet.CourseServlet</servlet-class> <!-- 詳細到具體的類名, 相當于android端的元件注冊-->
  </servlet>
  <servlet-mapping>
    <servlet-name>CourseServlet</servlet-name>
    <url-pattern>/test</url-pattern> <!-- 攔截浏覽器的請求位址 -->
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file> <!-- 預設域名:端口号/項目名 時打開的頁面,從上往下找 -->
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>      

6.啟動項目,

第三次作業

然後看到視窗出現啟動資訊,在浏覽器輸入 localhost:8080/c2/test 出現如下

第三次作業

具體的過程就是這樣。

源碼的Github連結:https://github.com/FZU2015France/CourseManagement

PSP表格:

第三次作業

Github上的commit的日志:69bc812c0b3041b04e87d95b3b3337fa3ac193dc

                                      cc7f93672065163a0ad14195f6c64c7a9bd31d4b

我們結對時的照片:

第三次作業
第三次作業

兩次結對經曆的小結:結對的經曆讓我明白了合作的重要性,一個團隊要是分工明确,有目的,有計劃地開展計劃,就會很好的完成任務。我也從隊友身上學到了許多,接觸了很多以前沒接觸過的東西,受益匪淺;從第一次的設計方案,再到這次的編碼,我都投入了大量的時間和經曆,但我覺得這些付出是值得的,雖然經曆了加班到深夜,為了某一些問題而絞盡腦汁時,其實這也是個快樂的過程,付出時間的同時,也收獲了不少;這兩次的作業我遇到數不清的小問題,但都能自己上網查閱相關資料,鍛煉自己解決問題的能力,以後的路上想必不可能一帆風順,都需要自己動手來解決一些問題,在解決問題的同時也提高了自己的水準;希望在接下來的組隊程式設計中,我能夠學到更多意想不到的東西,體會另一種感覺。