目录
3. ServletContext域与Request域的生命周期比较?
1. HttpServletRequest概述
我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response。 service方法中的request的类型是ServletRequest,而doGet/doPost方法的request的类型是HttpServletRequest,HttpServletRequest是ServletRequest的子接口.
2. request的运行流程
3. 抓包获取的http请求信息
request代表请求, 可以通过该对象分别获取http请求的请求行, 请求头, 请求体
4. 通过requestd对象获得 "请求行"
获得请求的资源:
String getRequestURI()
StringBuffer getRequestURL()
String getContextPath() ---web应用的名称
String getQueryString() ---- get提交url地址后的参数字符串
username=zhangsan&password=123
注:request获得客户机(客户端)的一些信息 request.getRemoteAddr() --- 获得访问的客户端IP地址
5. 通过request 获得请求头
long getDateHeader(String name)
String getHeader(String name)
Enumeration getHeaderNames()
Enumeration getHeaders(String name)
int getIntHeader(String name)
注: referer : n. 参照页,引用页; 推荐人
作用: 执行该此访问的来源 , 做防盗链时使用 该信息
6. 通过request 获得请求体
request 请求的概念是 通过post提交的请求参数的, 若果是get 则没有请求体(直接跟在 ? 后边 , 多个参数用 & 连接 )
格式:
username=zhangsan&password=123&hobby=football&hobby=basketball
key ---------------------- value
username [zhangsan]
password [123]
hobby [football,basketball]
以上述为例子: 获取请求参数 (get 和 post 都可以通过以下方式获得) :
String getParameter(String name)
String[] getParameterValues(String name)
Enumeration getParameterNames()
Map<String,String[]> getParameterMap()
注: 乱码处理 (括号内的是我个人拙见) :
• 解决post提交方式的乱码 (参数还在请求体中, 可以先行设置编码,然后通过浏览器处理后 直接就是utf8的编码):
request.setCharacterEncoding("UTF-8");
• 解决get提交的方式的乱码 (因为get方式是直接在链接过边加的不经过浏览器处理, 得到的是原编码, 想要改变编码需要有先解码再编码的过程):
String name = request.getParameter("name");
name = new String(name.getBytes("ISO-8859-1"),"UTF-8");
附加 request 的其他功能:
1. request 是一个域对象
request 对象也是一个存储数据的区域对象, 所以也具有如下方法:
setAttribute(String name, Object o)
getAttribute(String name)
removeAttribute(String name)
注: request 域的作用范围: 一次请求中
2. request 完成请求转发
获得请求转发器-- path是转发的地址
RequestDispatcher getRequestDispatcher(String path)
通过转发器对象转发
requestDispathcer.forward(ServletRequest request, ServletResponse response)
3. ServletContext
域与
Request
域的生命周期比较?
ServletContext : 创建--> 服务器启动 ; 销毁--> 服务器关闭 ; 域的作用范围--> 整个web应用
request : 创建--> 访问时创建request ;
销毁-->响应结束
request销毁 ;
域的作用范围--> 一次请求中
4. 转发与重定向的区别?
• 重定向是 两次请求, 转发是一次请求
• 重定向地址栏的地址变化, 转发地址不发生变化
• 重定向可以访问外部网站 , 转发只能访问内部的网站
• 转发的性能要优于重定向
5. 客户端地址与服务器端的地址的写法?
• 客户端访问服务端需要加上 web应用的名称.
• 服务器内部访问资源 , 内部的跳转地址, 不需要写web应用的名称
18/12/6 18:00 雨