接收请求常用方法

1,方法

getRequestURL() 获取客户端发出的请求时的完整URL
getRequestURI() 返回请求行中的资源名部分
getQueryString() 返回请求行中的参数部分
getRemoteAddr() 返回发出请求的客户机的IP地址
getMethod() 得到客户机请求方式
getContextPath()

2,示例

  1. public void service(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
  2. /*getRequestURL方法 -- 返回客户端发出请求完整URL
  3. getRequestURI方法 -- 返回请求行中的资源名部分
  4. getQueryString方法 -- 返回请求行中的参数部分
  5. getRemoteAddr方法 -- 返回发出请求的客户机的IP地址
  6. getMethod -- 得到客户机请求方式
  7. getContextPath -- 获得当前web应用虚拟目录名称 -- 在写路径时不要将web应用的虚拟路径的名称写死, 应该在需要写web应用的名称的地方通过getContextPath方法动态获取*/
  8. //url
  9. StringBuffer requestURL = request.getRequestURL();
  10. System.out.println("url:"+requestURL);//统一完整路径名,包括协议,虚拟主机和资源,url:http://localhost:8080/javaweb/demo
  11. //uri
  12. String uri=request.getRequestURI();
  13. System.out.println("uri:"+uri);// 统一资源路径名 uri:/javaweb/demo
  14. //queryString
  15. String qs=request.getQueryString();
  16. System.out.println("qs:"+qs);//显示访问连接?后面的参数
  17. //ip
  18. String addr = request.getRemoteAddr();//alt+shift+L,可以默认提示变量名
  19. System.out.println("addr:"+addr);//addr:127.0.0.1
  20. //method
  21. String method = request.getMethod();
  22. System.out.println(method);//GET
  23. //contextpath
  24. String contextPath = request.getContextPath();
  25. System.out.println(contextPath);//javaweb 会动态变化,万分注意!
  26. }

访问链接:
image.png
输出结果:
image.png

请求转发

请求转发,是一种服务器的行为,当客户端请求到达后,服务器进行转发,此时会将请求对象进行保存,地址栏中的URL不会改变,得到相应后,服务器端再将响应发送给客户端,从始至终只有一个请求发出。可以达到多个资源协同响应的效果。
req.getRequestDispatcher(url).forward(req,resp);
特点:
1,浏览器地址栏不变
2,服务器行为
3,从始至终只有一个请求
4,数据可以共享
可以让请求从服务端跳转到客户端(或跳转到指定的servlet)
服务端行为
注意:
1,当servlet页面转发到jsp或html或servlet页面时,浏览器地址栏不会变,但网页显示相对应的内容。

注意

请求转发只能转发到当前的项目。
例如;从iavaweb项目的zf1实例转发到javaweb项目的zf2实例
zf1:本来写的是req.getRequestDispatcher("zf2").forward(req,resp);改成如下:
image.png
浏览器结果是:
image.png
直接是把路径跟在了项目的后面。所以要想把数据传送到不同项目的实例中用重定向进行get传值。但这样是使用了两次请求。

request作用域

通过该对象可以在一个请求中传递数据,作用范围:在一次请求中有效,即服务器跳转有效。

  1. //设置域对象内容
  2. request.setAttribute(String name,String value);
  3. //获取域对象内容
  4. request.getAttribute("String name");
  5. //删除域对象内容
  6. request.removeAttribute("String name");

request域对象中的数据在一次请求中有效,则经过请求转发,request域中的数据依然存在,则在请求转发的过程中可以来传输共享数据。
可以配合着去请求转发,在原来数据的基础上添加新的数据。
注意:
1,通过post或get请求传输过来的数据只能用request.getParameter(Strting name);获取数据
2,而使用request.setAttribute()添加的数据,只能使用request.getAttribute()获取数据。