简介
- Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的respose对象
- request和respose对象即代表请求和响应,那我们要获取客户端(浏览器)提交过来的数据,只需要找request对象就行了。要向容器输出数据,只需要找respose对象就行。
HttpServletRequest
- 通过getHeader拿到请求头中我们所关心的信息
String connection = request.getHeader("Connection");
System.out.println("connection "+connection);
String accept = request.getHeader("Accept");
System.out.println("accpet "+accept);
- getRequestURL方法返回客户端发出请求时的完整URL(统一资源标识符)。
- getRequestURI方法返回请求行中的资源名部分。(资源在服务器上的路径)(统一资源定位符)
System.out.println("requestURL "+requestURL);
String requestURI = request.getRequestURI();
System.out.println("requestURI "+requestURI);
- 其他常用方法
//getRemoteAddr方法返回发出请求的客户机的IP地址
String remoteAddr = request.getRemoteAddr();
//getRemoteHost方法返回发出请求的客户机的完整主机名
String remoteHost = request.getRemoteHost();
//getRemotePort方法返回客户机所使用的网络端口号
int remotePort = request.getRemotePort();
//getLocalAddr方法返回WEB服务器的IP地址。
String localAddr = request.getLocalAddr();
//getLocalName方法返回WEB服务器的主机名
int localPort = request.getLocalPort();
//getMethod得到客户机请求方式
String method = request.getMethod();
尝试抓取get请求中的用户名和密码
写一个简单的网页
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username+" "+password);
热部署
使用Dispatcher时的相对路径和绝对路径
表单action中的绝对路径和相对路径
Request对象
- ServletContext:可以通过设置属性的方式,向域对象中存储数据,同时也可以取出以域对象属性的方式,存储的数据
- ServletContext的作用范围:整个web应用
-Request:同servletContext,我们也可以以同样的方式向request中存储数据和取出数据
- Request的作用范围只是同一个个请求(处理同意请求的servlet,可以存取request域中的数据)
转发和包含(forward和include)
转发和包含的共同点
- 源组件和目标组件处理的都是同一个客户请求,源组件和目标组件共享同一个ServletRequest和servletResponse对象
- 目标组件都可以为Servlet、jsp、或者HTML文档
- 都依赖javax.servlet.RequestDispatcher
RequestDIspather表示请求分发器
它有两个方法
- forward():把请求转发给目标组件
-
- 清空用于存放响应正文数据的缓冲区
-
- 如果目标组件为Servlet或JSP,tomcat就调用它们,把它们产生的响应结果发送到客户端;如果目标组件为文件系统中的静态HTML文档,tomcat就读取文档中的数据并把它发送给客户端。
特点
-
- 由于forward()方法先清空用于存放响应正文数据的缓冲区,因此源组件生成的响应结果(无论转发前后)不会被发送到客户端,只有目标组件生成的响应结果才会被送到客户端。
-
- 如果源组件在进行请求转发之前,已经提交了响应结果(如调用了response的flush或close方法),那么forward()方法会抛出IllegalStateException。为了避免该异常,不应该在源组件中提交响应结果。
- include();包含目标组件的响应结果
-特点
- 特点:
-
- 源组件与被包含的目标组件的输出数据都会被添加到响应结果中。
-
- 在目标组件中对响应状态代码或者响应头所做的修改都会被忽略。