当前位置: 首页 > 编程日记 > 正文

Java网页数据采集器[下篇-数据查询]【转载】

本期概述

上一期我们学习了如何将html采集到的数据存储到MySql数据库中,这期我们来学习下如何在存储的数据中查询我们实际想看到的数据.

数据采集页面 2011-2012赛季英超球队战绩

如果是初学者 以下可能对你有帮助

  • Java如何操作MySql?

在使用java 操作MySql数据库之前 我们需要在项目文件中导入 一个jar包(mysql-connector-java-5.1.18-bin)

可以在MySql官网下载 Connector/J 5.1.18

第一次使用MySql?   请看 java连接MYSQL      

  • 如何在java项目中导入jar包?

请看这个 Eclipse下如何导入jar包

  • 如何安装MySql数据库? 

如果是初学者 想使用MySql数据库的话 可以去这里 XAMPP中文官网  下载 XAMPP 套装

XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建 XAMPP 软件站集成软件包, 而且一键式安装, 无需修改配置文件,非常好用.

关于,如何在MySql里创建数据库,请看Java网页数据采集器实例教程[中篇-数据存储].

数据库准备好了,我们开始写java程序代码;

这期,我们主要在MySql 类里增加了一个数据查看的方法 queryMySql(),并增加了一个 DataQuery类, 包含了一些比赛结果的查询方法.

主程序代码

这里简单介绍下各个类以及包含的方法

DataCollectionAndStorage类 和里面的dataCollectAndStore() 方法 用于Html数据采集和存储

DataCollectionAndStorage类import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
/*** DataCollectionAndStorage类 用于数据的收集和存储* @author SoFlash - 博客园  http://www.cnblogs.com/longwu*/
public class DataCollectionAndStorage {/*** dataCollectAndStore()方法  用于Html数据收集和存储*/public void dataCollectAndStore() {// 首先用一个字符串 来装载网页链接String strUrl = "http://www.footballresults.org/league.php?all=1&league=EngPrem";String sqlLeagues = "";try {// 创建一个url对象来指向 该网站链接 括号里()装载的是该网站链接的路径// 更多可以看看 http://wenku.baidu.com/view/8186caf4f61fb7360b4c6547.htmlURL url = new URL(strUrl);// InputStreamReader 是一个输入流读取器 用于将读取的字节转换成字符// 更多可以看看 http://blog.sina.com.cn/s/blog_44a05959010004il.htmlInputStreamReader isr = new InputStreamReader(url.openStream(),"utf-8"); // 统一使用utf-8 编码模式// 使用 BufferedReader 来读取 InputStreamReader 转换成的字符BufferedReader br = new BufferedReader(isr);String strRead = ""; // new 一个字符串来装载 BufferedReader 读取到的内容// 定义3个正则 用于获取我们需要的数据String regularDate = "(\\d{1,2}\\.\\d{1,2}\\.\\d{4})";String regularTwoTeam = ">[^<>]*</a>";String regularResult = ">(\\d{1,2}-\\d{1,2})</TD>";//创建 GroupMethod类的对象 gMethod 方便后期调用其类里的 regularGroup方法GroupMethod gMethod = new GroupMethod();//创建DataStructure数据结构 类的对象   用于数据下面的数据存储DataStructure ds = new DataStructure();//创建MySql类的对象 用于执行MySql语句MySql ms = new MySql();int i = 0; // 定义一个i来记录循环次数 即收集到的球队比赛结果数int index = 0; // 定义一个索引 用于获取分离 2个球队的数据 因为2个球队正则是相同的// 开始读取数据 如果读到的数据不为空 则往里面读while ((strRead = br.readLine()) != null) {/*** 用于捕获日期数据*/String strGet = gMethod.regularGroup(regularDate, strRead);// 如果捕获到了符合条件的 日期数据 则打印出来if (!strGet.equals("")) {//System.out.println("Date:" + strGet);//将收集到的日期存在数据结构里ds.date = strGet;// 这里索引+1 是用于获取后期的球队数据++index; // 因为在html页面里 源代码里 球队数据是在刚好在日期之后}/*** 用于获取2个球队的数据*/strGet = gMethod.regularGroup(regularTwoTeam, strRead);if (!strGet.equals("") && index == 1) { // 索引为1的是主队数据// 通过subtring方法 分离出 主队数据strGet = strGet.substring(1, strGet.indexOf("</a>"));//System.out.println("HomeTeam:" + strGet); // 打印出主队//将收集到的主队名称 存到 数据结构里ds.homeTeam = strGet;index++; // 索引+1之后 为2了// 通过subtring方法 分离出 客队} else if (!strGet.equals("") && index == 2) { // 这里索引为2的是客队数据strGet = strGet.substring(1, strGet.indexOf("</a>"));//System.out.println("AwayTeam:" + strGet); // 打印出客队//将收集到的客队名称 存到数据结构里ds.awayTeam = strGet;index = 0;  //收集完客队名称后 需要将索引还原 用于收集下一条数据的主队名称}/*** 用于获取比赛结果*/strGet = gMethod.regularGroup(regularResult, strRead);if (!strGet.equals("")) {// 这里同样用到了substring方法 来剔除'<' 和 "</TD>" 标签 来获取我们想要的比赛结果strGet = strGet.substring(1, strGet.indexOf("</TD>"));//System.out.println("Result:" + strGet);ds.result = strGet; //将收集到的比赛结果存到数据结构里//System.out.println();//MySql插入语句sqlLeagues = "INSERT INTO Premiership values(\""+ ds.date + "\"," + "\"" + ds.homeTeam+ "\"," + "\"" + ds.awayTeam + "\","+ "\"" + ds.result + "\")";//调用MySql类的datatoMySql()方法 来执行 MySql插入语句ms.datatoMySql(sqlLeagues);i++; //每插入完一条记录 i+1;System.out.println("第"+i+"条数据插入成功");}}// 当读完数据后 记得关闭 BufferReaderbr.close();//System.out.println("共收集到" + i + "条比赛记录");// 打印出循环次数//当数据存储完成后 打印出 收集球队记录数System.out.println("数据存储完毕,共插入数据库"+i+"条记录");} catch (IOException e) {// 如果出错 抛出异常e.printStackTrace();}}
}

DataQuery类 里面有4个方法

  1. initialDataBase() 用于清空数据库里的所有比赛数据
  2. getAllTeams()    用于获取当前数据库里所有球队的名字
  3. querySpecifiedTeam()   用于查询具体球队的比赛情况 (可以查看你喜欢的球队比赛结果)
  4. queryByDate()  用于查询具体日期的比赛 (查询某一天的比赛结果)
DataQuery 类import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
/*** DataQuery 类  用于查询数据库里的信息 包含了不同的方法* @author SoFlash - 博客园  http://www.cnblogs.com/longwu*/
public class DataQuery {/*** 用于清空数据库里比赛结果*/public void initialDataBase() {String initialSql = "delete from premiership";MySql ms = new MySql();try {//MySql类里 提供了一个 删除数据的 方法 executeUpdate()ms.datatoMySql(initialSql);System.out.println("数据库清空成功!");} catch (Exception e) {System.out.println("数据库清空失败!");}}/*** 用于 获取当前数据库里一共有多少球队 方便后期查看自己喜欢的球队比赛成绩* @return 所有的参与过比赛的球队名*/public Vector<String> getAllTeams() {//使用一个向量来 存取 从数据库中读到的值Vector<String> vecAllTeams = new Vector<String>();String allteamsSql = "select HomeTeam,AwayTeam from premiership group by HomeTeam;";ResultSet rs = null; MySql ms = new MySql();//调用 MySql类里 查看数据的方法rs = ms.queryMySql(allteamsSql);try {//如果 ResultSet数据集里的数据不为空  则获取相应的 数据 添加到 向量vecAllTeams里while (rs.next()) {if (!vecAllTeams.contains(rs.getString("HomeTeam")))vecAllTeams.add(rs.getString("HomeTeam"));else if (!vecAllTeams.contains(rs.getString("AwayTeam")))vecAllTeams.add(rs.getString("AwayTeam"));}} catch (SQLException e) {System.out.println(e.getMessage());e.printStackTrace();}//返回 取到的所有结果return vecAllTeams;}/*** 查看具体的球队比赛结果* @param league* @return 具体球队的所有比赛结果*/public Vector<String> querySpecifiedTeam(String league) {//创建一个向量 来装载 从数据库中 读到的数据Vector<String> lsMatches = new Vector<String>();String specifiedTeamSql = "select * from premiership where HomeTeam ='"+ league + "' or AwayTeam ='" + league + "'";MySql ms = new MySql();ResultSet rs = null;rs = ms.queryMySql(specifiedTeamSql);try {while (rs.next()) {lsMatches.add(rs.getString("Date"));lsMatches.add(rs.getString("HomeTeam"));lsMatches.add(rs.getString("AwayTeam"));lsMatches.add(rs.getString("Result"));}} catch (SQLException e) {e.printStackTrace();}return lsMatches;}/*** 查看 某一天的 比赛结果  * @param date* @return 某一天的所有比赛结果*/public List<String> queryByDate(String date) {//使用一个 list泛型来装载 比赛结果List<String> lsMatchesOnDate = new ArrayList<String>();String sqlDate = "SELECT * FROM premiership WHERE Date ='" + date + "'";//创建一个ResultSet数据集  用来 获取查询到的结果集ResultSet rs = null;MySql ms = new MySql();//调用 MySql 类里的 查看数据库数据的方法rs = ms.queryMySql(sqlDate);try {//如果 ResultSet数据集 不为空 while (rs.next()) {//则 从ResultSet数据集 中取出 相应的 字段值 添加到 list泛型里lsMatchesOnDate.add(rs.getString("Date"));lsMatchesOnDate.add(rs.getString("HomeTeam"));lsMatchesOnDate.add(rs.getString("AwayTeam"));lsMatchesOnDate.add(rs.getString("Result"));}} catch (SQLException e) {System.out.println(e.getMessage());e.printStackTrace();}//最后 返回 取到的所有比赛数据结果return lsMatchesOnDate;}
}

DataStructure类 一个简单的数据结构 用于收集到数据的临时性存储

DataStructure 类/*** DataStructure 类 一个简单的数据结构* @author SoFlash - 博客园  http://www.cnblogs.com/longwu*/
public class DataStructure { //定义数据字段public String homeTeam;public String awayTeam;public String date;public String result;
}

GroupMethod类 里面包含了regularGroup() 方法 用于匹配并获取 html的数据

GroupMethod 类import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*** GroupMethod 类 用于匹配和抓取 html页面的数据* @author SoFlash - 博客园  http://www.cnblogs.com/longwu*/
public class GroupMethod {// 传入2个字符串参数 一个是pattern(我们使用的正则) 另一个matcher是html源代码public String regularGroup(String pattern, String matcher) {Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);Matcher m = p.matcher(matcher);if (m.find()) { // 如果读到return m.group();// 返回捕获的数据} else {return ""; // 否则返回一个空字符串}}
}

MySql类 里面含有2个方法

  • datatoMySql() 方法 用于向数据库里插入数据
  • queryMySql() 方法 用于查看数据库里存储的数据
MySql 类import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;/*** MySql类用于实施MySql数据库操作* @author SoFlash - 博客园  http://www.cnblogs.com/longwu*/
public class MySql {// 定义MySql驱动,数据库地址,数据库用户名 密码, 执行语句和数据库连接public String driver = "com.mysql.jdbc.Driver";public String url = "jdbc:mysql://127.0.0.1:3306/htmldatacollection";public String user = "root";public String password = "root";public Statement stmt = null;public Connection conn = null;/*** 创建一个插入数据的方法  executeUpdate()* @param insertSQl*/public void datatoMySql(String insertSQl) {try {try {Class.forName(driver).newInstance();} catch (Exception e) {System.out.println("无法找到驱动器");e.printStackTrace();}// 创建连接conn = DriverManager.getConnection(url, user, password);// 创建一个 Statement 对象来将 SQL 语句发送到数据库stmt = conn.createStatement();// 执行SQL 插入语句stmt.executeUpdate(insertSQl);// 执行完 停止执行语句stmt.close();// 执行完关闭数据库连接conn.close();} catch (Exception e) {System.out.println(e.getMessage());e.printStackTrace();}}/*** 创建一个用于select查看数据的方法 executeQuery();* @param strSelect* @return ResultSet*/public ResultSet queryMySql(String strSelect) {// 创建一个数据集 用于获取查询到的行数据ResultSet rs = null;try {Class.forName(driver).newInstance();} catch (Exception e) {System.out.println("无法找到驱动器!");e.printStackTrace();}try {// 创建连接conn = DriverManager.getConnection(url, user, password);// 创建一个 Statement 对象来将 SQL 语句发送到数据库stmt = conn.createStatement();// 执行查询语句   获取ResultSet对象rs = stmt.executeQuery(strSelect);} catch (SQLException e) {System.out.println(e.getMessage());e.printStackTrace();}//返回结果集return rs;}
}

Main 主函数 用于数据输出

Main 主函数import java.util.List;
import java.util.Scanner;
import java.util.Vector;
/*** Main 主函数 用于数据的输出* @author SoFlash - 博客园  http://www.cnblogs.com/longwu*/
public class Main {public static void main(String[] args) {DataCollectionAndStorage dcs = new DataCollectionAndStorage();DataQuery dQuery = new DataQuery();while (true) {System.out.println("清空数据库-请按1");System.out.println("收集英超比赛数据-请按2");System.out.println("查看英超所有球队-请按3");System.out.println("查看具体球队比赛结果-请按4");System.out.println("查看某一天的比赛-请按5");// Scanner 文本扫描器 用于读取 用户的输入 Scanner sc = new Scanner(System.in);int intInput = sc.nextInt();if (intInput == 1) {dQuery.initialDataBase();System.out.println("---------------------------------------------");} else if (intInput == 2) {dcs.dataCollectAndStore();System.out.println("---------------------------------------------");} else if (intInput == 3) {//获取 查询到的所有球队名称Vector<String> vecAllTeams = dQuery.getAllTeams();if (vecAllTeams.size() != 0) {System.out.println("参加过比赛的球队如下:");System.out.print("-----------------------------------------------");System.out.print("-----------------------------------------------\r\n");for (int i = 0; i < vecAllTeams.size(); i++) {if (i % 7 == 0 && i != 0) {System.out.println("\r\n");}System.out.print(vecAllTeams.get(i) + "\t");}} elseSystem.out.print("数据库目前没有数据,请按2收集数据!");System.out.print("\r\n---------------------------------------------");System.out.println("-----------------------------------------------\r\n");} else if (intInput == 4) {System.out.println("请输入你要查看的球队");Scanner scLeague = new Scanner(System.in);String strLeague = scLeague.next();//获取 具体球队的比赛结果Vector<String> lsResult = dQuery.querySpecifiedTeam(strLeague);if (lsResult.size() != 0) {System.out.println("日期\t\t\t主队\t\t客队\t\t比分");for (int i = 0; i < lsResult.size(); i++) {if (i % 4 == 0 && i != 0)System.out.println();System.out.print(lsResult.get(i) + "\t\t");}} elseSystem.out.println("没有相关球队的记录或数据库没有数据!");System.out.println("\r\n---------------------------------------------------");} else if (intInput == 5) {System.out.println("请输入你要查看的比赛日期  例子格式[14.01.2012]");Scanner scDate = new Scanner(System.in);String strDate = scDate.next();//获取具体日期下的 所有比赛List<String> lsResulOnDate = dQuery.queryByDate(strDate);if (lsResulOnDate.size() != 0) {System.out.println("日期\t\t\t主队\t\t客队\t\t比分");for (int i = 0; i < lsResulOnDate.size(); i++) {if (i % 4 == 0 && i != 0)System.out.println();System.out.print(lsResulOnDate.get(i) + "\t\t");}} elseSystem.out.println("该天没有比赛 或 数据库没有数据!");System.out.println("\r\n---------------------------------------------------");}}}
}

 

运行程序

输入1 清空数据

输入2 开始收集数据 并存入数据库 - 初始阶段

开始收集数据 并存入数据库  - 结束阶段

输入3 查看所有参与过比赛的球队

输入4  再输入要查看的具体球队 这里查看的是 Swansea

输入5  再输入查看具体的日期 这里是 02.01.2012

输入1 我们测试下清空数据的效果 这里显示清空成功

输入3 查看下是否 真正在数据库中成功清空数据   结果显示 数据库目前没有数据

这样,我们的数据查询功能也做好了

原文地址:http://www.cnblogs.com/longwu/archive/2012/01/21/2328395.html

转载于:https://www.cnblogs.com/dekevin/p/3574806.html

相关文章:

loadrunner 调用java_LoadRunner调用Java程序—性能测试

为了充分利用LoadRunner的场景控制和分析器&#xff0c;帮助我们更好地控制脚本加载过程&#xff0c;从而展现更直观有效的场景分析图表。本次将重点讨论LoadRunner如何调用Java测试代码&#xff0c;完成压力测试。通常我们在执行一些Server的压力测试的时候&#xff0c;总会不…

《The Art of Readable Code》 读书笔记 01

放假前在学校图书馆借了一本新书《The Art of Readable Code》&#xff0c;寒假回来看看&#xff0c;写写其中的Key Idea 、summary和一些读书笔记。 Preface 前言部分主要概况讲了本书的核心思想——Code shoule be easy to understand。接着探讨什么是好代码&#xff0c;是内…

吴裕雄 10-MySQL插入数据

语法以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法&#xff1a;INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );如果数据是字符型&#xff0c;必须使用单引号或者双引号&#xff0c;如&#xff1a;"value"。 通…

编译内核指定模块,筛选当前模块依赖的组件

关于内核模块编译的过程中&#xff0c;往往我们仅仅需要其中一个小的模块&#xff0c;但是却因为内核源码的庞杂而止步与模块依赖的筛选过程中。 为了更加便捷得对内核各个模块进行管理&#xff0c;这里提供一个小脚本来进行指定模块相关得模块留存&#xff0c;不相关的模块代码…

计算机启动和操作系统加载小话

整个启动和加载过程可分为若干步骤&#xff0c;或者称为若干个状态&#xff0c;或者快照&#xff0c;下面的每一段都是描述一个快照。&#xff08;类似自动状态机&#xff09; 1、电源稳定&#xff08;POWER GOOD&#xff09; 按下启动键后&#xff0c;电源首先启动。为了保证安…

java清空栈_java - 如何使用Intent.FLAG_ACTIVITY_CLEAR_TOP清除活动堆栈?

java - 如何使用Intent.FLAG_ACTIVITY_CLEAR_TOP清除活动堆栈&#xff1f;我已经阅读了几篇关于使用它的帖子&#xff0c;但必须遗漏一些因为它不适合我。 我的活动A在清单中有launchmode “singleTop”。 它启动活动B&#xff0c;启动模式“singleInstance”。 活动B打开浏览器…

「学习笔记-Linux」学习Shell Script

学习Shell Script Table of Contents 1 什么是Shell Scipt 1.1 程序书写1.2 程序执行2 简单Shell练习 2.1 例1 接收用户输入2.2 例2 按日期建立相似名字的文件3 判断式 3.1 测试文件是否存在3.2 test常用选项 3.2.1 文件类型3.2.2 权限3.2.3 文件新旧比较3.2.4 整数&#xff0c…

django admin组件

admin实例 from django.contrib import admin from app01 import models from django.utils.safestring import mark_safe # Register your models here. class UserInfoConfig(admin.ModelAdmin):# 自定义显示的东西def xxx(self):return mark_safe(<a href>xx</a>…

C语言网络编程:close或者shutdown断开通信连接

文章目录前言close函数介绍shutdown函数介绍前言 这里在主要通过实例进行描述close函数在网络编程中的使用 TCP编程模型中客户端或者服务器只要主动通过close发起断开连接的请求&#xff0c;则通信连接可以中断。 可以通过在主进程中抓取通信端的断开信号&#xff0c;比如SIGI…

Await, and UI, and deadlocks! Oh my!

It’s been awesome seeing the level of interest developers have had for the Async CTP and how much usage it’s getting. Of course, with any new technology there are bound to be some hiccups. One issue I’ve seen arise now multiple times is developers acc…

传智播客java基础的习题_传智播客java基础班(集合与IO)阶段测试题

本帖最后由 zhaodecang 于 2016-6-8 19:38 编辑单选题&#xff1a;(每道题目2分)1. ArrayList类的底层数据结构是( )a) 数组结构b) 链表结构 c) 哈希表结构 d) 红黑树结构2. LinkedList类的特点是( )a) 查询快b) 增删快c) 元素不重复 d) 元素自然排序3. Vector类的特点…

$@ 与 $* 差在哪?

$ 与 $* 差在哪&#xff1f; 要说 $ 与 $* 之前&#xff0c;需得先从 shell script 的 positional parameter 谈起...我们都已经知道变量(variable)是如何定义及替换的&#xff0c;这个不用再多讲了。但是&#xff0c;我们还需要知道有些变量是 shell 内定的&#xff0c;且其名…

[源码和文档分享]基于Netty和WebSocket的Web聊天室

一、背景 伴随着Internet的发展与宽带技术的普及&#xff0c;人们可以通过Internet交换动态数据&#xff0c;展示新产品&#xff0c;与人进行沟通并进行电子商务贸易。作为构成网站的重要组成部分&#xff0c;留言管理系统为人们的交流提供了一个崭新的平台。同时&#xff0c;聊…

t-tcpdump

文章目录写入和读取数据包抓取数据包抓取指定网卡流量指定数据的输出格式数据包抓取的方向输出信息的详细程度的可控选项抓取指定协议的数据包表达式介绍逻辑连接符的使用type的确定写入和读取数据包 在工作或者生活中的网络故障排除时最有力的方式就是抓包分析网络状况&#…

java jdk 8u111_8u111-jdk-alpine在java开发中的NullPointerException错误解决方案

问题描述在部署一个验证码服务的容器服务时遇到了一个空指针错误&#xff0c;错误代码为&#xff1a;java.lang.NullPointerExceptionat sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguratio…

sprintf函数做什么用?

sprintf函数原型为 int sprintf(char *str, const char *format, ...)。作用是格式化字符串&#xff0c;具体功能如下所示&#xff1a; &#xff08;1&#xff09;将数字变量转换为字符串。 &#xff08;2&#xff09;得到整型变量的16进制和8进制字符串。 &#xff08;3&#…

Yii学习笔记【3】

加载控制器及其方法&#xff1a; 根据route信息&#xff0c;获得当前控制器| 初始化当前控制器&#xff0c;CController::init()&#xff0c;默认为空| 执行当前控制器&#xff0c;CController::run()||----> 创建action&#xff0c;为空则默认为index|得到CInlineAction的实…

验证码相似问题

产生随机验证码时&#xff0c;类似数字1和小写字母l经常容易让人混淆分不清楚&#xff0c; 因此&#xff0c;产生随机验证码时应避免此情况 1&#xff08;一&#xff09;、l&#xff08;哎哦&#xff09;、I &#xff08;哎&#xff09;中三个任意两个或者全部不可同时存在 0&a…

C语言网络编程:accept函数详解

文章目录前言函数描述代码实例如何得到客户端的IP 和 端口号前言 当使用tcp服务器使用socket创建通信文件描述符&#xff0c;bind绑定了文件描述符&#xff0c;服务器ip和端口号&#xff0c;listen将服务器端的主动描述符转为被动描述符进行监听之后&#xff0c;接口accept通过…

java 声明静态类_java静态类声明--java类可以声明为static吗

为了理解static关键字在类声明中的使用&#xff0c;首先我们需要了解类声明。有两种类&#xff0c;一种是top-level class&#xff1b;一种是inner class。Top-level classestop-level class可以被声明为包成员&#xff0c;每一个top-level类对应于一个文件名与类名相同的java文…

单元测试资料汇总

从安装到配置 首先到官网http://www.nunit.org/下载如下图的资料&#xff0c;安装NUnit-2.6.1.msi包。 然后挂在VS2010外部工具这个地方来使用&#xff0c;工具—>外部工具—>添加—>标题&#xff1a;Nunit—>命令&#xff1a;安装路径—>确定。 然后打开Nunit&…

rhel5+nis+autofs+nfs

创建NIS服务器用户&#xff0c;用于客户端登陆 NIS服务器相关包&#xff1a;ypserv、ypbind(在RHEL5中默认已安装)、yp-tools(在RHEL5中默认已安装)。 运行nisdomainname test.com并把加入到如下位置 设置NIS服务器的域名 在NIS环境中将以NIS服务器上的所有用户用于NIS环境中所…

Beta冲刺 (1/7)

Part.1 开篇 队名&#xff1a;彳艮彳亍团队 组长博客&#xff1a;戳我进入 作业博客&#xff1a;班级博客本次作业的链接 Part.2 成员汇报 组员1&#xff08;组长&#xff09;柯奇豪 过去两天完成了哪些任务 熟悉并编写小程序的自定义控件展示GitHub当日代码/文档签入记录接下来…

C语言网络编程:listen函数详解

文章目录前言函数描述代码实例TCP服务器为什么调用listen前言 根据TCP编程模型中我们可以看到之前的socket和bind接口是tcp服务器在为接收客户端的链接做准备&#xff0c;保证tcp的面向字节流&#xff0c;面向连接的可靠通信服务正常进行。接下来的listen端口则为我们进行三次…

MVC页面加载速度优化小记

前言&#xff1a;最近做一个地图展示页面&#xff0c;业务初期没什么问题&#xff0c;运行一阵后报错&#xff1a; Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLeng…

java生成函数excel_java实现在excel中创建及读取公式

操作excel表格用公式来处理数据时&#xff0c;可通过创建公式来运算数据&#xff0c;或通过读取公式来获取数据信息来源。这里使用了java类库(Free Spire.XLS for Java 免费版)获取文件包后&#xff0c;解压&#xff0c;将lib文件夹下的jar文件导入Java程序。如图&#xff1a;(…

实战:使用TCP/IP筛选保护服务器安全

使用TCP/IP筛选保护服务器安全 对于部署在Internet的服务器&#xff0c;安全是必须要考虑的事情。为了降低服务器受***的危险&#xff0c;停止不必要的服务或在本地连接的TCP/IP属性中只打开必要的端口。 如图2-127所示&#xff0c;实验环境为Server的IP地址192.168.1.200&…

python中的协程(二)

协程 1、协程&#xff1a; 单线程实现并发 在应用程序里控制多个任务的切换保存状态 优点&#xff1a; 应用程序级别速度要远远高于操作系统的切换 缺点&#xff1a; 多个任务一旦有一个阻塞没有切&#xff0c;整个线程都阻塞在原地&#xff0c;该线程内的其他的任务都不能执行…

C语言网络编程:bind函数详解

文章目录函数功能函数头文件函数使用函数参数函数举例为什么需要bind函数服务器如何知道客户端的ip和端口号htons函数htons兄弟函数htonl,ntohs,ntohl为什么要进行端口的大小端序的转换inet_addr函数函数功能 bind API能够将套接字文件描述符、端口号和ip绑定到一起 注意&…

java flex 图片上传_flex上传图片到java服务器

今天弄flex上传图片到java&#xff0c;现在弄成功&#xff0c;中间也经常一点小波折&#xff0c;现记录一下。重点在java侧的实现。flex侧&#xff1a;文件上载到在url参数中传递的URL。该URL必须是配置为接受上载的服务器脚本。Flash Player使用HTTP POST方法上载文件。处理上…