欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSP数据交互(一 response对象)

程序员文章站 2022-03-07 13:58:55
能使用request对象获取用户请求 使用response对象处理响应 使用转发与重定向控制页面跳转 掌握session的原理及应用 掌握include指令的应用...

JSP内置对象response

学习了如何使用JSP技术获取请求信息,JSP技术是如何将服务器响应返回给客户端的?下面介绍JSP内置对象response如何实现用户响应。

response对象

JSP包含多个内置的对象,各自有不同的功能。与request对象相应的是response对象,response对象可用于设置响应参数及取得响应流等。

JSP数据交互(一 response对象)
与request对象一样,response对象也提供了多个方法用于处理HTTP响应,如表:

方法名称 说明
void addCookie (Cookie cookie) 向客户端添加Cookie
void setContentype(String type) 设置HTTP响应的contentType类型
void setCharacterEncoding(String charset) 设置响应所采用的的字符编码类型
void sendRedirect(String location) 将请求重新定位到一个新的URL上

最常用的方法就是sendRedirect(String location),这个方法用于将请求重定向到一个新的URL上。

login.jsp
<form action="control.jsp">
	<inout type="text" name="userName">
</form>
control.jsp
<%
	request.setCharacterEncoding("UTF-8");
	String name=request.getParameter("userName");
	if("sa".equals(name)){
	response.sendRedirector("welcome.jsp");
}
%>

运行以上代码时候,注意到登录页面跳转到欢迎页面,客户端浏览器URl的地址发生改变。
问题:如果希望登录成功后,在欢迎页面显示登录的用户的名称,应该怎么办?
分析:当用户提交请求后,使用request对象获取用户请求的数据,若要welcome.jsp中显示用户名,可以尝试按此方法修改welcome.jsp的代码。

我们在页面中使用String name=request.getParameter("userName"); 输出后发现出现的数据为null。与结果想象的不同,下面解决这个问题。

转发与重定向

首先我们进行代码的改写。

response.sendRedirector("welcome.jsp").forward(request,response);

这样我们成功获得数据了,为什么呢?要明白这个道理,就必须了解下面的内容:JSP页面的转发与重定向。

什么是转发

从程序的角度理解,即当客户端发送一个请求到服务器后,Web服务器在容器内部完成请求跳转,然后将最终的结果发送给浏览器,整个过程都是容器内部完成的。而对应到客户端,无论服务器内部如何处理,作为浏览器都只是提交一个请求,因而客户端URL地址不会发生改变。
转发的实现很简单,使用request的getRequestDispacher()方法得到RequestDispatcher对象,此对象用于封装一个由路径所标识的服务器资源,然后用这个对象调用forward()方法,将请求传递给服务器上另外的JSP页面或者HTML文件。
转发可以在多个页面交互过程中实现请求数据的共享。

什么是重定向

当用户登录成功后,使用request对象的sendRedirect()方法。那么该方法执行的结果是客户端重新向服务器请求一个地址链接,由于是新发的请求,因而上传请求中的数据将随机丢失,这种行为成为重定向。由服务器重新定向了URL,因而在客户端浏览器中显示的是新的URl地址,所以重定向可以理解为浏览器至少提交了两次请求。

转发和重定向的区别。
(简单解释) 转发:是一次请求,地址栏不会变,可以携带数据。重定向:是两次请求,地址栏变,不可以携带数据。
(详细解释)转发过程:Web服务器内部将一个request请求的处理权交给另一个资源,属于同一访问请求和响应过程,所以request对象信息不会丢失。 转发是在服务器端发挥作用,通过RequestDispatcher对象的forward()方法将提交信息在多个页面间进行传递。转发是服务器内部控制权的转移,客户端浏览器的地址栏不会显示出转向后的地址。重定向过程Web服务器向浏览器返回一个响应,浏览器接受此响应后再发送一个新的http请求到服务器,这次属于两次不同的请求,则上一次请求的request信息将丢失。 重定向是在客户端发挥作用,通过请求新的地址实现页面转向。其通过浏览器重新请求地址,在地址栏中可以显示转向后的地址。
如果需要在重定向的情况下将简单数据(值类型,字符串)传递至目标页面,可以使用查询字符串(Query String)实现。代码如下。
response.sendRedirect(“welcome.jsp?userName=”+name);
注意 这时get方式
查询字符串以名值对的方式存储数据,通过“?”连接URL地址后面,多个名值对可以用“&”进行分隔。
如果需要传递复杂的数据类型(如对象,集合等)或者需要更大范围而不仅仅是目标页面分享数据,则需要使用后续的东西进行。
注意:(1)使用超链接进行数据传递时,是用GET方式,如果传入的过程中有中文,使用request获取对象直接获取时,容易产生乱码问题。因此,需要对数据进行重新编码。可以使用String对象的方法实现数据重新编码。
语法:new String(需要编码的数据.getBytes(“ISO-8859-1”),“UTF-8”);也可有同感Tomcat进行设置。
(2)当成传递多个数据时,可使用&符号进行链接。

本文地址:https://blog.csdn.net/qq_38269362/article/details/107892485

相关标签: web js