項目敘述
通過HttpClient、Jsoup、AJAX等技術,實現獲取遼寧大學課程表,並呈現出來。
成功登錄後,提示
課表展現:
實現原理簡述
1.分析目標源文件
得知登錄是用post方法向http://jwgl.lnu.edu.cn/pls/wwwbks/bks_login2.login
發送請求,帶有兩個參數stuid
和pwd
分別對應學號和密碼
獲取課表是向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> </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>
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
高級語言程序設計(必修)/宣偉宏<FONT COLOR="#FF0000"></FONT>
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
高等數學(下)(必修)/王敏<FONT COLOR="#FF0000">16級信息學院(除信息管理專業),16測控、16電科、16電氣、16環境工程專業學生選</FONT>
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
普通物理A(上)(必修)/張美霞<FONT COLOR="#FF0000">15級數學院、16級信息學院(除信息管理),16測控、16電科、16電氣專業學生選</FONT>
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
大學英語(二)(必修)/初彥霞<FONT COLOR="#FF0000">16級崇山校區學生選</FONT>
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
</p></TD>
</TR>
<TR>
<td bgcolor="#E2D8EF"><p align="center"><strong>第二節</strong></p></td>
<td bgcolor="#EAE2F3"><p align="center">
高級語言程序設計(必修)/宣偉宏<FONT COLOR="#FF0000"></FONT>
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
普通物理A(上)(必修)/張美霞<FONT COLOR="#FF0000">15級數學院、16級信息學院(除信息管理),16測控、16電科、16電氣專業學生選</FONT>
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
大學英語(二)(必修)/初彥霞<FONT COLOR="#FF0000">16級崇山校區學生選</FONT>
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
高等數學(下)(必修)/王敏<FONT COLOR="#FF0000">16級信息學院(除信息管理專業),16測控、16電科、16電氣、16環境工程專業學生選</FONT>
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
</p></TD>
</TR>
<TR>
<td bgcolor="#E2D8EF"><p align="center"><strong>第三節</strong></p></td>
<td bgcolor="#EAE2F3"><p align="center">
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
馬克思主義基本原理(必修)/王曉紅<FONT COLOR="#FF0000">16級崇山校區學生選</FONT>
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
離散數學(必修)/硃紅寧<FONT COLOR="#FF0000"></FONT>
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
離散數學(必修)/硃紅寧<FONT COLOR="#FF0000"></FONT>
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
</p></TD>
</TR>
<TR>
<td bgcolor="#E2D8EF"><p align="center"><strong>第四節</strong></p></td>
<td bgcolor="#EAE2F3"><p align="center">
體育(二)(必修)/王越鵬<FONT COLOR="#FF0000">網球,崇山校區</FONT>
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
軍事理論(必修)/金一哲<FONT COLOR="#FF0000">16級崇山校區學生選</FONT>
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
馬克思主義基本原理(必修)/王曉紅<FONT COLOR="#FF0000">16級崇山校區學生選</FONT>
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
創新性思維與創新方法(任選)/劉暢<FONT COLOR="#FF0000">崇山校區</FONT>
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
</p></TD>
<td bgcolor="#EAE2F3"><p align="center">
</p></TD>
</TR>
<TR>
<td bgcolor="#E2D8EF"><p align="center"><strong>第五節</strong></p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
</TR>
<TR>
<td bgcolor="#E2D8EF"><p align="center"><strong>第六節</strong></p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
</TR>
<TR>
<td bgcolor="#E2D8EF"><p align="center"><strong>第七節</strong></p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </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">高等數學(下) </p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">16級信息學院(除信息管理專業),16測控、16電科、16電氣、16環境工程專業學生選</FONT> </p></td>
<td bgcolor="#EAE2F3"><p align="center">0920426 </p></td>
<td bgcolor="#EAE2F3"><p align="center">3 </p></td>
<td bgcolor="#EAE2F3"><p align="center">必修 </p></td>
<td bgcolor="#EAE2F3"><p align="center">考試 </p></td>
<td bgcolor="#EAE2F3"><p align="center">蕙星樓419 </p></td>
<td bgcolor="#EAE2F3"><p align="center">1-1 </p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課 </p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">高等數學(下) </p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">16級信息學院(除信息管理專業),16測控、16電科、16電氣、16環境工程專業學生選</FONT> </p></td>
<td bgcolor="#EAE2F3"><p align="center">0920426 </p></td>
<td bgcolor="#EAE2F3"><p align="center">3 </p></td>
<td bgcolor="#EAE2F3"><p align="center">必修 </p></td>
<td bgcolor="#EAE2F3"><p align="center">考試 </p></td>
<td bgcolor="#EAE2F3"><p align="center">蕙星樓419 </p></td>
<td bgcolor="#EAE2F3"><p align="center">5-2 </p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課 </p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">高等數學(下) </p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">16級信息學院(除信息管理專業),16測控、16電科、16電氣、16環境工程專業學生選</FONT> </p></td>
<td bgcolor="#EAE2F3"><p align="center">0920426 </p></td>
<td bgcolor="#EAE2F3"><p align="center">3 </p></td>
<td bgcolor="#EAE2F3"><p align="center">必修 </p></td>
<td bgcolor="#EAE2F3"><p align="center">考試 </p></td>
<td bgcolor="#EAE2F3"><p align="center">蕙星樓419 </p></td>
<td bgcolor="#EAE2F3"><p align="center">3-1 </p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課 </p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">普通物理A(上) </p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">15級數學院、16級信息學院(除信息管理),16測控、16電科、16電氣專業學生選</FONT> </p></td>
<td bgcolor="#EAE2F3"><p align="center">1010014 </p></td>
<td bgcolor="#EAE2F3"><p align="center">3 </p></td>
<td bgcolor="#EAE2F3"><p align="center">必修 </p></td>
<td bgcolor="#EAE2F3"><p align="center">考試 </p></td>
<td bgcolor="#EAE2F3"><p align="center">東配樓403 </p></td>
<td bgcolor="#EAE2F3"><p align="center">4-1 </p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課 </p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">普通物理A(上) </p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">15級數學院、16級信息學院(除信息管理),16測控、16電科、16電氣專業學生選</FONT> </p></td>
<td bgcolor="#EAE2F3"><p align="center">1010014 </p></td>
<td bgcolor="#EAE2F3"><p align="center">3 </p></td>
<td bgcolor="#EAE2F3"><p align="center">必修 </p></td>
<td bgcolor="#EAE2F3"><p align="center">考試 </p></td>
<td bgcolor="#EAE2F3"><p align="center">東配樓403 </p></td>
<td bgcolor="#EAE2F3"><p align="center">2-2 </p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課 </p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">高級語言程序設計 </p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000"></FONT> </p></td>
<td bgcolor="#EAE2F3"><p align="center">1410044 </p></td>
<td bgcolor="#EAE2F3"><p align="center">4 </p></td>
<td bgcolor="#EAE2F3"><p align="center">必修 </p></td>
<td bgcolor="#EAE2F3"><p align="center">考試 </p></td>
<td bgcolor="#EAE2F3"><p align="center">東配樓103 </p></td>
<td bgcolor="#EAE2F3"><p align="center">1-2 </p></td>
<td bgcolor="#EAE2F3"><p align="center">1-13週上 </p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">高級語言程序設計 </p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000"></FONT> </p></td>
<td bgcolor="#EAE2F3"><p align="center">1410044 </p></td>
<td bgcolor="#EAE2F3"><p align="center">4 </p></td>
<td bgcolor="#EAE2F3"><p align="center">必修 </p></td>
<td bgcolor="#EAE2F3"><p align="center">考試 </p></td>
<td bgcolor="#EAE2F3"><p align="center">東配樓301 </p></td>
<td bgcolor="#EAE2F3"><p align="center">2-1 </p></td>
<td bgcolor="#EAE2F3"><p align="center">1-13週上 </p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">離散數學 </p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000"></FONT> </p></td>
<td bgcolor="#EAE2F3"><p align="center">1420053 </p></td>
<td bgcolor="#EAE2F3"><p align="center">2 </p></td>
<td bgcolor="#EAE2F3"><p align="center">必修 </p></td>
<td bgcolor="#EAE2F3"><p align="center">考試 </p></td>
<td bgcolor="#EAE2F3"><p align="center">蕙星樓319 </p></td>
<td bgcolor="#EAE2F3"><p align="center">4-3 </p></td>
<td bgcolor="#EAE2F3"><p align="center">單週上課 </p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">離散數學 </p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000"></FONT> </p></td>
<td bgcolor="#EAE2F3"><p align="center">1420053 </p></td>
<td bgcolor="#EAE2F3"><p align="center">2 </p></td>
<td bgcolor="#EAE2F3"><p align="center">必修 </p></td>
<td bgcolor="#EAE2F3"><p align="center">考試 </p></td>
<td bgcolor="#EAE2F3"><p align="center">蕙星樓319 </p></td>
<td bgcolor="#EAE2F3"><p align="center">5-3 </p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課 </p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">大學英語(二) </p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">16級崇山校區學生選</FONT> </p></td>
<td bgcolor="#EAE2F3"><p align="center">2111024 </p></td>
<td bgcolor="#EAE2F3"><p align="center">6 </p></td>
<td bgcolor="#EAE2F3"><p align="center">必修 </p></td>
<td bgcolor="#EAE2F3"><p align="center">考試 </p></td>
<td bgcolor="#EAE2F3"><p align="center">蕙星樓301 </p></td>
<td bgcolor="#EAE2F3"><p align="center">3-2 </p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課 </p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">大學英語(二) </p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">16級崇山校區學生選</FONT> </p></td>
<td bgcolor="#EAE2F3"><p align="center">2111024 </p></td>
<td bgcolor="#EAE2F3"><p align="center">6 </p></td>
<td bgcolor="#EAE2F3"><p align="center">必修 </p></td>
<td bgcolor="#EAE2F3"><p align="center">考試 </p></td>
<td bgcolor="#EAE2F3"><p align="center">蕙星樓301 </p></td>
<td bgcolor="#EAE2F3"><p align="center">5-1 </p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課 </p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">馬克思主義基本原理 </p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">16級崇山校區學生選</FONT> </p></td>
<td bgcolor="#EAE2F3"><p align="center">2210153 </p></td>
<td bgcolor="#EAE2F3"><p align="center">3 </p></td>
<td bgcolor="#EAE2F3"><p align="center">必修 </p></td>
<td bgcolor="#EAE2F3"><p align="center">考試 </p></td>
<td bgcolor="#EAE2F3"><p align="center">東配樓501 </p></td>
<td bgcolor="#EAE2F3"><p align="center">2-3 </p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課 </p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">馬克思主義基本原理 </p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">16級崇山校區學生選</FONT> </p></td>
<td bgcolor="#EAE2F3"><p align="center">2210153 </p></td>
<td bgcolor="#EAE2F3"><p align="center">3 </p></td>
<td bgcolor="#EAE2F3"><p align="center">必修 </p></td>
<td bgcolor="#EAE2F3"><p align="center">考試 </p></td>
<td bgcolor="#EAE2F3"><p align="center">東配樓501 </p></td>
<td bgcolor="#EAE2F3"><p align="center">4-4 </p></td>
<td bgcolor="#EAE2F3"><p align="center">雙週上課 </p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">體育(二) </p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">網球,崇山校區</FONT> </p></td>
<td bgcolor="#EAE2F3"><p align="center">2310021 </p></td>
<td bgcolor="#EAE2F3"><p align="center">19 </p></td>
<td bgcolor="#EAE2F3"><p align="center">必修 </p></td>
<td bgcolor="#EAE2F3"><p align="center">考試 </p></td>
<td bgcolor="#EAE2F3"><p align="center"> </p></td>
<td bgcolor="#EAE2F3"><p align="center">1-4 </p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課 </p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">軍事理論 </p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">16級崇山校區學生選</FONT> </p></td>
<td bgcolor="#EAE2F3"><p align="center">2310051 </p></td>
<td bgcolor="#EAE2F3"><p align="center">4 </p></td>
<td bgcolor="#EAE2F3"><p align="center">必修 </p></td>
<td bgcolor="#EAE2F3"><p align="center">考試 </p></td>
<td bgcolor="#EAE2F3"><p align="center">蕙星樓601 </p></td>
<td bgcolor="#EAE2F3"><p align="center">2-4 </p></td>
<td bgcolor="#EAE2F3"><p align="center">全週上課 </p></td>
</TR>
<TR>
<td bgcolor="#EAE2F3"><p align="center">創新性思維與創新方法 </p></td>
<td bgcolor="#EAE2F3"><p align="center"><FONT COLOR="#FF0000">崇山校區</FONT> </p></td>
<td bgcolor="#EAE2F3"><p align="center">F490022 </p></td>
<td bgcolor="#EAE2F3"><p align="center">2 </p></td>
<td bgcolor="#EAE2F3"><p align="center">任選 </p></td>
<td bgcolor="#EAE2F3"><p align="center">考查 </p></td>
<td bgcolor="#EAE2F3"><p align="center">東配樓302 </p></td>
<td bgcolor="#EAE2F3"><p align="center">5-4 </p></td>
<td bgcolor="#EAE2F3"><p align="center">2,6,10,15週上 </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(" ", " ");
}
/*
* 將課表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");
}
}
}
反思與總結
拒絕懶癌!每天進步一點點!