request代表请求对象
response代表的响应对象。
RequestFacade虽然实现了HttpServletRequest 这个接口。但并没有完成相应的请求功能。也就是说这个类并不是它的实现功能类。
Requst和Response才是HttpServletRequest与HttpServletResponse的实现功能类
叫做门面设计模式
在我们Servlet中使用的request与response
HttpServletRequest接口------>父接口 ServletRequest
HttpServletResponse接口----->父接口 ServletResponse
在tomcat中它采用门面模式对requst,response进行操作.
对外提供使用的是 RequestFacade ResponseFacade这两个类,
但是直正完成功能的是 Reqeust,Response类.
1.1.1 关于request,response总结:
1.它的作用:
request代表的是http请求对象,通过request可以获取Http请求信息.
response代表的是http响应对象,通过response可以设置响应信息。
2.在我们的servlet中使用的request,response是怎样来的?
它是tomcat服务器帮助创建的,通过service方法传递到了我们的servle中。
tomcat在创建request对象时,就将http请求中的信息封装到request中.
3.它们的体系结构
ServletReqeust------>HttpServletReqeust-------->具体的实现类是由服务器创建的。tomcat中是 RequestFacade
ServletResponse----->HttpServletResponse------->具体的实现类是由服务器创建的。tomcat中是 ResponseFacade
http响应中包含三部分
1.响应行
响应行中重要的是状态码.
response对象可以通过 setStatus(int num)方法去操作.
• setStatus(int)
• 常用状态码:200、302、304、404、500
2.响应头
setHeader():适用于单值的响应头
addHeader():适用于多值的响应头
setDateHeader();适用于毫秒值的响应头
setIntHeader();适用于单值的int型的响应头
3.响应正文
如果出现中文将是乱码,这里就要解决乱码:
response.setContentType("text/html;charset=utf-8");
示例2:通过response来控制响应头,完成指定时间跳转到指定页面.
带协议路径
response.setHeader(“refresh”,
不带协议路径
response.setHeader(“refresh”, “3;url=/web_03/index.html”);
获得向客户端进行数据输出的流对象:
//得到文件路径
String path=“E:\教学课件\javase课件\java-se-ppt\讲课ppt\javaWeb\web_03\0.jpg”;
//创建输入流对象读取图片信息
FileInputStream in=new FileInputStream(path);
//将读取到的字节信息保存到字节数组
//这里使用的是io-jar包下的一个工具类完成的(更高效)
byte[] b=IOUtils.toByteArray(in);
//使用响应对象得到字节输出流对象,完成对字节数据的输出
resp.getOutputStream().write(b);
对于请求方式post与get的参数问题
1.如果是post请求,那么在请求正文中会显示请求参数。
username=tom&password=123
2.如果是以get请求方式,请求参数会在请求行中.
url?username=tom&password=1234
1.获取http请求行中信息.
1.获取请求方式
request.getMethod() ///GET POSt
2.获取请求路径
request.getRequestURI(); // /servlet00/Demo URI统一资源标识符
request.getRequestURL().toString();
//http://localhost:8080/servlet00/Demo URL统一资源定位符
URI包含了URL,URI是URL的抽象
URI表示资源是什么
URL表示资源在网络上的具体位置
3.获取请求协议
request.getProtocol();
1.1.2 关于request获取客户机信息.
1.得到客户机ip地址.
request.getRemoteAddr();
2.获取请求的资源名称
getContextPath();这个方法得到的是工程名,其实是虚拟目录名称.
/servlet00/Demo
/servlet00---->工程名或虚拟目录.
/Demo---->它代表的是资源路径
- 获取请求时的参数信息
request.getQueryString();是在请求时输入的参数( ? 号后面的部分 )
// // 1.获取请求方式.
// String method = request.getMethod();
// System.out.println(method); // GET
//
// // 2.获取请求uri
//String uri = request.getRequestURI();
//System.out.println(uri); //servlet00/Demo
//获取请求url
//String url = request.getRequestURL().toString();
//http://localhost:8080/servlet00/Demo
// 3.获取协议
// String protocol = request.getProtocol();
// System.out.println(protocol); // HTTP/1.1
//
// // 4.得到客户机的ip地址
// String ip = request.getRemoteAddr();
// System.out.println(“IP:” + ip);
//
//5.获取工程名称
//String pname=request.getContextPath(); //工程名
//System.out.println(pname);
//6. 获取请求时的参数信息
String cs = req.getQueryString();
System.out.println(cs);
request获取请求参数
1.String getParameter(String name)
根据请求参数中的name值获取对应的value值.
2.String[] getParameterValues(String name);
操作多个值的组件,例如 checkbox。
3.Enumeration getParameterNames();
获取请求参数中的所有name的值.
4.Map<String,String[]> getParameterMap()
得到请求参数的name与value的map映射
// 设置响应编码
response.setContentType("text/html;charset=utf-8");
//针对于post请求中文乱码解决
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username"); //
// 如果name写错,或者是没有name,那么得到的是null值.
// username = new String(username.getBytes("iso-8859-1"), "utf-8");
System.out.println(username);
1.1 【request域对象】
Servlet中三大域对象:request、session、application(ServletContext的对象),都有如下三个方法:
> void setAttribute(String name, Object value)
> Object getAttribute(String name)
> void removeAttribute(String name);
ServletContext就一个域对象.
request的创建与销毁.
当请求来的时候,tomcat服务器会创建request,response对象。
当响应产生,request对象销毁。
也就是说,每一次请求都是一个新的request。
request也是一个域对象,它也可以存取删除数据。
setAttribute()
getAttribute()
removeAttribute();