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

it2022-05-05  147

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)