文章目录
参考文献
1、Cookie
1.1 什么是 Cookie
客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
1.2 Cookie 的使用
- 初次请求,创建 Cookie 对象,并且发送给浏览器(响应中携带)
@WebServlet("/cookie01")
public class CookieServlet01 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.创建一个Cookie对象
Cookie cookie = new Cookie("uname","jim");
//2.将这个Cookie对象保存到浏览器端
response.addCookie(cookie);
request.getRequestDispatcher("hello01.html").forward(request,response);
}
}
- 在客户端保存 Cookie(在 cookie 有效期内第二次及之后的请求中,浏览器将请求连同 cookie 一同发送回来)
注意:
- 浏览器提交 Cookie 时只会提交 name 和 value 属性,其他的属性是不传送的,只是浏览器用来自己判断信息用。
那么我们怎么获取这个cookie呢?
- 如果之后我们使用 Spring 框架,可以用
@CookieValue
这个注解将 cookie 数据和控制器方法的形参创建映射关系;
public void getCookie(@CookieValue("uname") String name){
System.out.println(name);
}
1.3 cookie 的设置
cookie.setMaxAge();
:设置 cookie 的有效时长;服务器端明确设置了Cookie 的存在时间之后,在浏览器端,Cookie 数据会被保存到硬盘上,否则的话,一个会话内有效,且只存在于内存中;cookie.setDomain(pattern);
:设置域,如果没有显式设置,则浏览器会自动取 url 的 host 作为 domain 值;cookie.setPath(uri);
:设置路径,设置为"/"
表示允许所有路径都可以使用Cookie;
域+路径 = url 资源地址 ,默认情况下 cookie 是整个网站通用的;
1.4 Cookie 的应用
- 记住用户名和密码十天:setMaxAge(60 * 60 * 24 * 10)
- 十天免登录
2、Kaptcha - 验证码
2.1 为什么需要验证码?
- 没有验证码,别人会恶意攻击
- 现有的验证码组合:数字+英文字母+算数+请依次点击什么汉字+拖动滚动条使图片重合
2.2 kaptcha 如何使用
- 添加 jar 包,记得在该模块中添加依赖并重新部署:
- 在 web.xml 文件中注册 KaptchaServlet,并设置验证码图片的相关属性;
<servlet>
<servlet-name>KaptchaServlet</servlet-name>
<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
<init-param>
<!--边框颜色-->
<param-name>kaptcha.border.color</param-name>
<param-value>red</param-value>
</init-param>
<init-param>
<param-name>kaptcha.textproducer.char.string</param-name>
<!--表示在这个字符范围内选择字符-->
<param-value>abcdefg</param-value>
</init-param>
<init-param>
<!--验证码要不要加噪-->
<param-name>kaptcha.noise.impl</param-name>
<param-value>com.google.code.kaptcha.impl.NoNoise</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>KaptchaServlet</servlet-name>
<url-pattern>/kaptch.jpg</url-pattern>
</servlet-mapping>
- 在 html 页面上编写一个 img 标签,然后设置 src 等于 KaptchaServlet 对应的
url-pattern
;
2.3 kaptcha 验证码常用配置
- kaptcha 验证码图片的各个属性在常量接口:Constants 中;
- 如果想要配置验证的属性,在一对
<init-param>
标签中进行配置,其中下面定义的字符串即为 web.xml 文件中的<param-name>
中,具体每个字符串是什么意思,可以参考:验证码 KAPTCHA 参数详解;
- KaptchaServlet 在生成验证码图片时,会同时将验证码信息保存到 session 中;
@WebServlet("/kaptcha01")
public class KaptchaServletDemo01 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession() ;
Object obj = session.getAttribute("KAPTCHA_SESSION_KEY");
System.out.println("obj = " + obj);
}
}
网页访问:
控制台打印:
注意:
<img src="kaptch.jpg"/>
这个其实不是一个图片,而是一个 url 资源,那个 servlet 帮我们产生了一个验证码,并且帮我们把验证码保存到了 session 中。- 我们先访问 hello02.html,然后访问 kaptcha01 就会在控制台打印出相同的验证码,这个打印在控制台的是我们从 session 中获取的。
2.4 书城项目的注册验证码实现(具体看书城项目第三部分)
- 因此,我们在注册请求时,首先将用户文本框中输入的验证码值和 session 中保存的值进行比较,相等,则进行注册;
3、Exp - 正则表达式
正则表达式有三个主要用途:
- 模式验证: 检测某个字符串是否符合规则,例如检测手机号、身份证号等等是否符合规范
- 匹配读取: 将目标字符串中满足规则的部分读取出来,例如将整段文本中的邮箱地址读取出来
- 匹配替换: 将目标字符串中满足标准的部分替换为其他字符串,例如将整段文本中的"hello"替换成"haha"
3.1 正则表达式的使用三步骤
-
定义正则表达式对象
正则表达式定义有两个方式:
- 对象形式
var reg = new RegExp(“abc”) - 直接量形式,用//来定义
var reg = /abc/; - 匹配模式:
- g 全局匹配
- i 忽略大小写匹配
- m 多行匹配
- gim 这三个可以组合使用,不区分先后顺序
例如:var reg = /abc/gim , var reg = new RegExp("abc","gim");
- 对象形式
-
定义待校验的字符串
-
校验
3.2 使用案例
1. 基本使用:
-
reg.test
函数是只要有一个就返回 true; -
正则表达式定义在
script
标签中。
2. 全文匹配:
- 不加 g 作为后缀条件的话,只有第一个 o 会被替换;
3. 忽略大小写匹配:
- 不加 i 作为后缀的话,后面一个大小的 O 不会被匹配到;
4. 多行匹配:
- 不加 m 作为结尾的话,这里返回 false 表示没有匹配成功,因为默认去找
hello\nworld
整个字符串的结尾去;
3.3 元字符
在正则表达式中被赋予特殊含义的字符,不能被直接当做普通字符使用。如果要匹配元字符本身,需要对元字符进行转义,转义的方式是在元字符前面加上\
,例如:\^
1. \w 数字字母下划线
- 除特殊字符外,其它的每个数字、字母、下划线被替换成 A;
- 并且中间定义了
\n
换行符,所以控制台输出换行了;
- \s 匹配任意空白符
- 本来有个换行,这里替换成 A ,一行输出了;
-
\d \D 匹配数字非数字
-
\b 匹配单词的开始和结束(检测到空格代表一个单词)
- ^ 表示匹配开始 $表示匹配结尾
3.4 集合
- 将 a-g 中的任意字符替换为 A;
3.5 出现的次数
- 匹配 2-4 个 字符 l ,由于 5 个 l 字符,匹配了前四个,还剩最后一个没办法匹配,所以没有被替换;