一:验证码功能实现
动态的验证码区别于静态验证码,主要是通过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