1.Request原理HTTP(Hyper Text Transfer Protocol ,超文本传输协议),定义了客户端与服务器端通信时的数据格式
请求消息数据格式:请求行——格式:请求方式 请求url 请求协议/版本,比如:GET /login.html HTTP/1.1
关于请求方式:HTTP协议有7种请求方式,常用的有两种:
▶ GET:请求参数在请求行中(url中);请求的url有长度限制;不太安全
▶ POST:请求参数在请求体中;请求的url没有长度限制;相对安全请求头——格式:键值对。是客户端浏览器告诉服务器的信息。
关于几个重要的请求头键/值:
▶ User-Agent:浏览器告诉服务器"我是哪个版本的浏览器"。这样服务器才能"对症下药",解决浏览器兼容性问题
▶ Referer:告诉服务器"我的请求的来源"。这被用于 防盗链 和 统计工作。请求空行——格式:就是个空行。分割了 请求头 和 请求体
请求体——传递的信息。POST方式有请求体,GET方式没有。流的形式获取。
request是服务器创建的对象来给我们使用,request对象封装了浏览器发送过来的所有数据,如果是获取浏览器发送过来的信息那么就找request对象。
1.1request对象继承体系结构ServletRequest 接口
↑继承
HttpServletRequest 子接口
↑ 实现
org.apache.catalina.connector.RequestFacade 实现类
1. 获取请求方式 :GET String getMethod() 2. (*)获取虚拟目录:/day55 String getContextPath() 3. 获取Servlet路径: /demo1 String getServletPath() 4. 获取get方式请求参数:name=zhangsan String getQueryString() 5. (*)获取请求URI:/day14/demo1 String getRequestURI(): /day55/demo1 不全的路径 StringBuffer getRequestURL() :http://localhost/day55/demo1 URL:统一资源定位符 : http://localhost/day55/demo1 URI:统一资源标识符 : /day55/demo1 6. 获取协议及版本:HTTP/1.1 String getProtocol() 7. 获取客户机的IP地址: String getRemoteAddr()2.2.获取请求参数 String getParameter(String name):根据表单项的name属性值获取value属性值 Enumeration
(1) get请求:
tomcat8之前:中文会出现乱码
tomcat8之后:中文不会出现乱码
(2)post请求:
中文会出现乱码
原因:两边编码方式
tomcat服务器默认编码为ISO-8859-1
(3)解决中文乱码
需要修改服务器默认编码
request.setCharacterEncoding("utf-8");
3.转发
3.1作用
请求转发可以帮助实现servlet到其他的servlet或者是页面
Request对象:
public RequestDispatcher getRequestDispatcher(String path)
RequestDispatcher:
public void forward(ServletRequest request, ServletResponse response)
request.getRequestDispatcher("/WEB-INF/demo.html").forward(request, response);
注:利用转发可以访问web-inf下的文件
3.2特点 1.请求转发只能进行内部跳转
2.请求转发地址值是不会发生改变的
3.请求转发只包含一次请求和一次响应
request对象是域对象
作用范围:一次请求范围,浏览器发送请求到服务器做成响应结束,请求转发在一次请求范围内;
创建和销毁时间:浏览器发送请求之后服务器创建request对象,服务器做成相应之后销毁;
存值、取值、移除值
存值:request.setAttribute(String name,Object value);
取值:Object value=request.getAttribute(String name);
移除值:request.removeAttribute(String name);
注意:只能使用转发来实现资源的共享



