项目叙述
通过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");
}
}
}
反思与总结
拒绝懒癌!每天进步一点点!