JavaWeb学习(六)---Request对象/Response对象/重定向和转发请求的区别

JavaWeb学习(六)—Request对象/Response对象/重定向和转发请求的区别

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。因此,如果我们想要获取客户端的请求数据,只需要通过request对象就可实现,如果想向客户端响应回传某些数据,使用response对象即可。

01 Request对象

当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过HttpServletRequest提供的方法,可以获得客户端请求的所有信息。

  • Request对象获取客户机信息的常用方法
getRequestURL();//返回客户端发出请求时的完整URL。
getRequestURI();//返回请求行中的资源名部分。
getQueryString();//返回请求行中的参数部分。
getPathInfo();//返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
getRemoteAddr();//返回发出请求的客户机的IP地址。
getRemoteHost();//返回发出请求的客户机的完整主机名。
getRemotePort();//返回客户机所使用的网络端口号。
getLocalAddr();//返回WEB服务器的IP地址。
getLocalName();//返回WEB服务器的主机名
  • Request对象实现请求转发

    请求转发:指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理。

    在Servlet中实现请求转发的两种方式:

    • 通过ServletContext的getRequestDispatcher(String path)方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发。
    RequestDispatcher reqDispatcher =this.getServletContext().getRequestDispatcher("{页面的url}");
    reqDispatcher.forward(request, response);
    
    • 通过request对象提供的getRequestDispatche(String path)方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发。
    request.getRequestDispatcher("/test.jsp").forward(request, response);
    

02 Response对象

HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。

  • 向客户端(浏览器)发送数据的方法
getOutputStream(); //获取输出流
getWriter(); //获取打印流

使用PrintWriter流输出中文注意问题:记得设置字符编码

response.setCharacterEncoding("UTF-8");//设置将字符以"UTF-8"编码输出到客户端浏览器
//PrintWriter out = response.getWriter();必须放在response.setCharacterEncoding("UTF-8");之后

细节问题:

getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。

Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象。


  • Response对象实现请求重定向

    请求重定向指:一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向。

    **实现方式:**调用response对象的sendRedirect方法实现请求重定

response.sendRedirect("页面url");//url前不用加/

03 面试题:重定向和转发请求的区别

请求重定向是客户端行为,web资源收到客户端请求后,通知浏览器去访问另外一个web资源(让客户端请求另外一个url)。不可以携带参数地址栏会发生变化。

转发请求是服务器行为,web资源收到客户端请求好,通知浏览器去调用另外一个web资源(服务器自己转发到另一个url)。可以携带参数(通过forward方法将req,resp转发至另一个url)。地址栏不会发生变化。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值