当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JSP数据交互(一 response对象)

JSP数据交互(一 response对象)

2020年08月10日  | 移动技术网IT编程  | 我要评论
能使用request对象获取用户请求 使用response对象处理响应 使用转发与重定向控制页面跳转 掌握session的原理及应用 掌握include指令的应用

JSP内置对象response

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

response对象

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

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网