HttpClient實現獲取遼寧大學課程表

項目敘述

通過HttpClient、Jsoup、AJAX等技術,實現獲取遼寧大學課程表,並呈現出來。

這裏寫圖片描述

成功登錄後,提示

這裏寫圖片描述

課表展現:

這裏寫圖片描述

實現原理簡述

1.分析目標源文件

這裏寫圖片描述

得知登錄是用post方法向http://jwgl.lnu.edu.cn/pls/wwwbks/bks_login2.login發送請求,帶有兩個參數stuidpwd分別對應學號和密碼

這裏寫圖片描述

獲取課表是向http://jwgl.lnu.edu.cn/pls/wwwbks/xk.CourseView請求
這個用get方法就可以。

2.模擬登錄,並獲取課表

使用HttpClient模擬post登錄,再模擬get請求獲取課表的地址
得到課表信息的html代碼


<html>
      <head>
      <title>課表</title>
      <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
      <LINK href="/zhxt_bks/style.css" rel="stylesheet" TYPE="text/css">
    <script language="JavaScript1.2" src="/zhxt_bks/nocache.js"></script>
      </head>
      <BODY topmargin="5">
      <div align="center" CLASS="td1">
      <TABLE width="100%" border="0" cellspacing="0" cellpadding="0">
      <tr>
           <td width="20" height="30"><div align="center"><span CLASS="td1"><strong><img src="/zhxt_bks/pic0801.gif" width="18" height="18"></strong></span></div></td>
           <td valign="middle"><span CLASS="td1"><strong>學生選課系統</strong></span></td>
      </tr>
      </TABLE>
      <strong><font color="#990000"> </font></strong></div>

<span class="td1">信息學院 軟件工程專業 劉之帥(161407212)</span>
<BR>
<span class="td1">你共選擇了 28 學分</span><BR>
<table width="100%" border="1" cellpadding="0" cellspacing="0" bgcolor="#EAE2F3" bordercolorlight="#A545A3" bordercolordark="#FFFFFF">
          <tr>
          <td>
<table width="100%" border="0" cellspacing="2" cellpadding="3">
             <tr>
             <td bgcolor="#E7DCF1"><div align="center" CLASS="td1"><strong><font color="#990000">已經安排時間地點的課程:</font></strong></div></td>
             </tr>
             </TABLE>

<table width="100%" border="0" cellpadding="2" cellspacing="3" bgcolor="#F2EDF8">
<TR>
<td bgcolor="#E2D8EF"><p align="center"><strong>&nbsp</strong></p></td>
<td bgcolor="#E2D8EF"><p align="center"><strong>星期一</strong></p></td>
<td bgcolor="#E2D8EF"><p align="center"><strong>星期二</strong></p></td>
<td bgcolor="#E2D8EF"><p align="center"><strong>星期三</strong></p></td>
<td bgcolor="#E2D8EF"><p align="center"><strong>星期四</strong></p></td>
<td bgcolor="#E2D8EF"><p align="center"><strong>星期五</strong></p></td>
<td bgcolor="#E2D8EF"><p align="center"><strong>星期六</strong></p></td>
<td bgcolor="#E2D8EF"><p align="center"><strong>星期日</strong></p></td>
</TR>
<TR>
<td bgcolor="#E2D8EF"><p align="center"><strong>第一節</strong></p></td>
<td bgcolor="#EAE2F3"><p align="center">
<BR>高等數學(下)(必修)/王敏<FONT COLOR="#FF0000">16級信息學院(除信息管理專業),16測控、16電科、16電氣、16環境工程專業學生選</FONT>
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
高級語言程序設計(必修)/宣偉宏<FONT COLOR="#FF0000"></FONT>
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
高等數學(下)(必修)/王敏<FONT COLOR="#FF0000">16級信息學院(除信息管理專業),16測控、16電科、16電氣、16環境工程專業學生選</FONT>
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
普通物理A(上)(必修)/張美霞<FONT COLOR="#FF0000">15級數學院、16級信息學院(除信息管理),16測控、16電科、16電氣專業學生選</FONT>
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
大學英語(二)(必修)/初彥霞<FONT COLOR="#FF0000">16級崇山校區學生選</FONT>
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
&nbsp;</p></TD>
</TR>
<TR>
<td bgcolor="#E2D8EF"><p align="center"><strong>第二節</strong></p></td>
<td bgcolor="#EAE2F3"><p align="center">
高級語言程序設計(必修)/宣偉宏<FONT COLOR="#FF0000"></FONT>
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
普通物理A(上)(必修)/張美霞<FONT COLOR="#FF0000">15級數學院、16級信息學院(除信息管理),16測控、16電科、16電氣專業學生選</FONT>
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
大學英語(二)(必修)/初彥霞<FONT COLOR="#FF0000">16級崇山校區學生選</FONT>
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
高等數學(下)(必修)/王敏<FONT COLOR="#FF0000">16級信息學院(除信息管理專業),16測控、16電科、16電氣、16環境工程專業學生選</FONT>
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
&nbsp;</p></TD>
</TR>
<TR>
<td bgcolor="#E2D8EF"><p align="center"><strong>第三節</strong></p></td>
<td bgcolor="#EAE2F3"><p align="center">
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
馬克思主義基本原理(必修)/王曉紅<FONT COLOR="#FF0000">16級崇山校區學生選</FONT>
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
離散數學(必修)/硃紅寧<FONT COLOR="#FF0000"></FONT>
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
離散數學(必修)/硃紅寧<FONT COLOR="#FF0000"></FONT>
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
&nbsp;</p></TD>
</TR>
<TR>
<td bgcolor="#E2D8EF"><p align="center"><strong>第四節</strong></p></td>
<td bgcolor="#EAE2F3"><p align="center">
體育(二)(必修)/王越鵬<FONT COLOR="#FF0000">網球,崇山校區</FONT>
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
軍事理論(必修)/金一哲<FONT COLOR="#FF0000">16級崇山校區學生選</FONT>
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
馬克思主義基本原理(必修)/王曉紅<FONT COLOR="#FF0000">16級崇山校區學生選</FONT>
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
創新性思維與創新方法(任選)/劉暢<FONT COLOR="#FF0000">崇山校區</FONT>
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
&nbsp;</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
&nbsp;</p></TD>
</TR>
<TR>
<td bgcolor="#E2D8EF"><p align="center"><strong>第五節</strong></p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#E2D8EF"><p align="center"><strong>第六節</strong></p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#E2D8EF"><p align="center"><strong>第七節</strong></p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
</TR>
</table>
</td>
</tr>
</table>
<BR>
<table width="100%" border="1" cellpadding="0" cellspacing="0" bgcolor="#EAE2F3" bordercolorlight="#A545A3" bordercolordark="#FFFFFF">
          <tr>
          <td>
<table width="100%" border="0" cellspacing="2" cellpadding="3">
             <tr>
             <td bgcolor="#E7DCF1"><div align="center" CLASS="td1"><strong><font color="#990000">時間地點如下</font></strong></div></td>
             </tr>
             </TABLE>

<table width="100%" border="0" cellpadding="2" cellspacing="3" bgcolor="#F2EDF8">
<td bgcolor="#E2D8EF"><p align="center"><strong>課程名稱</strong></p></td>
<td bgcolor="#E2D8EF"><p align="center"><strong>選課限制說明</strong></p></td>
<td bgcolor="#E2D8EF"><p align="center"><strong>課程號</strong></p></td>
<td bgcolor="#E2D8EF"><p align="center"><strong>課序號</strong></p></td>
<td bgcolor="#E2D8EF"><p align="center"><strong>課程屬性</strong></p></td>
<td bgcolor="#E2D8EF"><p align="center"><strong>考試類型</strong></p></td>
<td bgcolor="#E2D8EF"><p align="center"><strong>上課地點</strong></p></td>
<td bgcolor="#E2D8EF"><p align="center"><strong>上課時間</strong></p></td>
<td bgcolor="#E2D8EF"><p align="center"><strong>上課周次</strong></p></td>
<TR>
<td bgcolor="#EAE2F3"><p align="center">高等數學(下)&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">16級信息學院(除信息管理專業),16測控、16電科、16電氣、16環境工程專業學生選</FONT>&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">0920426&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">3&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">必修&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">考試&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">蕙星樓419&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">1-1&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">高等數學(下)&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">16級信息學院(除信息管理專業),16測控、16電科、16電氣、16環境工程專業學生選</FONT>&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">0920426&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">3&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">必修&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">考試&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">蕙星樓419&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">5-2&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">高等數學(下)&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">16級信息學院(除信息管理專業),16測控、16電科、16電氣、16環境工程專業學生選</FONT>&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">0920426&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">3&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">必修&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">考試&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">蕙星樓419&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">3-1&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">普通物理A(上)&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">15級數學院、16級信息學院(除信息管理),16測控、16電科、16電氣專業學生選</FONT>&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">1010014&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">3&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">必修&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">考試&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">東配樓403&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">4-1&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">普通物理A(上)&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">15級數學院、16級信息學院(除信息管理),16測控、16電科、16電氣專業學生選</FONT>&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">1010014&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">3&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">必修&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">考試&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">東配樓403&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">2-2&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">高級語言程序設計&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000"></FONT>&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">1410044&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">4&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">必修&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">考試&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">東配樓103&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">1-2&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">1-13週上&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">高級語言程序設計&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000"></FONT>&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">1410044&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">4&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">必修&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">考試&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">東配樓301&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">2-1&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">1-13週上&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">離散數學&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000"></FONT>&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">1420053&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">2&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">必修&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">考試&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">蕙星樓319&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">4-3&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">單週上課&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">離散數學&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000"></FONT>&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">1420053&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">2&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">必修&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">考試&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">蕙星樓319&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">5-3&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">大學英語(二)&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">16級崇山校區學生選</FONT>&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">2111024&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">6&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">必修&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">考試&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">蕙星樓301&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">3-2&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">大學英語(二)&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">16級崇山校區學生選</FONT>&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">2111024&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">6&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">必修&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">考試&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">蕙星樓301&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">5-1&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">馬克思主義基本原理&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">16級崇山校區學生選</FONT>&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">2210153&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">3&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">必修&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">考試&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">東配樓501&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">2-3&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">馬克思主義基本原理&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">16級崇山校區學生選</FONT>&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">2210153&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">3&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">必修&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">考試&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">東配樓501&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">4-4&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">雙週上課&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">體育(二)&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">網球,崇山校區</FONT>&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">2310021&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">19&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">必修&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">考試&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">1-4&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">軍事理論&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">16級崇山校區學生選</FONT>&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">2310051&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">4&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">必修&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">考試&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">蕙星樓601&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">2-4&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課&nbsp;</p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">創新性思維與創新方法&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">崇山校區</FONT>&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">F490022&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">2&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">任選&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">考查&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">東配樓302&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">5-4&nbsp;</p></td>
<td bgcolor="#EAE2F3"><p align="center">2,6,10,15週上&nbsp;</p></td>
</TR>
</table>
</td>
</tr>
</table>
</BODY></HTML>
<HR>
<span class="t">
操作成功!
</span>

通過觀察得知,課表信息在第二個table元素裏面,而且所有課表信息的bgcolor都是#EAE2F3,同時,font元素裏面的內容並不是我們需要的。
所以,我們使用jsoup解析出所有bgcolor是#EAE2F的td並刪除裏面的font元素,獲取這些元素的text,存到數組中。

    public List<String> DealInfo(String Info){
        List<String> result = new ArrayList<String>();
        Document doc = Jsoup.parse(Info);
        Element table = doc.select("table").get(1); 
        table.select("font").remove();
        Elements tds = table.select("td[bgcolor=\"#EAE2F3\"]");
        for (Element td : tds) {
              result.add(td.text());
//            System.out.println(td.text());
            }

        return result;

    }

3.將數組轉變成json

4.前端ajax請求,獲取json轉化爲數組

後臺源碼

Dodeal.java

package src.lnu.lzs.deal;

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

import net.sf.json.JSONArray;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;



public class Dodeal {

    private  HttpUtils httpUtils = new HttpUtils();


    /*
     * 判斷是否登錄成功
     * @param username 用戶名
     * @param password 密碼
     * @return boolean
     */
    public boolean Succeed(int username,String password){
        String param = "stuid="+username+"&pwd="+password;

        boolean succeed = true ;
        try {
            String htmlTxt = httpUtils.sendPost("http://jwgl.lnu.edu.cn/pls/wwwbks/bks_login2.login", param);
            Document doc = Jsoup.parse(htmlTxt);
            Elements body = doc.select("body"); 
            String bodyText = body.text();
            System.out.print(bodyText);
            if(bodyText.equals("你輸入了錯誤的學號或密碼,不能登錄!")){
                succeed=false;
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return succeed;
    }

    /*
     * 獲取課表信息
     * @return HTML代碼
     */
    public String getInfo() throws IOException{

        String html = httpUtils.sendPost("http://jwgl.lnu.edu.cn/pls/wwwbks/xk.CourseView","");
        httpUtils.close();
        return html.replace("&nbsp;", " ");
    }
    /*
     * 將課表HTML處理成數組
     * @param HTML代碼
     * @return 數組
     */
    public List<String> DealInfo(String Info){
        List<String> result = new ArrayList<String>();
        Document doc = Jsoup.parse(Info);
        Element table = doc.select("table").get(1); 
        table.select("font").remove();
        Elements tds = table.select("td[bgcolor=\"#EAE2F3\"]");
        for (Element td : tds) {
              result.add(td.text());
//            System.out.println(td.text());
            }

        return result;

    }
    /*
     * 將數據處理成json
     * @param 數組
     * @return json
     */
    public String ListToJosn(List<String> temp){
        JSONArray jsa = JSONArray.fromObject(temp);
        System.out.print(jsa);
        return jsa.toString();
    }
}

HttpUtils.java

package src.lnu.lzs.deal;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import org.apache.catalina.connector.InputBuffer;
import org.apache.http.HttpEntity;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.DefaultHostnameVerifier;
import org.apache.http.conn.util.PublicSuffixMatcher;
import org.apache.http.conn.util.PublicSuffixMatcherLoader;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.LaxRedirectStrategy;
import org.apache.http.util.EntityUtils;

public class HttpUtils {
    private CloseableHttpClient httpClient = HttpClients.custom()
                .setRedirectStrategy(new LaxRedirectStrategy())
                .build(); 
    private CloseableHttpResponse response = null;
    /**
     * sendPost 發送post請求
     * @param url
     * @param param
     * @return
     * @throws IOException
     */
    public String sendPost(String url, String param) throws IOException {
        String result = null;
//  


        try {
            HttpPost hp = new HttpPost(url);

            RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(15000)
                    .setConnectTimeout(15000)
                    .setConnectionRequestTimeout(15000)
                    .build();

            StringEntity stringEntity = new StringEntity(param, "UTF-8");
            stringEntity.setContentType("application/x-www-form-urlencoded");
            stringEntity.setChunked(false);

            hp.setEntity(stringEntity);
            hp.setConfig(requestConfig);


            response = httpClient.execute(hp);
            System.out.println(response.getStatusLine());
            result = EntityUtils.toString(response.getEntity(), "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();// TODO: handle exception
        }finally{

        }
        return result;
    }
    public void close() throws IOException {
        httpClient.close();
        response.close();
    }

}

TheServlet.java

package src.lnu.lzs.servlet;

import java.io.IOException;

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

import src.lnu.lzs.deal.Dodeal;

/**
 * Servlet implementation class TheServlet
 */
@WebServlet("/TheServlet")
public class TheServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public TheServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//      System.out.println("調用get方法:");

    }
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("POST方法");
        Dodeal dodeal = new Dodeal();
        int stdId =Integer.parseInt(request.getParameter("username"));
        String password = request.getParameter("password"); 

        boolean succeed = dodeal.Succeed(stdId, password);

        if(succeed){
            String html = dodeal.getInfo();
            String result = dodeal.ListToJosn(dodeal.DealInfo(html));
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().println(result);
        }else{
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().print("NULL");
        }
    }


}

反思與總結

拒絕懶癌!每天進步一點點!

發佈了34 篇原創文章 · 獲贊 21 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章