如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里
寻找主流验证码提供使用公司与样例及其可能的破解价格
3 ------ 图像字符类型验证码
4 ------ 行为类型验证码
5 ------ 逻辑识别类型验证码
6 ------ 资料总结与价格汇总
简述:
普通字母数字干扰倾斜验证码
出现位置:
登录百度搜索时可能出现
图片样例:
出现前提:
网络异常(非人类访问可能性大)
简述:
普通字母数字颜色块干扰倾斜验证码
出现位置:
发布百度经验可能出现
图片样例:
出现前提:
简述:
扭曲中文拼音干扰验证码
出现位置:
贴吧发布帖子的时候可能出现
图片样例:
简述:
在较大的图片中的小部分随机区域出现倾斜数字字母验证码。
出现位置:
YY登录页面
图片样例:
简述:
扭曲中文数字干扰验证码
出现位置:
异地登录可能出现
图片样例:
简述:
字符紧凑扭曲验证码
出现位置:
异常流量访问可能出现
图片样例:
简述:
字符紧凑扭曲验证码
出现位置:
异常流量访问可能出现
图片样例:
简述:
需要鼠标拖动到最右边完成的验证码。
出现位置:
在淘宝登录页面出现
图片样例:
简述:
极验专职做验证码,需要通过滑轮完成拼图。
出现位置:极验官网
图片样例:
简述:
极验专职做验证码,按键点击再分析浏览记录和特征判别。类似谷歌第三代验证码
出现位置:极验官网
图片样例:
简述:
12306登录界面识别验证码。
出现位置:12306登录界面
图片样例:
简述:偶然见到,还没有具体来源。
出现位置:网络来源(未知)
图片样例:
简述:
来自落伍者网站依次在图片中点击提示的字符。
出现位置:落伍者网站登录时
图片样例:
简述:
来自腾讯安全验证时依次在图片中点击提示的字符。
出现位置:腾讯安全平台
图片样例:
简述:
某网站下订单时出现数字加中文逻辑处理验证码。
出现位置:网络来源(未知)
图片样例:
简述:扭曲的中文文字
出现位置:网络来源(未知)
图片样例:
简述:提示生活场景图片,由用户点击路标之类。
出现位置:谷歌异常访问时出现
图片样例:
搜集了验证码业内3大类型下的17个变种形式。
所有字符型,逻辑型验证码均可以通过打码平台进行破解
1、文档说明
2、内容概述
3. 字符类型验证码
3.1 百度搜索字符验证码
3.2 百度经验字符验证码
3.3 百度贴吧中文验证码
3.4 YY字符验证码
3.5 stream数字中文验证码
3.6 谷歌字符紧凑扭曲验证码
3.7 京东字符重叠验证码
4. 行为验证类型验证码
4.1 淘宝登录行为验证码
4.2 极验第二代行为验证码
4.3 极验第三代行为验证码
5. 逻辑识别验证码
5.1 12306逻辑识别验证码
5.2 外国网站逻辑识别验证码
5.3 落伍者点击提示验证码
5.4 腾讯安全验证点击提示验证码
5.5 逻辑数字汉字加减验证码
5.6 逻辑拼音验证码
5.7 谷歌路标识别验证码
6. 验证码搜集总结
如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里
1、node.js是由chrome浏览器,V8引擎,C++编写的JavaScript运行环境,node.js可以解析JS代码,而且没有浏览器安全级的限制,还提供很多系统级别的API。
2、简单介绍一下node.js后推荐给大家几个网站,大家可以从这几个网站上学习更多
https://nodejs.org/en/ Node.js的官方网站
https://stackoverflow.com/ 技术问答社区
3、安装node.js(这部分感觉没有什么好说的,因为就是下载安装的过程,不熟悉的同学去下面菜鸟教程这个网站参考一下就行)https://www.runoob.com/nodejs/nodejs-install-setup.html
4、node.js版本的常识:偶数位为稳定版本,奇数为非稳定版本
5.node.js基础-起一个web服务器
(1)首先在某个路径下面写一个server.js文件,文件内容如下:
(2)然后在该路径下面使用node运行server.js文件
(3)服务就运行起来了,那么打开浏览器,进入http://127.0.0.1:1337/里面就可以看到Hello World
(4)现在我们回过头去看看刚才那个server.js文件里写的都是什么东西
(5)现在我们将server.js文件中的res.end("Hello World\n")修改为res.end("Hello Node.js\n"),然后之前我们的服务还没有关掉,在命令行按下Ctrl+C停掉服务,再使用命令重新开启,然后进入到浏览器刷新http://127.0.0.1:1337/页面就出来结果了
(6)刚才在server.js文件中的写法都是链式写法,我们看nodejs官网提供的写法,就很清晰
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
1、初始node.js
如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里
一直不太懂前后端的交互,开始学习ajax,好像有些懂了,接下来的内容通过表单提交来了解前后端数据交互吧~
关于表单的基本知识:
表单中的三个内容:
action:数据提交的地址,默认是当前页面
method:数据提交的方式,默认是get方式
enctype:提交数据格式,默认是application/x-www-form-urlencoded
以下分两种提交方式进行:
(1)get方式:
前端页面:
后端php页面:
输入“aa"提交后:
使用get方式:
把数据名称和值通过”=“连接,如果又多个的话,会通过”&“进行连接,然后把数据放到url?后面传到指定页面;
url长度又限制,所以不要使用get方式传递过多的数据
(2)post方式:
前端页面:
后端php页面:
输入”li“提交后:
post理论上是无传输大小限制的,输入的内容也不会显示在浏览器输入栏中。
就暂时了解这么多了~继续加油!
如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里
1.总结
属性文法是在上下文无关文法的基础上为每个文法符号(终结符或非终结符)配备若干个相关的“值”(称为属性)。
属性代表与文法符号相关的信息,和变量一样,可以进行计算和传递。属性分为综合属性和继承属性。
综合属性用于“自下而上”传递信息,在语法树中,一个结点的综合属性的值,由其子结点的属性值确定。
继承属性用于“自上而下”传递信息,在语法树中,一个结点的继承属性由此结点的父结点和/或兄弟结点的某些属性确定。
属性计算的过程即是语义处理的过程,对于文法的每一个产生式配备一组属性的计算规则,则称为语义规则。
语义规则所描述的工作包括:属性计算、静态语义检查、符号表操作、代码生成等。
抽象语法树指从语法树中去掉对翻译不必要的信息,而获得更有效的源程序中间表示。
L-属性文法的自顶向下翻译,属性的计算次序受分析方法所限定的分析树结点建立次序的限制,分析树的结点是自左向右生成,如果属性信息是自左向右流动,那么就有可能在分析的同时完成属性计算。
S—属性文法的自下而上计算,S—属性文法,它只含有综合属性。综合属性可以在分析符号串的同时由自上而下的分析器来构造,分析器可以保存与栈中文法符号有关的综合属性值,每当进行归约时,新的属性值就由栈中正在归约的产生式右边符号的属性值来计算,可以通过扩充分析器中的栈来存放这些综合属性值。S-属性文法的翻译器通常可借助于LR分析器实现。
翻译模式是语法制导定义的一种便于翻译的书写形式。其中属性与文法符号相对应,语义规则或语义动作用花括号{ }括起来,可被插入到产生式右部的任何合适的位置上。这是一种语法分析和语义动作交错的表示法,他表达在按深度优先遍历分析树的过程中何时执行语义动作。翻译模式给出了使用语义规则进行计算的顺序。可看成是分析过程中翻译的注释。
2.感悟
这一章主要内容是SDD语法制导定义和SDT语法制导翻译方案,通过给CFG中的文法符号设置语义属性来表示语法成分对应的语义信息,而语义属性通过相关联的语义规则计算,在对语法分析的过程中进行翻译。
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里
还有4天就世界杯了,作为一个资深(伪)球迷,必须要实时关注世界杯相关新闻,了解各个球队动态,这样才能在一堆球迷中如(大)鱼(吹)得(特)水(吹),迎接大家仰慕的目光!
给大家分享一个快速了解相关信息的办法:刷论坛!我们来一起做个虎扑论坛的爬虫吧!
先来观察下网页,打开论坛首页,选择国际足球
然后往下拉,找到世界杯相关内容
这里就是我们的目标了,所有相关的新闻都会在这里显示,用F12打开“开发者工具”然后往下浏览看看数据包
注意箭头指向的那几个地方!
这就是刚才浏览的新闻所在的json包,来看看具体数据是什么
ok,标题、地址、发布时间包括来源都已经出现了!我们可以直接抓取json数据然后取出相关内容!
再进入具体新闻页面看看
所有的文本内容,都在
这个标签下的
标签内,我们可以用xpath直接取div下的所有文本内容!
这里就不一 一说明了,直接上代码,并录个小的GIF图片给大家看看效果
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
抓包获取虎扑论坛相关帖子内容,逐条显示!
#@author Q群542110741 # -*- coding:utf-8 -*- import requests from lxml import etree
header = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0', 'Host':'soccer.hupu.com', 'Referer':'https://soccer.hupu.com/'}
i = 0 while 1: #构建循环页面翻页 url = 'https://soccer.hupu.com/home/latest-news?league=世界杯&page=' i += 1 #获取json数据,一页20个 html = requests.get(url+str(i),headers=header).json()['result'] for info in html:
time_r = info['time']#发布时间 title = info['title']#标题 url_r = info['url']#新闻链接 origin = info['origin']#来源 print(title)
print('发布时间:',time_r,' '*5,'来自:',origin)
head = header
head['Host'] = 'voice.hupu.com'#更改header中Host参数 html_r = requests.get(url_r,headers=head)#获取新闻详情 html_r.encoding = 'utf-8'#编码格式指定 #获取div下的所有文本 datas = etree.HTML(html_r.text).xpath('//div[@class="artical-content-read"]')[0].xpath('string(.)').strip()
print('\n'+'内容:'+'\n'*2,datas,'\n') #可由用户手动退出循环 if input('任意键继续,“q”退出') in ['q', 'Q']:
exit()
如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里
一、WEB概述 (!!掌握web发展过程图、B/S和C/S架构的特点)
B/S: Browser-Server 浏览器服务器模型 WEBQQ 网页游戏
优点: 不需要下载客户端程序, 使用浏览器可以直接访问. 程序的升级操作是在服务器端进行的. 浏览器只需要刷新页面就可以看到升级后的效果
缺点: 浏览器具有一定的局限性, 页面的展示能力仍然是很差. 所有的页面数据都需要从服务器实时的获取, 所以对网速的依赖很高
C/S: Client-Server 客户端服务器模型 QQ LOL
优点: 客户端可以任意的设计, 页面的展示能力就可以很强. 由于大量的资源都已经保存在了客户端, 和服务器交互的仅仅是一些变化的数据, 所以对网速的依赖很低
缺点: 第一次使用时需要下载客户端程序, 一旦程序需要升级操作, 所有的客户端程序都需要升级. 在有些场景中是不能被接受的.
二、HTML
1.HTML是什么
超文本标记语言 最基础的网页语言 W3C
HTML不是一门编程语言 而是一门标记语言
HTML是用标记(标签/元素)来描述网页内容的
HTML是文档的一种
2.html的结构 (掌握)
<!DOCTYPE HTML>
<HTML>
<HEAD></HEAD>
<BODY></BODY>
</HTML>
<!DOCTYPE HTML>用来指定当前页面所遵循的html的版本
头部分用来存放html页面的基本属性信息 优先被加载
体部分用来存放页面数据,是可见的页面内容
<title></title>指定网页的标题
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />其中的charset的值用来指定浏览器用什么编码解析当前页面
3.html语法 (掌握)
html标签分为开始标签和结束标签,如果标签内没有修饰的内容, 开始标签和结束标签可以合并为一个自闭标签
如: <br/> <hr/>
标签通常都可以具有属性 属性与属性值用"="连接,属性的值可以用双引号、单引号引起来或者不用引号 一般会用双引号引起来
<!-- html的注释 -->
html中多个连续的空白字符(制表符,空格,换行)默认会合并为一个空格来显示
如果非要输入空格,可以用转义字符来替代
如果非要输入换行,可以用 <br/> 来替代
4.font标签 -- 用来指定文本的字体/大小/颜色 (了解)
size:指定字体大小 范围是 1~7 默认值为3
color:指定字体颜色
值可以指定为颜色名 如red
或 十六进制的颜色值 如#000000
或 rgb三原色值 如rgb(255,255,255)
face:指定字体 中文默认是宋体
5.标题标签 -- 指定特定样式字体的一组标签 (掌握)
<h1>一级标签</h1>
<h2>二级标签</h2>
<h3>三级标签</h3>
<h4>四级标签</h4>
<h5>五级标签</h5>
<h6>六级标签</h6>
属性:
align:指定文本的排列
left
center
right
justify
6.转义字符 (掌握)
< <
> >
" "
' '
空格
7.列表标签
(1)定义列表 (了解)
<dl> 定义一个定义列表
<dt> 定义定义列表中的标题
<dd> 定义定义列表中的项
(2)有序列表 (了解)
<ol> 定义一个有序列表
<li> 定义列表中的项
属性:
type:定义项目符号的类型
A a I i 1(默认)
start:定义项目符号的起始值
(3)无序列表 (掌握)
<ul> 定义一个无序列表
<li> 定义列表中的项
属性:
type:定义项目符号的类型
disc square circle
8.img标签 -- 图像标签 (!!掌握)
<img src="图片的路径" alt="图像的替代文本"/>
必选属性:
src:图片的路径
alt:图像的替代文本
可选属性:
width:宽度 px %
height:高度 px %
border:边框的宽度 px
9.map标签 (了解)
为图像绑定可点击区域的图像映射
<map name="" id="">
<area shape="circle" coords="640,410,64" href="#" />
</map>
属性:
shape: 指定区域的形状
coords: 指定区域的坐标
href: 点击区域后跳转资源的URL
10.超链接 -- <a> 锚 (!!掌握)
用于指向当前位置以外的资源
(1) 用于创建指向另外一个文档的超链接
(2) 用于在当前页面的不同位置之间进行跳转
重要属性:
href: 所指向资源的URL
name: 指定锚的名字
target: 指定浏览器打开目标URL的方式。
_blank 在新窗口中打开目标url
_self 在当前窗口中打开目标url
11.表格标签 -- <table> (!!!掌握)
<table> 定义一个HTML表格
<tr> 定义表格中的行
<td> 定义表格中的单元格
<th> 定义表格中的表头
table的重要属性:
border 边框宽度
cellspacing 单元格之间的空白
cellpadding 边框与单元格内容之间的距离
bgcolor 背景颜色
bordercolor 边框颜色
width 宽度
align 对齐方式
tr重要属性:
align 对齐方式
bgcolor 背景颜色
th/td重要属性:
align 对齐方式
bgcolor 背景颜色
width 宽度
height 高度
colspan 可横跨的列数
rowspan 可竖跨的行数
<caption> 定义表格的标题
<thead>
<tfoot>
<tbody>(可以出现多次).
三个标签要么都没有,要么就必须一起使用,并且出现的顺序必须是thead,tfoot,tbody
如果没有使用这三个标签, 那么<table>里面所有的内容都会隐含在一个隐藏的<tbody>标签内
12.框架标签 (了解)
<frameset>
<frame>
框架标签需要写在head和body的中间
<frameset>属性:
rows 定义框架集中行的数目和尺寸
cols 定义框架集中列的数目和尺寸
<frame>属性:
src 定义目标文档的URL
noresize 规定无法调整框架的大小
frameborder 是否显示框架周围的边框
name 框架的名字
target 打开目标URL的方式
_blank 在新窗口中打开目标url
_self 在当前窗口打开目标URL
_parent 在父窗口中打开目标URL
_top 打开时忽略所有框架在当前页面打开url
framename
<iframe>
创建包含另一个文档的行内框架
<iframe>标签永远不要自闭!! 可以在标签内部存放提示文本 如果浏览器不支持iframe 该文本会显示
属性:
src
width
height
13.表单 (!!!掌握)
(1)浏览器向服务器发送数据的方式, 有两种
a)利用超链接向服务器发送数据 -- 请求参数
在超链接的后面拼接上要发送的请求参数, 链接和请求参数之间用?分割, 参数名和参数值用 = 连接, 多个参数之间用 & 分割, 可以存在多个同名的参数
b)利用表单向服务器发送数据
利用HTML中的<form>标签以及一些表单项标签, 用户可以输入数据, 通过提交表单发送数据给服务器
(2)form
必须存在的属性:
action: 指定表单发送的目标URL地址
可选的属性:
method: 指定以何种方式发送表单
http协议指定了7种提交方式, 其中5种不用, 只用GET提交和POST提交
只有使用表单并且明确的指定提交方式为post时(也就是设置method="POST")才是POST提交,其他提交都是GET提交.
GET提交和POST提交的区别:
主要区别体现在数据传输方式的不相同
a)GET提交: 请求参数会赋在地址栏后进行传输
这种方式发送的数据量有限, 最大不超过1kb(4kb)
数据显示在地址栏, 安全性差
b)POST提交: 请求参数在底层流中传输
这种方式发送的数据量无限制
地址栏上看不到数据, 比较安全
14.表单中的项 (!!!掌握)
表单中可以有多个输入项,输入项必须有name属性才可以被提交,如果输入项没有name属性,则表单在提交时会忽略它
(1)<input> 输入框
重要属性:
type属性
文本框 text 输入的文本信息直接显示在框中
密码框 password 输入的文本以圆点或者星号的形式显示
单选框 radio 进行单项的选择 如性别选择 多个radio的name属性相同会被当作一组来使用 必须用value为选项指定提交的值
复选框 checkbox 进行多项选择,爱好的选择。 多个checkbox具有相同的name属性时会被当作一组来使用 必须用value为选项指定提交的值
隐藏字段 hidden 如果有一些信息,不希望用户看见,又希望表单能够提交,就可以用隐藏字段隐含在表单中
提交按钮 submit 实现表单提交操作的按钮 可以通过value属性指定按钮显示的文字
重置按钮 reset 重置表单到初始状态
按钮 button 普通按钮, 没有任何功能 需要配合JavaScript为按钮指定具体的行为。可以用value属性指定按钮显示的文字。
文件上传项 file 提供选择文件进行上传的功能。
图像 image 利用一张图片替代提交按钮的功能, 不常用
name属性
表单中可以有多个输入项,输入项必须有name属性才可以被提交,如果输入项没有name属性,则表单在提交时会忽略它. 另外name属性的值是可以重复的
value属性 可以给input输入框设置一个初始值
readonly属性
使当前输入项变为只读,不能修改,但是提交时仍会被提交
disabled
使当前输入项不可用,不能修改值,也不会被提交
size属性
指定当前输入框的宽度
checked属性
指定单选框/复选框被选中
(2)<textarea> 文本域
属性:
rows 指定文本域的行数(高度)
cols 指定文本域的列数(宽度)
readonly 只读
disabled 禁用
(3)<select> <option>
select 提供下拉选择功能
option 下拉选框中的选项 可以用value属性指定提交的值,如果不指定,将会提交标签内的文本
重要属性:
name: 下拉列表的名称
size: 设置下拉选项中可见选项的个数
disabled 禁用下拉选框
multiple 是否支持多选
(4)<fieldset><legend> (了解 可以不练习)
<fieldset> 对表单中的表单项进行分组
<legend> 为分组设置标题
15.其他标签 (了解 可以不练习)
<marquee>
属性:
scrollAmount 设置文字滚动速度 默认值是6
direction 滚动方向 left right down up
behavior 滚动行为 scroll alternate slide
<pre>
可以将文本内容按照代码区的样子显示在页面上
<b> 加粗
<i> 斜体
<u> 下划线
<s> 删除线
<em> 强调
<strong> 更加强烈的强调
<sub> 下标
<sup> 上标
16.注册表单练习 (!!!掌握 自己能够独立的做出来)
略
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里
在web开发中,转发与重定向有很大的区别。
直观看来,转发不会发生URL址的变换,而重定向则会发生URL的改变。
这仅仅只是一种表象。HttpServlet中的request对象和response对象是在用户请求网页时由服务器根据浏览器传过来的参数封装生成的。一旦从浏览器请求过来,服务器响应回去那么request和response的也就到了生命的终点了。
当使用转发的时候,浏览器仅仅请求一次但是服务器端可能经历了多次的跳转。服务器端执行时发生了转发那么服务器就停止正在执行的任务,去指定转发给定地址的任务。
而使用重定向的话,浏览器则会项服务器发生多次请求。在服务器端执行代码的时候,发现发生了重定向,那么它就会通知浏览器,去访问另一个URL。浏览器就会向被发送的URL请求资源。
看一段代码:
这是一段jsp代码,当点击提交的时候,会把表单提交给myServlet。
界面长这样:
这是MySerlet,当用户点击提交表单,服务器就会调用MyServlet的doPost方法,在这个方法里面进行的是页面转发。
这是welcome.jsp的代码。
提交结果为:
可以发现浏览器只向服务器发送了一个请求。
接下来看一下重定向。
如果把MyServlet的代码改一下。
可以看到结果为:
而且浏览器项服务器发送了两次请求:
从上面的结果可以看出重定向后,因为是发起的另一个请求因此welcom页面中的内容都是null。而转发则由于是同一个request对象和response对象因此既能获得浏览器请求的参数,还能拿到request总放入的属性值。
其实从代码也可以看出来,sendRedirect()方法是HttpServletResponse对象的响应方法,既然调用了响应对象的方法,那么就表明整个请求结束了,服务器端项客户端返回执行结果。而getRequestDispatcher方法是request对象的方法,表明依旧在请求因此不会立即向浏览器返回结果,而是继续执行其转发的任务。
有一点需要说明的时,不论forward方法还是sendRedirect方法中传的URL需要注意,如果以“\”开头那么,就表示这个URL是现对于servlet容器根的请求,即localhost:8080,如果没有以“\”开头,那么表明这个请求地址是相对于当前的请求URL来寻址的。
当我再次点击提交的时候:
不以”\”开头的请求地址为:
转发模型为:
重定向模型为:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>login</title> </head> <body> <form action="myServlet" method="post"> name :<input type="text" name="username"/><br/> <input type="submit" value="submit"/> </form> </body> </html>
public class MyServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = (String)request.getParameter("username");
request.setAttribute("welcome", "welcome!!!");
RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp");
rd.forward(request,response);
}
}
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>welcome</title> </head> <body> <%=request.getParameter("username")%> <br/> <%=request.getAttribute("welcome") %> </body> </html>
当点击提交按钮后后我们可以看一下网络的请求过程。
public class MyServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = (String)request.getParameter("username");
request.setAttribute("welcome", "welcome!!!"); // RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp"); // rd.forward(request,response); response.sendRedirect("welcome.jsp");
}
}
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>login</title> </head> <body> <!--这里改成了绝对地址 --> <form action="/myServlet" method="post"> name :<input type="text" name="username"/><br/> <input type="submit" value="submit"/> </form> </body> </html>
如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里
1.JavaScript 简介:
JavaScript是互联网上最流行的脚本语言,所有现代的HTML都使用JavaScript。既然是脚本语言,那么它的特点就有一下三种:
(1)弱类型;
(2)解释型语言(不需要编译);
(3)逐行执行,一行代码错误,其后的代码块都不会继续执行;
(4)<script>标签可直接嵌入到HTML文件中,位置是任意的,通常放在被修饰内容下面或者head标签中,但写成单独的js文件有利于结构和行为的分离
2.JavaScript 内容(附图):
其中ECMAScript是JavaScript的核心;
DOM是文档对象模型(使用js操作网页);
BOM是浏览器对象模型(使用js操作浏览器)
3.JavaScript 信息的输出:
(1)alert( )方法:以提示框的形式在页面输出 ,例;
(2)console.log( )方法:在控制台输出信息,例:
(3)document.write( ):将内容直接写在HTML页面中,例:
4.JavaScript 变量:
与 Java不同,ECMAScript 中的变量无特定的类型,定义变量时只用 var 运算符,可以将它初始化为任意值,变量的初始化格式:var 变量名 = 变量值;例:
如果要定义多个变量,那么可以用将多个变量写在一行,用逗号进行分隔;例:
变量名字的变量规则:
(1)由字母、数字、下划线、$符号构成
(2)不可以以数字开头,不建议以下划线开头;
(3) 严格区分大小写;
(4)不可以是关键字和保留字
5.JavaScript 数据类型:
JavaScript可以分为原始数据类型,引用数据类型两种:
(1)原始数据类型:Number,String,Boolean,undefined,null
Number:数值型,就是数字,包含正数、负数、整数、小数、0、NaN、Infinity(正无穷)、-Infinity(负无穷);
注意:NaN:not a number的缩写,表示该值不是一个数值(也属于Number)
String:字符串:用双引号""或单引号''包起来的0个或多个字符,如果引号中什么也没有,那么这个字符串被称为空字符串
Boolean:布尔型:包含true:表示真(成立)和false:表示假(不成立)两个值
undefined:表示变量未定义,或变量被定义出来,但是没有被赋值
null:表示一个变量没有指向任何一片存储空间,即变量存在,但是里面是空的,类似于Undefined
(小提示:在Chrome浏览器控制台输出时,会发现Number类型为深蓝色,String为黑色,Boolean为浅蓝色,undefined和null都为浅灰色)
(2)引用数据类型:
Object(对象),Array(数组),Date(日期),RegExp(正则)。。等等
(3)如何查看一个变量的数据类型(typeof 运算符):
数值型数据:返回值为number
字符串型数据:返回值为string
布尔型数据:返回值为boolean
Undefined:返回值为undefined
Null:返回值为Object(历史遗留问题,说明null也是一个对象)
NaN:返回值为number
6.JavaScript 数据类型的转换:
(1)在使用加法(+)运算符时,任何数据与字符串类型数据相加都为字符串类型数据;
注(简单理解): 在JavaScript 中空字符串""转换为false,非空字符串转换为true(除“0”,“1”外);
false转换为 0 或“0”,true转换为 1 或“1”;
做逻辑判断的时候,null,undefined,""(空字符串),0,NaN都默认为false;
==在比较的时候可以转换数据类型,===是严格比较,只要类型不匹配就返回false;
其实
(2)parseInt:将字符串转换成整数(只识别字符串中的数值):
注:会忽略字符串中的前后空格(当数值后的空格后面还有数值时,将不会再识别);
能够正确识别正负号,即保留正负号;
在转换时,遇到非数值型的字符就会停止转换;
如果字符串的第一个字符是非数值型的,那么转换的结果为NaN;
(3)parseFloat:将字符串转换成小数(识别小数点,注意事项同上)
(4)Number:将其它类型的数据转换成数值型,注意被转换的数据必须是纯数值构成,否则无法转换,其它注意事项同上
(5)页面中的信息框:
alert(),弹出个提示框,只有确定;
confirm(),弹出个确认框,有确定和取消;
prompt(),弹出个输入框,可以输入内容;
==
的比较确实是转换成字符串来比较但,但是在布尔型转换为字符串之前,要先转换成 Number
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里
最近重在研究struts的源码,其中涉及到了request中的几个api,看了文档后还是觉得不清楚,所以在自己原来的工程中
测试了一下各个api的具体效果。在这里跟大家分享一下。
这是我具体测试的代码:
这是我servlet配置的路径:
以下是访问这个ProductServlet后控制台打印的结果:
从以上我们可以发现:
1.getRealPath(....),这个方法是返回给定资源的磁盘绝对路径,简单来说,就是以盘符开头的路径
2.getRequestURI(....)与getRequestURL(....)这个两个方法,从名字上来说,一个是返回url(统一资源定位器)一个是返回
uri(统一资源标识符,用来唯一的标识一个资源),那么url跟uri有什么区别呢?比较结果后我们就知道,URL中包含URI,URL是
带协议,带端口号的。
3.getContextPath(....)这个方法,其实就是用来返回工程名,或者说工程路径,看结果我们一目了然
4.getServletPath(.....)这个方法,从结果中,我们可以分析得出,它其实就是在工程目录下,访问我们servlet的路径,或者说
servlet相对于我们工程的路径,在或者说,它就是我们在配置文件中配置的路径,但是不包括后面具体的请求资源名
5.getPathInfo(.....),这个方法其实就是返回我们具体请求资源的名称,或者说,相对于我们的servlet而言的请求路径
蓝蓝设计的小编 http://www.lanlanwork.com