第四章 —— JSP内置对象

4.1 request  对象

    HTTP通信协议是用户与服务器之间一种提交信息与乡音琯溪的通信协议。在JSP中,内置对象request封装了用户提交的信息,那么该对象调用相应的方法可以获取封装的信息,即使用该对象可以获取用户提交的信息。

    用户通常使用HTML的form表单请求访问服务器的某个JSP页面或servlet,并提交必要信息给所请求的JSP页面。表单的一般格式是:

<form action = "请求访问的页面或servlet" method = get | pose>

    提交手段

</form>

其中,<form>是form表单的开始标签,</form>是结束标签,开始标签和结束标签之间是form表单的标记体的内容。action是form表单的属性,其属性只给出表单请求访问的JSp页面或servlet。form表单中的method属性取值get或post。get方法和post方法的主要区别是:使用get方法提交的信息会在提交的过程中显示在浏览器的地址栏中,而post方法提交的信息不会显示在地址栏中。提交手段包括文本框、列表、文本区等,例如:

<form action = "请求访问的页面或servlet" method = get | pose>

    <input type = "text" name = "boy" value = "ok" />

    <input type = "submit" name = "submit" value = "提交" />

</form>

    该form表单使用post方法向请求访问的tom.jsp页面提交信息,提交信息的手段是text(文本框),文本框的名字由name属性的值指定(例如,名字是boy)。在文本框输入信息(其中默认值是ok),然后单击submit提交键向服务器的JSP页面tom.jsp提交信息。

4.1.1 获取用户提交的信息

    request对象获取用户提交信息的最常用的方法是getParameter(String s)。例如:

 

     如果form表单中的action请求的页面是当前页面,可以用双引号或单引号代替当前页面,即携程action = "" 或 action = ' ',注意双引号或单引号中不能含有空格。

4.1.2 处理汉字信息

    request对象获取用户提交的信息中如果含有汉字字符或其他非ASCII字符,就必须进行特殊的处理方式,以防出现乱码现象。

    JSP页面文件的编码为UTF-8编码,只要让request对象在获取信息之前调用setCharacterEncoding方法设置编码为UTF-8就可以避免乱码现象,代码如下:

request.setCharacterEncoding("UTF-8");

例如:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>transfor</title>
</head>
<style>
    #tom{
        font-family: 宋体;font-size: medium;color: black;
    }
</style>
<body id="tom" bgcolor="#f0f8ff">
可以输入各种语言的文字,单机提交键:<%
String content = "good morning,早上好";
%>
<form action="" method="post">
<textarea name ="language" id="tom" rows="3" cols="9">
    <%=content%>
</textarea>
</form>
<%
    request.setCharacterEncoding("utf-8");
    String variousLanguages = request.getParameter("language");
    out.print(variousLanguages);
%>
</body>
</html>

运行结果:

4.1.3 常用方法举例

    当用户访问一个页面时,会提交一个HTTP请求给Tomcat服务器,这个请求包括一个请求行、HTTP头和信息提,例如:

post/example3_1.jsp/HTTP.1.1

host:localhost:8080

accept-encoding:gzip,deflate

其中,首行叫请求行,规定了向访问的页面请求提交信息的方式,例如post、get等方式,以及请求的页面的名字和使用的通信协议。

    第2、3行分别是两个头(Header):host和accept-encoding,称host、accept-encoding是头名字,而localhost:8080以及gzip、deflate分别是两个头的值。一个典型的请求通常包含很多的头,有些透视标准的,有些和特定的浏览器有关。

    一个请求还包含信息提,即HTML标记组成的部分,可能包括各式各样用于提交信息的表单等,如:

<form action = "tom.jsp" method = "post">

    <input type = "text" name = "boy" value = "ok"/>

    <input type = "submit" name = "submit" value = "提交"/>

</form>

4.1.4 处理 HTML 标记

    目前的HTML大约有100多个标记,这些标记可以描述数据的显示格式。

(1)form标记

    习惯称form标记为form表单,由于用户经常需要使用form表单提交数据,所以有必要对form表单进行简明的介绍。

    form表单的一般格式是:

<form action = "请求访问的页面或servlet" method = get | post >

        各种提交手段

         提交键

</form>

其中,<form>是form表单的开始标签,</form>是结束标签,开始标签和结束标签之间是form表单的标记体内容。action是form表单的属性,给出表单请求访问的JSP页面或servlet。form表单中的method属性取值get或post。get方法和post方法的主要区别是:使用gey方法提交的信息会再提交的过程中显示在浏览器中的地址栏中,而post方法提交的信息不会显示在地址栏中。提交手段包括文本框、列表、文本区等,例如:

<form action = "tom.jsp" method = "post">

    <input type = "text" name = "boy" value = "ok" />

    <input type = "submit" name = "submit" vlue = "提交" />

</form>

    form表单标记经常将下列标记作为form表单的子标记,以便提供提交数据恶的手段,这些标记都以GUI形式出现,方便用户输入或选择数据,例如,文本框、下拉列表、滚动列表等。

  • <input - - - />
  • <select - - -></select>
  • <option - - - ></option>
  • <textArea - - - ></textArea>

(2) input标记

    在form表单将input标记作为子标记来指定form表单中数据的输入方式以及form表单的提交键。input标记属于空标记,即没有标记体,所以input标记没有开始标签和结束标签。<input>标记的基本格式:

<input type = "GUI对象" name = "GUI对象的名字" value = "GUI中的默认值" />

    input中的type属性的值指定输入方式的GUI对象,name属性的值指定这个GUI对象的名字。Tomcat服务器的内置对象request通过name指定的名字来获取GUI对象中提交的数据。GUI对象可以是text、checkbox、submit等。(具体细节自行查找)

4.1.5 处理超链接

    HTML的超链接标记

<a herf = 链接的页面地址>文字说明</a>

例如:

<a herf = "example4_9_receive.jsp">购买</a>

    用户可以单击超链接标记的文字说明,访问超链接给出的链接页面。使用超链接标记时还可以增加参数,一边想所连接的页面传递值,格式如下:

<a herf = 链接的页面地址?参数1 = 字符串1&参数2 = 字符串2 . . . >文字说明</a>

    超链接所链接的页面,使用request对象调用getParameter("参数")方法获得超链接的参数传递过来的参数的值,即字符串。例如:

String idStr = request.getParameter("id");

    注:超链接标记向所链接的页面传递的参数的值,即字符串中不允许含有非ASCII字符。

4.2 response 对象

    当用户访问一个服务器的页面时,会提交一个HTTP请求,服务器收到请求时,返回HTTP响应。响应和请求类似,也有某种结构,每个相应都有状态行开始,可以包含几个头以及可能的信息体。

4.2.1 动态响应 contentType 属性

页面用page指令设置页面的contentType属性的值,那么Tomcat服务器将按照这种属性值做出响应,将页面的静态部分返回给用户,用户浏览器接收到该响应就会使用相应的手段处理所接收到的信息。由于page指令只能为contentType指定一个值来决定响应的MIME类型,如果想动态的改变这个属性的值来响应用户,就需要使用response对象的setContentType(String s)方法来改变contentType的属性值,该方法的参数可取值:text/html、text/plain、image/gif等。

4.2.2 response 对象的 HTTP 文件头

    当用户访问一个页面时,会提交一个HTTP请求给Tomcat服务器,这个请求包括一个请求行、HTTP头和信息体,例如:

post/example3_1.jsp/http.1.1

host:localhost:8080

accept-encoding:gzip,deflate

其中,首行叫请求行,规定了像请求访问的页面提交信息的方式,例如,host、accept-encoding是头名字,而localhost:8080以及gzip。delfate分别是两个头的值。一个典型的请求通常包含很多的头,有些头是标准的,有些和特定的浏览器有关。

    同样,响应也包括一些头。response对象可以使用方法

addHeader(String head,String value);

setHeader(String head,String value)

动态添加新的响应头和头的值,将这些头发送给用户的浏览器。如果添加的头已经存在,则先前的头被覆盖。

4.2.3 response 对象的重定向

    在某些情况下,当响应用户时,需要将用户重新引导至另一个页面。

    可以使用response对象的sendRedirect(URL url)方法实现用户的重定向,即让用户从一个页面跳转到sendRedirect(URL url)中url指定的页面,即所谓的用户端跳转。需要注意当使用sendRedirect(URL url)方法将用户从当前页面重定向另一个页面是,Tomcat服务器还是要把当前JSP页面执行完毕后才实施重定向操作,但Tomcat服务器不再给用户看当前页面的执行效果。

4.3 session 对象

    Session用于记录用户的状态。Session指的是一段时间内,单个客户端与Web服务器的一连串相关的交互过程。在一个Session中,客户可能会多次请求访问同一个资源,也有可能请求访问各种不同的服务器资源。且Session是由服务器端创建的。

4.3.1 session 对象的 id

    服务器给它分配一个session,这个session有一个ID号,也就是说,不同用户的session是不一样的,每个用户都有一个session,每个session都有一个不同的ID。在返回请求的时候,它会把session的ID号返回给客户端,然后客户端在发第二次请求的时候,这个请求就包括session   ID了,通过这种方式识别用户的多次请求,因此session   ID是一个很关键的问题。

    session对象被分配了一个String类型的ID,服务器将ID发送到客户端,存放在客户的Cookie中。有些时候,如果清理掉Cookie的话,再访问服务器就和没登录一样,因为将服务器缓存在浏览器的内容给清空了,因此session和Cookie是配套使用的。同一用户在同一Web服务目录中的各个页面的session相同,不同用户的session对象互不相同,具有不同的ID。

4.3.2 session 对象与 URL 重写

    session依赖Cookie,这是因为服务器需要把sessionId保存到客户端浏览器。如果用户的浏览器关闭了Cookie功能,那么session就不能使用了!

    可以在浏览器关闭了Cookie后使用URL重写的方法保存sessionId,这需要在每个URL后面都加上sessionId。这样用户的请求中就包含了sessionId,服务器就可以通过sessionId找到对应的session对象了。

    使用response.encodeURL("请求地址")方法对URL进行编码,这样URL中会智能的添加sessionId。当浏览器支持cookie时,response.encodeURL()方法不会在URL后追加sessionId;当浏览器不支持cookie时,response.encodeURL()方法会在URL后追加sessionId。

4.3.3 session 对象存储数据    

调用session对象的方法保存或读取客户在服务器端的有关数据。

session对象处理数据的方法:

public void setAttribute(String key, Object obj)//key是String类型的,value是Object类型的

public Object getAttibute(String key)//key是String类型的,value是Object类型的,在使用的过程中,不要忘记强制转换

public Enumeration getAttributeNamesObject

public void removeAttribute(String name)

数据有效范围:同一个session (用户)、同一个web应用下面,一个页面存的内容,另外一个页面是可以访问到的

4.3.4 session 对象的生存期限

session:表示客户端与服务器的一次会话,存在于服务器端。

  • 创建:

当用户访问jsp页面时,会自动创建一个session。
如果访问的是servlet,看需要,若需要session,则调用getSession()方法。

  • 活动周期:

在同一会话中,页面发生跳转,任然属于同一session。
只要当前会话页面没有全部关闭,那么在同一浏览器的不同页面的访问任然属于同一session

  • 销毁:

手动调用session.invalidate()方法
等待会话超时,默认30分钟 可以修改
服务器压力过大,会自动销毁一部分

4.4 application 对象

     当Web服务器启动时,Web服务器会自动创建一个application对象。application对象一旦创建,它将一直存在,直到Web服务器关闭。
一个Web服务器通常有多个Web服务目录 (网站),当Web服务器启动时,它自动为每个Web服务目录都创建一个application对象,这些application对象各自独立,而且和Web服务目录一一对应。
访问同一个网站的客户都共享一个application对象,因此,application对象可以实现多客户间的数据共享。
访问不同网站的客户,对应的application对象不同。
     application对象的生命周期:从Web服务器启动,直到Web服务器关闭。
注意:一个Web应用程序启动后,将会自动创建一个application对象,而且在整个应用程序的运行过程中只有一个application对象,也即所有访问该网站的客户都共享一个application对象。

    application对象的作用范围:application对象是一个应用程序级的对象,它作用于当前Web应用程序,也即作用于当前网站,所有访问当前网站的客户都共享一个application对象。

4.4.1 application对象的常用方法

  public void setAttribute(String key ,Object obj)

application 对象可以调用该方法将参数Object 指定的对象 obj 添加到application对象中,并为添加的对象指定了一个索引关键字,如果添加的两个对象的关键字相同,则先前添加对象被清除。

  public Object getAttibue(String key)

获取application 对象含有的关键字是key 的对象。由于任何对象都可以添加到application对象中,因此用该方法取回对象时,应强制转化为原来的类型。

  public Enumeration getAttributeNames()

application 对象调用该方法产生一个枚举对象,该枚举对象使用nextElemets()遍历application对象所含有的全部对象。

  public void removeAttribue(String key)

从当前application 对象中删除关键字是key 的对象。

  public String getServletInfo()

获取Servlet 编译器的当前版本的信息

4.4.2 application 留言板

    详情跳转至其他博主。

4.5 out 对象

out对象是javax.servlet.jsp.JspWriter类的实例化对象,主要功能是完成页面的输出操作,使用print()和println()方法输出,但实际开发中基本不用out,都会使用表达式来完成页面的输出操作

out对象的常用方法:

得到总的Buffer大小

 public int getBufferSize()    

得到可用的Buffer大小

 public int getRemaining()   

<%@ page contentType="text/html" pageEncoding="utf-8" language="java" %>
<%@ page import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
	<title>www.liuke.com</title>
</head>
<body>
	<%
		int buffer = out.getBufferSize();
		int avaliable = out.getRemaining();
		int used = buffer - avaliable;
	%>
	<h1>缓冲区总大小:<%= buffer%></h1>
	<h1>缓冲区已用:<%= used%></h1>
	<h1>缓冲区剩余:<%= avaliable%></h1>
</body>
</html>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值