Request:
1.request对象和response对象的原理
1.tomcat服务器会根据请求url中的资源路径,创建对应的ServletDemo的对象。
2.tomcat服务器会创建request和response对象,request对象中封装请求消息数据。
3.tomcat将request和response两个对象传递给service方法,并且调用service方法。
4.程序员可以通过request对象获取请求消息数据,通过response对象设置响应消息数据。
5.服务器在给浏览器做出响应之前,会从response对象中拿程序员设置的响应消息数据。
2.request对象继承体系结构:
ServletRequest ---接口
|
HttpServletRequest---接口
|
org.apache.catalina.connector.RequestFacade---实现类
3.request功能:
1.获取请求消息数据:
1.获取请求行数据。
GET /crmm/demo1?name=zhangsan HTTP/1.1
方法:
1.获取请求方式:GET
String getMethod();
2.获取虚拟目录:/crmm
String getContextPath()
3.获取Servlet路径:/demo1
String getServletPath()
4.获取get方式请求参数:name=zhangsan
String getQueryString()
5.获取请求URI:/crmm/demo1
String getRequestURI() /crmm/demo1
StringBuffer getRequestURL() http://localhost/crmm/demo1
URI:统一资源标识符
URL:统一资源定位符
6.获取协议及版本:HTTP/1.1
String getProtocol()
7.获取客户机的IP地址:
String getRemoteAddr()
2.获取请求头数据。
1.方法:
String getHeader(String name) 通过请求头的名称获取请求头的值。
Enumeration<String> getHeaderNames();获取所有请求头名称
3.获取请求体数据。
只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数。
步骤:
1.获取流对象
BufferedReader getReader():获取字符输入流,只能操作字符数据。
ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据。
2.从流对象中拿数据
2.其他功能:
1.获取请求参数,通用方式:不论get/post都可以使用下列方法。
1.String getParameter(String name);根据参数名称获取参数值
2..String[] getParameterValues(String name);根据参数名称获取参数值的数组。
3.Enumeration<String> String getParameterNames();获取所有参数名称
4.Map<String,String[]> getParameterMap();获取所有参数的MAP集合。
中文乱码的问题:::
get方式:tomcat8已经将get方式乱码问题解决了。
post方式:会乱码
解决:设置流的编码:request.setCharacterEndcoding("utf-8");
2.请求转发:一种在服务器内部资源跳转的方式。
1.步骤:
1.RequestDispatcher getRequestDispatcher(String path);
2.使用RequestDispatcher 对象来进行转发 forward(req,resp);
2.特点:
1.浏览器地址栏路径没有发生变化。
2.服务器内部资源跳转的方式,不能访问服务器外部的资源。
3.转发是一次请求。
3.共享数据:
域对象:一个有作用范围的对象,可以在范围内共享数据。
request域:代表一次请求的范围。一般用于请求转发的多个资源中共享数据。
方法:
1.setAttribute(String name,Object value);存储数据
2.Object getAttribute(String name);通过键获得值
3.void removeAttribute(String name);通过键移除键值对
4.获取ServletContext
ServletContext getServletContext(); //ApplicationContextFacade
javaBean:标准的Java类
1.要求:
1.类必须public
2.必须提供空参的构造器
3.成员变量必须使用private
4.提供公共setter和getter方法
2.功能:封装数据
概念:
成员变量
属性:setter和getter方法截取后的产物。
例如:getUsername() -->Username-->username
方法:setProperty()
getProperty()
populate(Object obj,Map map)