JSP数据交互(一 response对象)
response对象
JSP内置对象response
学习了如何使用JSP技术获取请求信息,JSP技术是如何将服务器响应返回给客户端的?下面介绍JSP内置对象response如何实现用户响应。
response对象
JSP包含多个内置的对象,各自有不同的功能。与request对象相应的是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
下一篇: Vue提示“[vue-router] Named Route ‘Home‘ has a default child route. When navigating to this named rout“
推荐阅读
-
PHP访问一次数据库交互的大致步骤_PHP教程
-
jsp连接sql数据库的步骤(用jsp连接sql做一个登录界面)
-
Jsp中response对象的所有属性详细介绍
-
jsp连接sql数据库的步骤(用jsp连接sql做一个登录界面)
-
JSP内置对象:Request和Response的简单介绍及使用
-
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
-
多个jsp页面共享一个js对象的超级方法
-
JSP中的PreparedStatement对象操作数据库的使用教程
-
【转载】 C#中手动创建一个DataTable对象并写入数据
-
Python基础一: 计算机基础,Python相关介绍,变量,常量,注释,基础数据类型(int,str,bool),用户交互input,流程控制语句if