本文记录我用Python登录教务系统查询成绩的过程。手动输入验证码,简单获取成绩页面。后续将可能更新自动识别验证码登录查询
前期准备
本爬虫用到了Python的Requests库 和BeautifulSoup库 参考文章:从零开始写Python爬虫 --- 爬虫实践:登录正方教务系统
页面分析
登录前
打开chrome的开发者工具,提交一次表单
我们可以分析出请求的Headers,以及Post的表单 请求的Headers整个复制就好,因此我们需要解决的问题就在Post的表单这里。
Post表单
可以看到上图中,需要注意的项有:__VIEWSTATE、txtUserName、TextBox2、txtSecretCode、RadioButtonList1
其中
txtUserName:用户名
TextBox2:密码
txtSecretCode:验证码
RadioButtonList1:三个单选项,我们选学生
__VIEWSTATE
关于RadioButtonList1,我们只要点view source
就可以看到
__VIEWSTATE的解决
而__VIEWSTATE通过页面分析,我们知道,其实就是图中input元素的value值
因此我们只需获取到登录页面,通过BeautifulSoup分析出这个值即可
验证码的解决
对于教务的验证码,我们可以用机器识别,也可以手动输入,在这里我们采用手动输入验证码的方式。 在chrome开发者工具中可以看到,CheckCode.aspx就是验证码,它在default2.aspx之后访问,而每次访问CheckCode.aspx,验证码都会改变,也就是说以最后一次访问的为准。因此我们可以先访问default2.aspx,分析页面获取到viewstate,再访问CheckCode.aspx来获取验证码 而验证码的链接就是http://jw.******.com/(m4kwrs3n51rwlebcum0adrq5)/CheckCode.aspx
登录后
再次查看chrome开发者工具,可知登录后跳转到xs_main.aspx?xh=账号
页面
分析页面元素,可以知道成绩查询的链接:
xscjcx.aspx?xh=账号&xm=名字&gnmkdm=N121605
(不同学校的可能不同,需要你自己分析)
我们再进入成绩查询的页面(在这里我们要再次记录请求的Headers)
我想通过历年成绩来查询,这样可以查询所有的成绩,也不用选择学年学期
于是再再再度分析页面
可以看出这次是提交表单,于是我们打开chrome开发者工具,然后点击
历年成绩
,看看它提交了什么东西
又是__VIEWSTATE,这次学聪明了,一看就知道在页面元素里面,不过一定是在
提交前的页面 ,所以我们要回到成绩查询的页面再分析,用chrome的元素搜索一下viewstate,这一长串的就是我们想要的东西
至此,分析结束,一切就绪
页面分析总结
我们要查询成绩,总共需要以下步骤:
获取登录界面的headers
获取__VIEWSTATE
获取验证码
Post 表单登录
获取成绩查询Headers
获取成绩查询链接
获取__VIEWSTATE
Post表单提交
获得成绩页面
代码的实现
import requests
import bs4
from bs4 import BeautifulSoup
#获取请求头部
#可以通过chrome浏览器查看
#此函数用于把复制下来的Headers分成字典
def getHeaders(raw_head):
headers={}
for raw in raw_head.split('\n'):
headerKey,headerValue = raw.split(':',1)
headers[headerKey] = headerValue
return headers
#登录Header
login_head='''Host:xsweb.scuteo.com
Connection:keep-alive
Content-Length:178
Cache-Control:max-age=0
Origin:http://xsweb.scuteo.com
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36
Content-Type:application/x-www-form-urlencoded
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer:http://xsweb.scuteo.com/(5mn1wwnfzv1qepq1z5pnpgak)/default2.aspx
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6'''
#成绩查询请求头部
mark_head='''Host:xsweb.scuteo.com
Connection:keep-alive
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer:http://xsweb.scuteo.com/(5mn1wwnfzv1qepq1z5pnpgak)/xs_main.aspx?xh=201630021407
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6'''
#构造session
s=requests.session()
#请求url
url='http://xsweb.scuteo.com/(5mn1wwnfzv1qepq1z5pnpgak)/'
#登录页面
#获取登录headers
headers=getHeaders(login_head)
#构造登录Post表单
account='账号'
password='密码'
formtable={
'txtUserName':'',
'TextBox2':'',
'txtSecretCode':'',
'__VIEWSTATE':'',
'RadioButtonList1':'%D1%A7%C9%FA',
'Button1':'',
'lbLanguage':'',
'hidPdrs':'',
'hidsc':''
}
formtable['txtUserName']=account
formtable['TextBox2']=password
#获取viewstate
#获取登录界面
login_page=s.get(url+'default2.aspx')
soup=BeautifulSoup(login_page.text,'lxml')
__VIEWSTATE = soup.find('input',attrs={'name':'__VIEWSTATE'}).get('value')
#将Viewstate存入登录Post表单
formtable['__VIEWSTATE']=__VIEWSTATE
#获取验证码
pic = requests.get(url+'CheckCode.aspx').content
with open('ver_pic.png','wb') as f:
f.write(pic)
vercode=input('请输入验证码:')
formtable['txtSecretCode']=vercode
#Post表单,登录
res = s.post(url+'/default2.aspx',formtable,headers=headers)
print(res)
#主页面
#获取成绩查询链接
page=s.get(url+'/xs_main.aspx?xh='+account)
soup2=BeautifulSoup(page.text,'lxml')
markurl = soup2.find('a',attrs={'onclick':"GetMc('成绩查询');"}).get('href')
#成绩查询界面
#获取成绩查询Headers
headers=getHeaders(mark_head)
#Post表单
formtable={
'__EVENTTARGET':'',
'__EVENTARGUMENT':'',
'__VIEWSTATE':'',
'hidLanguage':'',
'ddlXN':'',
'ddlXQ':'',
'ddl_kcxz':'',
'btn_zcj':'%C0%FA%C4%EA%B3%C9%BC%A8'
}
#获取__VIEWSTATE
markpage = s.get(url+markurl,headers=headers)
soup=BeautifulSoup(markpage.text,'lxml')
__VIEWSTATE = soup.find('input',attrs={'name':'__VIEWSTATE'}).get('value')
formtable['__VIEWSTATE']=__VIEWSTATE
#提交表单,获取成绩查询界面
markpage=s.post(url+markurl,formtable,headers=headers)
print(markpage.text) #该页面包含了成绩
实际效果
在桌面运行
提示输入验证码,验证码会自动保存到桌面
输入后若顺利就能够看到成绩的页面了
我们还可以进一步通过BeautifulSoup筛选出成绩,美化我们的查询结果。
美化结果显示
这里我用BeautifulSoup进行节点的筛选,将成绩表格数据存入一个二维数组,再输出。 我单独写了一个table2List.py
文件,和源文件同一个目录
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 文件名:table2List.py
'转换成二维数组'
import bs4
from bs4 import BeautifulSoup
def tableToList(document):
document=str(document)
soup = BeautifulSoup(document,'lxml')
#得到table的每行每项,存到items中
lines=soup.table.find_all('tr')
items=[]
for line in lines:
lineList=[]
for item in line.find_all('td'):
lineList.append(item.string)
items.append(lineList)
return items
最后只需要在原来的文件引入这段代码 from table2List import tableToList
然后在源代码加上这段代码
soup3=BeautifulSoup(markpage.text,'lxml')
marktable = str(soup3.find_all(id="Datagrid1")[0])
marklist = tableToList(marktable)
for line in marklist:
for column in [3,7,8]: #这里的数字表示你想显示的列,不同教务不同
print("%-20s" % line[column] ,end='')
print("")
这样能得到相对整洁的输出,当然我们还可以用prettytable库
实现比较好看的表格输出,为了不暴露成绩,还是只截一半的图好了哈哈
你可能感兴趣的:(Python爬虫实战:登录教务系统查成绩)
基于YOLOv5、YOLOv8和YOLOv10的机场安检行李检测:深度学习应用与实现
2025年数学建模美赛
YOLO 深度学习 人工智能 目标跟踪 目标检测
引言随着全球航空运输业的持续增长,机场的安全性变得越来越重要。机场安检作为航空安全的重要组成部分,主要负责对乘客和行李进行检查,防止危险物品进入机场或飞行器。传统的安检方式多依赖人工检查,效率低下且容易出错。因此,基于深度学习的自动化行李检测系统应运而生,通过计算机视觉技术,自动识别和分类行李中的物品,大大提高了安检的效率与准确性。YOLO(YouOnlyLookOnce)系列算法,由于其高效的目
WPS不登录无法使用基本功能的解决方案
愚公移山填海
经验分享
前言WPS不登录无法使用基本功能的原因通常是为了同步数据、提供更多高级功能或满足软件授权要求。然而,一些用户可能出于隐私或便捷性的考虑,不愿意登录账号。在这种情况下,WPS可能会限制未登录用户的使用权限,导致工具栏变灰,无法使用基本功能。解决方法1.使用配置工具进行重置修复打开WPS配置工具,进入高级设置界面。选择“重置修复”选项,然后点击“重置工具栏”。完成修复后,重启WPS软件以确保设置
linux系统的目录结构
Petrus_shuai
linux linux系统目录结构
一.目录结构详述linux系统的目录结构最顶端是“/”,一切目录从根开始。我们可以通过tree命令得到根(/)下的目录结构。[root@linux01~]#tree-L1//├──bin->usr/binusr/libusr/lib64├──media├──mnt实际都是内存中的信息├──rootusr/sbinrc.d/init.d说明:/etc/init.d等价于/etc/rc.d/init.
HarmonyOS 开发实践——基于设置应用的应用权限、通知设置跳转
六号嘉宾
鸿蒙开发 移动开发 HarmonyOS harmonyos 架构 ui 鸿蒙 鸿蒙系统 移动开发 鸿蒙开发
往期学习笔录:鸿蒙(HarmonyOS)北向开发知识点记录~鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~鸿蒙应用开发与鸿蒙系统开发哪个更有前景?嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~对于大前端开发来说,转鸿蒙开发究竟是福还是祸?鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?记录一场鸿蒙开发岗位面试经历~持续更新中……场景描述引导用户跳转到系统设置页进行权限,通知
PyInstaller 打包 exe 文件
cliffordl
python 综合 python 开发语言
PyInstaller是一个第三方库,它能够在Windows、Linux、MacOSX等操作系统下将Python源文件打包。通过对源文件打包,Python程序可以在没有安装Python的环境中运行,也可以作为一个独立文件方便传递和管理。PyInstaller支持Python2.7和Python3.3+。可以在Windows、MacOSX和Linux上使用,但是并不是跨平台的,而是说你要是希望打包成
Ruby Web开发框架的介绍及示例代码
YurwRuby
ruby 前端 开发语言
Ruby是一种简洁而强大的编程语言,广泛用于Web开发。在Ruby生态系统中,有几种实用型的Web开发框架,它们提供了丰富的功能和工具,帮助开发者快速构建可靠的Web应用程序。下面将介绍几种常用的RubyWeb开发框架,并提供相应的示例代码。RubyonRails(Rails)RubyonRails,简称Rails,是Ruby最知名的Web开发框架之一。Rails采用了MVC(Model-View
OpenCV: 深入理解OpenCV中CV_WRAP_AS宏及其作用
湫兮之风
opencv opencv 人工智能 计算机视觉
在OpenCV中,CV_WRAP_AS是一个宏,主要用于为C++函数或运算符定义别名,以便在生成语言绑定时使用。这对于在不同的编程语言(如Python)中使用OpenCV库时提供更友好的接口非常有用。尽管它在C++代码中不会改变函数的行为,但它在OpenCV的语言绑定系统中起到了重要作用,特别是当OpenCV要为多个语言(如Python)提供接口时。1.CV_WRAP_AS宏的基本用途CV_WRA
Ruby转Go语言:实现高效后端开发
BugTO
ruby golang 前端 后端
在现代软件开发中,选择合适的编程语言对于构建高效的后端系统至关重要。Ruby和Go语言都是备受开发者青睐的语言之一。然而,随着项目的发展和规模的增长,将Ruby代码迁移到Go语言成为了一个常见的需求。本文将探讨从Ruby迁移到Go语言的过程,并提供一些实用的源代码示例。了解Go语言Go语言是由Google开发的一种静态类型、编译型语言。它具有简洁、高效和并发性强的特点,适合构建高性能的后端系统。在
Swift语言的函数实现
2501_90183952
包罗万象 golang 开发语言 后端
Swift语言函数实现详解引言Swift是一种强类型、泛型编程的现代编程语言,广泛应用于iOS和macOS开发。函数是Swift编程中的基本构建块之一,通过函数可以将代码进行模块化,实现重用性和可读性。本篇文章将系统地介绍Swift中的函数,包括其定义、参数、返回值、闭包和高阶函数等,实现一些实用的示例,帮助读者更好地理解和掌握Swift的函数特性。一、函数的基本概念函数是执行特定任务的一段代码,
R语言的面向对象编程
2501_90183952
包罗万象 golang 开发语言 后端
R语言的面向对象编程在现代编程中,面向对象编程(Object-OrientedProgramming,OOP)是一种重要的编程范式,它通过将数据和操作数据的函数结合在一起,来提高代码的重用性和可维护性。在R语言中,面向对象编程并不是一开始就被引入的,但随着其发展,R逐渐支持了多种面向对象编程的系统,例如S3、S4以及R6等。本文将深入探讨R语言的面向对象编程,介绍其基本概念、特点以及在实际应用中的
redis哨兵手动切换主节点
数据库
说明由于线上redisMaster异常关机之后,重启redis哨兵模式三个节点都是slave,无法选择出主,一半都是固定在一台主节点上面执行操作如下手动进行master-slave切换登录192.168.1.11(master)主机的redis,执行shutdown命令关闭redis登录192.168.1.12(newmaster),执行如下命令:127.0.0.1:6379>slaveofnoo
深入了解 alias 命令
哎呦,帅小伙哦
开发工具 开发工具 alias
1、alias简介在Unix和类Unix系统中,alias(别名)是一个非常实用的命令,它允许用户为常用的命令设置简短的别名,从而减少重复输入复杂命令的时间,提高工作效率。尤其是在命令行操作中,alias能大幅度提升生产力。alias是Unix/Linux系统中的一个命令,允许用户为长命令、参数或复杂的命令序列创建别名。使用别名,用户可以通过输入简短的命令来执行预定义的操作,从而减少键盘输入的时间
成功解决error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No su
哎呦,帅小伙哦
安装
安装了python2.7,第一次执行时报错:errorwhileloadingsharedlibraries:libpython2.7.so.1.0:cannotopensharedobjectfile:Nosuchfileordirectory解决方法如下:1.编辑vi/etc/ld.so.conf如果是非root权限帐号登录,使用sudovi/etc/ld.so.conf添加上python2.
uniapp 开发 h5 授权微信登录(静默和非静默)
陈龙龙的陈龙龙
uni-app uni-app 微信 前端 html javascript
具体流程:进入h5➡️静默登录➡️请求登录接口➡️必要时候调起登录组件➡️点击按钮进行非静默登录➡️再次请求登录接口➡️获取到所有用户数据一、封装登录functionauthLogin:(callback)=>{constthat=this;//判断是否是在微信环境下运行if(utils.isWechat()){consttoken=window.localStorage.getItem('__t
微信小程序的登录流程-登录与静默登录
Allen_vv
微信小程序 小程序 微信
1.首先通过uni.getProvider获取到服务的供应商,调用API接口时需要指定service的参数为'weixin',在success的回调函数中对登录的流程做处理。2.通过调用uni.login获取到所需要的参数code,再通过uni.getUserProfile获取微信用户的基本信息,这个API需要指定一个参数为desc:这个参数是需要通知给微信服务器的,在success的回调函数中获
月之暗面今日发布k1.5多模态思考模型
百态老人
笔记 人工智能
月之暗面k1.5多模态思考模型的问世一、月之暗面k1.5多模态思考模型介绍2025年1月20日,月之暗面发布了k1.5多模态思考模型。这一模型在基准测试成绩方面展现出了非凡的性能,它实现了SOTA(state-of-the-art)级别的多模态推理和通用推理能力。多模态推理即模型能够对多种类型的数据(如文本、图像等)进行整合分析推理,通用推理能力则表明它可以广泛应用于多种任务场景进行有效的逻辑推理
JSONObject解析数据库Date类型报错问题
知忆_IS
数据库 java database postgresql
JSONObject解析数据库Date类型报错问题最近项目在写服务器后端查询空间数据的接口时,由于表结构不一致,直接写了一个通用函数用json储存数据库中查询的结果,然而今天前端查询一个表的时候无法查到相应的结果,查了一下代码发现爆了如下错误。报错:Causedby:java.lang.IllegalArgumentExceptionatjava.sql.Date.getHours原因是该表中存在
微信小程序通用静默获取openid和Session_key
TurboMT
小程序 php 小程序 php openid
小程序公共app.js代码//app.jsconstserver=require('./server/server.js');App({onLaunch:function(){//展示本地存储能力varlogs=wx.getStorageSync('logs')||[]logs.unshift(Date.now())wx.setStorageSync('logs',logs)//登录wx.chec
Node.js 安装配置完全指南
九情丶
node.js npm
Node.js安装配置完全指南-从入门到进阶概述本文将详细介绍如何在不同操作系统上安装和配置Node.js环境,包括基础安装、环境变量配置、版本管理等进阶内容,适合新手入门和老手参考。目录基础知识Windows安装指南macOS安装指南Linux安装指南环境变量配置版本管理工具常见问题解决进阶技巧基础知识Node.js版本说明LTS版本:长期支持版,建议生产环境使用Current版本:最新特性版,
在VS-Code配置Anaconda环境
m0_47563195
配置 python conda 编辑器
准备工作:一台没有安装Python,Anaconda及VS-Code的window10系统的电脑第一步:安装Anaconda由于在官网下载安装包比较慢,所以可以选择在清华大学开源软件镜像站进行下载(Indexof/anaconda/archive/|清华大学开源软件镜像站|TsinghuaOpenSourceMirror),具体安装过程及环境配置可参考文章Anaconda环境与Python的配置方
分布式资源管理和调度架构
johnny233
架构 架构
概述不管是计算任务还是数据存储都会涉及资源分配,资源包括但不限于硬件资源如CPU、内存、硬盘、网口。在单机环境中,资源管理相对简单;分布式环境中,资源分布相对分散,如何协调资源应对计算任务和数据存储就是亟待解决的问题。资源管理和调度是将计算任务分配到资源的过程,为了处理并发的计算任务,系统会通过集群的方式组织资源。集群中的资源可以按照服务器或者虚拟机的方式划分。注:本文是《分布式架构原理与实践》的
go语言安装与卸载
kankan231
golang golang linux
Linux下go语言的安装1在https://studygolang.com/dl上下载相应的系统版本下载Linux版本压缩包:wgethttps://studygolang.com/dl/golang/go1.17.linux-amd64.tar.gz2解压到/usr/local/gotar-C/usr/local-xzfgo1.17.linux-amd64.tar.gz3添加/usr/loca
【水果识别】SVM水果成熟检测系统(含苹果 香蕉 橙子)【含GUI Matlab源码 11052期】含报告
Matlab武动乾坤
Matlab图像处理(进阶版) matlab
Matlab武动乾坤博客之家博主简介:985研究生,Matlab领域科研开发者;座右铭:行百里者,半于九十。代码获取方式:CSDNMatlab武动乾坤—代码获取方式更多Matlab图像处理仿真内容点击①Matlab图像处理(进阶版)⛳️关注CSDNMatlab武动乾坤,更多资源等你来!!⛄一、SVM水果成熟检测系统SVM(支持向量机)水果成熟检测系统的原理和流程如下:原理:1SVM是一种监督学习算
Linux环境下删除Golang
HoUnix
golang
在Linux操作系统中,如果你决定删除Golang编程语言及其相关组件,需要执行一系列步骤。本文将为你提供详细的指导,并附上相应的源代码。卸载Golang首先,需要卸载已安装的Golang。在终端中执行以下命令:sudorm-rf/usr/local/go这将删除Golang的安装目录。移除环境变量下一步是从系统环境变量中移除与Golang相关的路径。打开终端,编辑~/.profile文件(或者是
GUI登录窗口3(程序备份)
Cc_zhH
GUI登录窗口 GUI开发 python 开发语言
importrandomfromtkinterimport*fromtkinterimportmessageboximportstring#注册属性defname_12():#账号输入框字符数量限制deflimit_entry11_length(*args):value=entry11_var.get()iflen(value)>25:entry11_var.set(value[:25])else
GUI登录界面
Cc_zhH
GUI开发 GUI登录窗口 python 开发语言
源代码部分importrandomfromtkinterimport*fromtkinterimportmessageboxdefname_12():button1.place_forget()entry1.place_forget()button2.place_forget()entry2.place_forget()button3.place_forget()entry3.place_forg
Transformer架构原理详解:编码器(Encoder)和解码器(Decoder)
AI大模型应用之禅
AI大模型与大数据 java python javascript kotlin golang 架构 人工智能
Transformer,编码器,解码器,自注意力机制,多头注意力,位置编码,序列到序列,自然语言处理1.背景介绍近年来,深度学习在自然语言处理(NLP)领域取得了显著进展,其中Transformer架构扮演着至关重要的角色。自2017年谷歌发布了基于Transformer的机器翻译模型BERT以来,Transformer及其变体在各种NLP任务上取得了突破性的成果,例如文本分类、问答系统、文本摘要
使用缓存保存验证码进行登录校验
记得开心一点嘛
JavaWeb后端开发技术栈 高并发处理 缓存 后端 redis springboot
在SpringBoot项目中使用Redis进行登录校验,一般的做法是将用户的登录状态(例如,JWT令牌或者用户信息)存储在Redis中,并在后续请求中进行校验。我们需要建立两个拦截器:RefreshTokenInterceptor+LoginInterceptor,它们分别拦截全部路径和拦截需要登录的路径:首先我们需要将这个token从前端进行获取,随后在Redis缓存中查询是否有该用户的toke
VIM 的 YCM 插件
哎呦,帅小伙哦
开发工具 vim 编辑器 linux
1、背景VIM是一个非常强大的文本编辑器,因其高效的操作方式和丰富的插件生态系统而备受开发者喜爱。对于开发人员来说,代码补全和智能提示是提升编程效率的重要工具,而YouCompleteMe(YCM)插件就是其中一款功能强大且广泛使用的补全插件。YouCompleteMe(简称YCM)是一个为VIM编辑器设计的代码补全插件。它能够提供智能代码补全、错误检查、实时提示等功能,支持多种编程语言,如C/C
MVC 架构学习笔记
disgare
架构 mvc 架构 学习
MVC架构学习笔记Service与DAO层方法命名规约业务错误是用返回值来处理还是抛异常来处理Service与DAO层方法命名规约CRUD是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中DataBase或者持久层的基本操作功能。对应这里的crud方法的命名,每个人有不同的实践。以下是阿里
linux系统服务器下jsp传参数乱码
3213213333332132
java jsp linux windows xml
在一次解决乱码问题中, 发现jsp在windows下用js原生的方法进行编码没有问题,但是到了linux下就有问题, escape,encodeURI,encodeURIComponent等都解决不了问题
但是我想了下既然原生的方法不行,我用el标签的方式对中文参数进行加密解密总该可以吧。于是用了java的java.net.URLDecoder,结果还是乱码,最后在绝望之际,用了下面的方法解决了
Spring 注解区别以及应用
BlueSkator
spring
1. @Autowired
@Autowired是根据类型进行自动装配的。如果当Spring上下文中存在不止一个UserDao类型的bean,或者不存在UserDao类型的bean,会抛出 BeanCreationException异常,这时可以通过在该属性上再加一个@Qualifier注解来声明唯一的id解决问题。
2. @Qualifier
当spring中存在至少一个匹
printf和sprintf的应用
dcj3sjt126com
PHP sprintf printf
<?php
printf('b: %b <br>c: %c <br>d: %d <bf>f: %f', 80,80, 80, 80);
echo '<br />';
printf('%0.2f <br>%+d <br>%0.2f <br>', 8, 8, 1235.456);
printf('th
config.getInitParameter
171815164
parameter
web.xml
<servlet>
<servlet-name>servlet1</servlet-name>
<jsp-file>/index.jsp</jsp-file>
<init-param>
<param-name>str</param-name>
Ant标签详解--基础操作
g21121
ant
Ant的一些核心概念:
build.xml:构建文件是以XML 文件来描述的,默认构建文件名为build.xml。 project:每个构建文
[简单]代码片段_数据合并
53873039oycg
代码
合并规则:删除家长phone为空的记录,若一个家长对应多个孩子,保留一条家长记录,家长id修改为phone,对应关系也要修改。
代码如下:
java 通信技术
云端月影
Java 远程通信技术
在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了,在这篇blog中我们将来
string与StringBuilder 性能差距到底有多大
aijuans
之前也看过一些对string与StringBuilder的性能分析,总感觉这个应该对整体性能不会产生多大的影响,所以就一直没有关注这块!
由于学程序初期最先接触的string拼接,所以就一直没改变过自己的习惯!
今天碰到 java.util.ConcurrentModificationException 异常
antonyup_2006
java 多线程 工作 IBM
今天改bug,其中有个实现是要对map进行循环,然后有删除操作,代码如下:
Iterator<ListItem> iter = ItemMap.keySet.iterator();
while(iter.hasNext()){
ListItem it = iter.next();
//...一些逻辑操作
ItemMap.remove(it);
}
结果运行报Con
PL/SQL的类型和JDBC操作数据库
百合不是茶
PL/SQL表 标量类型 游标 PL/SQL记录
PL/SQL的标量类型:
字符,数字,时间,布尔,%type五中类型的
--标量:数据库中预定义类型的变量
--定义一个变长字符串
v_ename varchar2(10);
--定义一个小数,范围 -9999.99~9999.99
v_sal number(6,2);
--定义一个小数并给一个初始值为5.4 :=是pl/sql的赋值号
Mockito:一个强大的用于 Java 开发的模拟测试框架实例
bijian1013
mockito 单元测试
Mockito框架:
Mockito是一个基于MIT协议的开源java测试框架。 Mockito区别于其他模拟框架的地方主要是允许开发者在没有建立“预期”时验证被测系统的行为。对于mock对象的一个评价是测试系统的测
精通Oracle10编程SQL(10)处理例外
bijian1013
oracle 数据库 plsql
/*
*处理例外
*/
--例外简介
--处理例外-传递例外
declare
v_ename emp.ename%TYPE;
begin
SELECT ename INTO v_ename FROM emp
where empno=&no;
dbms_output.put_line('雇员名:'||v_ename);
exceptio
【Java】Java执行远程机器上Linux命令
bit1129
linux命令
Java使用ethz通过ssh2执行远程机器Linux上命令,
封装定义Linux机器的环境信息
package com.tom;
import java.io.File;
public class Env {
private String hostaddr; //Linux机器的IP地址
private Integer po
java通信之Socket通信基础
白糖_
java socket 网络协议
正处于网络环境下的两个程序,它们之间通过一个交互的连接来实现数据通信。每一个连接的通信端叫做一个Socket。一个完整的Socket通信程序应该包含以下几个步骤:
①创建Socket;
②打开连接到Socket的输入输出流;
④按照一定的协议对Socket进行读写操作;
④关闭Socket。
Socket通信分两部分:服务器端和客户端。服务器端必须优先启动,然后等待soc
angular.bind
boyitech
AngularJS angular.bind AngularJS API bind
angular.bind 描述: 上下文,函数以及参数动态绑定,返回值为绑定之后的函数. 其中args是可选的动态参数,self在fn中使用this调用。 使用方法: angular.bind(se
java-13个坏人和13个好人站成一圈,数到7就从圈里面踢出一个来,要求把所有坏人都给踢出来,所有好人都留在圈里。请找出初始时坏人站的位置。
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
public class KickOutBadGuys {
/**
* 题目:13个坏人和13个好人站成一圈,数到7就从圈里面踢出一个来,要求把所有坏人都给踢出来,所有好人都留在圈里。请找出初始时坏人站的位置。
* Maybe you can find out
Redis.conf配置文件及相关项说明(自查备用)
Kai_Ge
redis
Redis.conf配置文件及相关项说明
# Redis configuration file example
# Note on units: when memory size is needed, it is possible to specifiy
# it in the usual form of 1k 5GB 4M and so forth:
#
[强人工智能]实现大规模拓扑分析是实现强人工智能的前奏
comsci
人工智能
真不好意思,各位朋友...博客再次更新...
节点数量太少,网络的分析和处理能力肯定不足,在面对机器人控制的需求方面,显得力不从心....
但是,节点数太多,对拓扑数据处理的要求又很高,设计目标也很高,实现起来难度颇大...
记录一些常用的函数
dai_lm
java
public static String convertInputStreamToString(InputStream is) {
StringBuilder result = new StringBuilder();
if (is != null)
try {
InputStreamReader inputReader = new InputStreamRead
Hadoop中小规模集群的并行计算缺陷
datamachine
mapreduce hadoop 并行计算
注:写这篇文章的初衷是因为Hadoop炒得有点太热,很多用户现有数据规模并不适用于Hadoop,但迫于扩容压力和去IOE(Hadoop的廉价扩展的确非常有吸引力)而尝试。尝试永远是件正确的事儿,但有时候不用太突进,可以调优或调需求,发挥现有系统的最大效用为上策。
-----------------------------------------------------------------
小学4年级英语单词背诵第二课
dcj3sjt126com
english word
egg 蛋
twenty 二十
any 任何
well 健康的,好
twelve 十二
farm 农场
every 每一个
back 向后,回
fast 快速的
whose 谁的
much 许多
flower 花
watch 手表
very 非常,很
sport 运动
Chinese 中国的
自己实践了github的webhooks, linux上面的权限需要注意
dcj3sjt126com
github webhook
环境, 阿里云服务器
1. 本地创建项目, push到github服务器上面
2. 生成www用户的密钥
sudo -u www ssh-keygen -t rsa -C "
[email protected] "
3. 将密钥添加到github帐号的SSH_KEYS里面
3. 用www用户执行克隆, 源使
Java冒泡排序
蕃薯耀
冒泡排序 Java冒泡排序 Java排序
冒泡排序
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年6月23日 10:40:14 星期二
http://fanshuyao.iteye.com/
Excle读取数据转换为实体List【基于apache-poi】
hanqunfeng
apache
1.依赖apache-poi
2.支持xls和xlsx
3.支持按属性名称绑定数据值
4.支持从指定行、列开始读取
5.支持同时读取多个sheet
6.具体使用方式参见org.cpframework.utils.excelreader.CP_ExcelReaderUtilTest.java
比如:
Str
3个处于草稿阶段的Javascript API介绍
jackyrong
JavaScript
原文:
http://www.sitepoint.com/3-new-javascript-apis-may-want-follow/?utm_source=html5weekly&utm_medium=email
本文中,介绍3个仍然处于草稿阶段,但应该值得关注的Javascript API.
1) Web Alarm API
&
6个创建Web应用程序的高效PHP框架
lampcy
Web 框架 PHP
以下是创建Web应用程序的PHP框架,有coder bay网站整理推荐:
1. CakePHP
CakePHP是一个PHP快速开发框架,它提供了一个用于开发、维护和部署应用程序的可扩展体系。CakePHP使用了众所周知的设计模式,如MVC和ORM,降低了开发成本,并减少了开发人员写代码的工作量。
2. CodeIgniter
CodeIgniter是一个非常小且功能强大的PHP框架,适合需
评"救市后中国股市新乱象泛起"谣言
nannan408
首先来看百度百家一位易姓作者的新闻:
三个多星期来股市持续暴跌,跌得投资者及上市公司都处于极度的恐慌和焦虑中,都要寻找自保及规避风险的方式。面对股市之危机,政府突然进入市场救市,希望以此来重建市场信心,以此来扭转股市持续暴跌的预期。而政府进入市场后,由于市场运作方式发生了巨大变化,投资者及上市公司为了自保及为了应对这种变化,中国股市新的乱象也自然产生。
首先,中国股市这两天
页面全屏遮罩的实现 方式
Rainbow702
html css 遮罩 mask
之前做了一个页面,在点击了某个按钮之后,要求页面出现一个全屏遮罩,一开始使用了position:absolute来实现的。当时因为画面大小是固定的,不可以resize的,所以,没有发现问题。
最近用了同样的做法做了一个遮罩,但是画面是可以进行resize的,所以就发现了一个问题,当画面被reisze到浏览器出现了滚动条的时候,就发现,用absolute 的做法是有问题的。后来改成fixed定位就
关于angularjs的点滴
tntxia
AngularJS
angular是一个新兴的JS框架,和以往的框架不同的事,Angularjs更注重于js的建模,管理,同时也提供大量的组件帮助用户组建商业化程序,是一种值得研究的JS框架。
Angularjs使我们可以使用MVC的模式来写JS。Angularjs现在由谷歌来维护。
这里我们来简单的探讨一下它的应用。
首先使用Angularjs我
Nutz--->>反复新建ioc容器的后果
xiaoxiao1992428
DAO mvc IOC nutz
问题:
public class DaoZ {
public static Dao dao() { // 每当需要使用dao的时候就取一次
Ioc ioc = new NutIoc(new JsonLoader("dao.js"));
return ioc.get(