JSP数据交互(一)

什么的JSP内置对象

JSP内置对象,就是在编写JSP页面时,不需要做任何声明就可以直接使用。

  • 问题 :为什么JSP内置对象不需要实例化?

所谓内置对象就是由Web容器加载的一组Servlet API的实例 , 这些实例由JSP规范进行了默认的初始化操作 , 可以直接在JSP中使用 .特别需要注意的是JSP的内置对象名称均是JSP的保留字 , 不得当作自定义变量名使用;

JSP内置对象out

out 内置对象是在JSP开发过程中使用最为频繁,同时也是最简单的。out对象用于向浏览器输出数据。

  • void print(Object o):向客户端打印信息(将各种类型的数据转换为字符串)
  • void write(charset):向客户端打印数据(字符,字符数组,字符串)
  • void println(Object o):向客户端打印数据(将各种类型的数据转换为字符串)并换行

JSP内置对象request

  • request : request对象主要用于处理客户端请求
    在这里插入图片描述
乱码问题
以post方法提交的表单数据中有中文字符时
  • Tomcat对请求数据默认采用ISO-8859-1字符集进行解码,request 对象的getParameter方法得到的字符串是以 ISO-8859-1 转换而来的,所以在获取请求参数值之前,调用setCharacterEncoding ( "UTF-8“ )方法,将请求的解码方式设定为 UTF-8。注意:页面和浏览器发请求也应一致使用 UTF-8 编码, 通过 JSP 页面设置 page 指令的 contentType属性,指定页面内容的编码格式如下:
	<% page contentType=”text/html;charset=UTF-8”%>
  • contentType和pageEncoding的区别:contentType定义响应的资源类型,也可以包含JSP页面和响应内容的字符集;pageEncoding指定JSP文件的字符集及默认的contentType字符集。
以get方法提交的表单数据中有中文字符时
  • 当采用GET方式提交表单时,提交的数据作为查询字符串被附加到URL的末端发送到服务器,对于这部分数据,在服务器调用setCharacterEnCoding ( ) 方法是不起作用的,我们需要得到请求参数值后,进行编码转换,在上面的示例中,将表单的提交方式改为 method= ‘get’,则在注册提交页reginfo中将获得用户名的代码修改:
	String name = request.getParameter("name");
	name=new String(name.getBytes(“ISO-8859-1”),”UTF-8”);
  • 其中,nama.getBytes(“ISO-8859-1”)是按照 “ISO-8859-1”字符集编码把 name 字符串转换为btye数组,再通过new String()方法,使用指定的”UTF-8”字符集把 byte 数组构造为一个新的String;
  • 在 Tomcat 中设置字符集:

当表单采用 GET 方法提交时,虽然可以通过构造一个新的String 的方式解决中文乱码问题,但是当获取多个参数值时.每个参数都进行重新编码,操作比较烦琐,效率也不高。这时可以通过Tomcat中设置字符集的方式解决,配置方式如下:找到 Tomcat 目录结构\conf\server . xml 文件,元素中添加 URIEncoding 属性,将它的值设置为 “UTF-8 “;

	<Connector port="8080" protocol="HTTP/1.1" 
	connectionTimeout="20000" 
	redirectPort="8443" URIEncoding="UTF-8" />
  • 在 Tomcat 中设置了字符集编码,对于浏览器以 GET 方式提交的数据则无须在 JSP页面中再进行重新编码处理 (注意浏览器需以 UTF-8,编码发送 URL);

JSP内置对象response

  • 与request对象相对应的是response对象,response对象用于响应客户请求并向客户端输出信息;

在这里插入图片描述

转发与重定向

  1. 什么是转发

从程序运行的角度理解. 即当客户端发送一个请求到服务器后, Web 服务器在容器内部完成求跳转, 然后将最终的结果发送给浏览器,整个过程都是在容器内部完成的,而对应到客户端,无论服务器内部如何处理,作为浏览器都只是提交了一个请求,因而客户端的 URL 地址不会发生改变;

转发的实现很简单,使用 request 的 getRequestDispatcher ( ) 方法得到 RequestDispatcher 对象,此对象用于封装一个由路径所标识的服务器资源,然后用这个对象调用 forward()方法,将请求传递服务器上另外的 JSP 页面或者 HTML 文件;

  1. 什么是重定向

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

转发与重定向的区别
  1. 转发对象是request,重定向是response;
  2. 转发地址栏不显示转向后的地址,重定向显示;
  3. 转发是服务器发挥作用。将统一资源在服务器传递,重定向是客户端发挥作用。发送一个新的请求实现页面跳转;
  4. 转发是一次请求,一次响应;重定向是两次请求,两次响应;

  • 如果需要在重定向的情况下将简单数据(值类型、字符串)传递到目标页面;也以使用查询字符串(Query String)实现:
	response.sendRedirect(“welcome.jsp?username=”+name”);

查询字符串以名值对方式 存储数据,通过“?”连接在URL的后面,多个名值对可以使用“&”进行分隔;


查询字符串的应用
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

        <title>选择喜欢的颜色</title>

    </head>

    <body>

         请从以下7种颜色中,选择你最喜欢的颜色<br/>

        <a href="color.jsp?color=赤色">赤色</a>&nbsp;&nbsp;

        <a href="color.jsp?color=橙色">橙色</a>&nbsp;&nbsp;

        <a href="color.jsp?color=黄色">黄色</a>&nbsp;&nbsp;

        <a href="color.jsp?color=绿色">绿色</a>&nbsp;&nbsp;

        <a href="color.jsp?color=青色">青色</a>&nbsp;&nbsp;

        <a href="color.jsp?color=蓝色">蓝色</a>&nbsp;&nbsp;

        <a href="color.jsp?color=紫色">紫色</a>

    </body>

</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

        <title>我喜欢的颜色</title>

    </head>

    <body>

    <%  

        //已在Tomcat中设置字符集为“UTF-8”

        String color = request.getParameter("color");

    %>

        你最喜欢的颜色是:<%=color%>

    </body>

</html>

通过上面的代码, 可以发现数据传递成功了:代码中的a标签部分,在跳转页面的后面都有一个 ‘?’. 以及一个参数名 ‘color’,每一个参数的值就是所选择的颜色。而在结果页面中使用 request 对象的 getParameter ) 方法 , 就可取到参数 'color" 的值,达到了数据的传递效果;

注:使用超链接进行数据传递时: 采用的是 GET 方式提交请求,如果在传递裁据中存中 文,使用 request 对象直接获取时,容易产生乱码


JSP内置对象session

浏览器与Web服务器之间是使用HTPP协议进行通信的,HTTP协是一种基于请求/响应模式的 无状态的访问协议。
无状态:这意味着每次客户端检索网页时,都要单独打开一个服务器连接,因此服务器不会记录下先前客户端请求的任何信息。它与FTP、Telnet等协议不同,FTP等协议可以记住用户的连接信息。


什么是会话?

  • session一词的原义是指有始有终的一系列动作,在实际应用中通常翻译为会话。

  • 对Web开发来说,一个会话就是在一段时间内一个用户与 Web 服务器的一连串相关的交互过程,它可包含浏览器与服务器之间的多次请求,响应过程:在一次会话中,用户可能会多次请求访问一网页,也有可能请求访问同一个服务器的其他资源;

  • 会话机制是一种服务器端的机制,当用户向服务器发出第一次请求时,服务器会为该用户创建唯一的会话,会话将一直延续到用户访问结束;

  • 当服务器接收到客户端的请求时,服务器首先会判断是否已经创建了与该客户端对应的会话,如果已经创建就将该请求与此会话相关联,如果没有包建,则会创建一个新会话,此客户端之后发送的请求将关联到该会话;

  • 而服务器判断是否创建了相关会话,是通过一个唯一的标识 sessionid来实现的。如果在客户端请求中包含了一个sessionid,则说明在此前已经为客户端创建了会话,服务器就会根据这个 sessionid将对应的会话对象读取出来;否则就会创建一个新的会话对象并生成一个 sessionid,并将 sessionid在本次晌应的过程返回客户端保存;

在这里插入图片描述

会话失效
  • 会话也是有时效的,使会话失效的方式有两种: 一种是会话超时;另一种是手动调用方法设置失效;

  • 会话超时是指两次请求的时间间隔超过了服务器允许的最大时间间隔;

会话超时间隔可以通过三种方法设置
  1. 通过 session 对象的setMaxInactiveInterval( )方法设置,单位是秒;
	 <%
		session.setAttribute("login","admin");
		//参数 600 的单位是秒, 表示在 10 分钟后 session对象失效;
		session.setMaxInactiveInterval(600);
		response.sendRedirect("admin.jsp");
	%>
  1. 在项目的web.xml中设置,单位是分钟,设置为0或负数,表示永不超时;
  <session-config>
        <session-timeout>30</session-timeout>
  </session-config>
  1. 在应用服务器中设置,在 Tomcat目录下的/conf/web.xml文件中找到<sesston-config>元素, 其中<sesston-config>元素中的 30 就是默认的时间,单位是分钟,可以修改其值;

include指令

  • 文件引用指令include,将一些可以重用的内客写入一个单独的文件,然后通过 include 指令引用该文件 , 从而缓解代码的冗余问題, 并且修改时也更方便;
  • include 指令的基本语法:以<%@ 开始,以 %> 结束。
	<%@  include file="应用文件路径 " %>
  • include 指令表示,在 JSP 编译时插入一个包含文本或代码的文件,这个包含的过程是静态的,包含的文件可以是 JSP 页面、HTML 网页、文本文件等。

  • include 指令只有一个 fi1e 属性 , 表示被包含的文件路径;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值