一:验证码功能实现


动态的验证码区别于静态验证码,主要是通过servlet生成动态图片,以及生成验证码的内容。

生成验证码的代表不需要掌握,但保存的代码需要了解。

验证码内容:将验证码内容保存session(容器)
验证码图片:将图片写到response.getOutputStream()中在这里插入图片描述
在html页面中则可以调用servlet,然后通过js进行表单校验,来完成功能。在这里插入图片描述

二:request概述及运行流程

与response一样我们在创建servlet时,也会有request参数。

同理service方法里面是ServletRequest

doGet/doPost方法的request的类型是HttpServletRequest

HttpServletRequest是ServletRequest的子接口,功能和方法更加强大

request运行流程与response一致

三:通过request获取请求

因为request代表着请求,所以我们可以通过该对象来获取http请求中的具体内容。在这里插入图片描述
1)获取请求行

1.获取客户端请求的方式(get 或 配 post):getMethod()

2.获取请求的资源地址 url或uri:getRequestURI() getRequestURL()

**3.获取请求的web应用的根地址(经常用)
getContextPath()—Web应用的根地址 例如:/javaweb2_war_exploded**

4.get提交时获得地址后的参数字符串(提交的信息) 一般不用

String getQueryString() —- get提交url地址后的参数字符串

username=zhangsan&password=123
注意:request获得客户机(客户端)的一些信息

例如获得客户端的IP地址(访问者信息)也就是localhost

getRomoteAddr()—获得访问的客户端IP地址

(2)获取请求头
getHeader(String name)通用方法,根据key来获取键值对的值。开发中根据业务获取相应的请求头内容
防盗链
其中请求头中referer头:显示此次访问的来源,则可以通过对访问地址的来源进行判断防盗链接。

如果是通过自己网站访问,则跳转。反之则显示信息。
(3)获取请求体(是通过post提交的请求参数)

请求体的格式是:

name1=value1&name2=value2&name3=value3&name4=value4

1.通过getParameter(String name)方法(如果是多个数据,则采用getParameterValues(String name))

2.通过getParameterMap()来获取全部参数,里面是map结构。然后转换成String数组。

map结构:key——value

Map<String, String[]> parameterMap = request.getParameterMap()

注意:get请求方式的请求参数 上述的方法一样可以获得

四:request的其他功能

(1)request是一个域对象,类似之后学习的session,可以存储数据的区域对象。

setAttribute(String name, Object o)

getAttribute(String name)

removeAttribute(String name)

(2)request完成请求转发

注意:转发与重定向的区别?

1)重定向两次请求,转发一次请求

2)重定向地址栏的地址变化,转发地址不变

3)重新定向可以访问外部网站 转发只能访问内部资源(转发是服务器内部的功能)

4)转发的性能要优于重定向
且转发需要将request与response对象传到下一个servlet。

步骤:

1)request.getRequestDispatcher 获取转发器—path是转发的地址。

RequestDispatcher dispatcher = request.getRequestDispatcher(“/servlet2”);

2)dispatcher.forward(request,response);通过这个转发器进行转发request和response。

注意:request作用范围:在一次请求中。

五:request域与ServletContext域生命周期比较

ServletContext:

创建:服务器启动

销毁:服务器关闭

域的作用范围:整个web应用

request:

创建:访问时创建request

销毁:响应结束request销毁

域的作用范围:一次请求中

六:客户端地址与服务器端地址的写法

客户端地址:是客户端去访问服务器的地址,是服务器外部的地址,特点是写上web应用名称。http://localhost:8080/javaweb2_war_exploded/

服务器端地址:服务器内部资源的跳转的地址,特点:不需要写web的名称,比如说在请求转发中呢。/servlet2