第4章 JSP内置对象

JSP内置对象

request对象

  • 在JSP中,内置对象request封装了用户提交的信息,那么该对象调用相应的方法可以获取封装的信息,即使用该对象可以获取用户提交的信息。
  • 用户通常用HTML的form表单(也称form标记)请求访问服务器的某个JSP页面,并提交必要信息给所请求的JSP页面(servlet).
    1
    2
    3
    <form action = "请求访问的页面或Servlet" method = get | post>
    提交手段
    </form>
  • action是form表单的属性,其属性指给出表单申请访问的JSP页面或servlet。
  • for表单中的method属性取值get或post。get方法和post方法的主要区别是
    • 使用get方法提交的信息会在提交的过程中显示在浏览器的地址栏中
    • 使用post方法提交的信息不会显示在地址栏中。
  • 提交手段包括文本框、列表、文本区等,例如
    1
    2
    3
    4
    <form action = "tom.jsp" method = "post">
    <input type = "text" name = "boy" value = "ok" />
    <input type = "submit" name = "submit" value = "提交" />
    </form>,
  • form表单请求访问的JSP页面可以让内置request对象调用getParameter(String s)方法,并让s取值是input标记中name给出的文本框text的名字(比如boy),获取该表单通过文本框text提交的文件信息比如:
    1
    request.getParameter("boy");

获取用户提交的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
--- example4_1.jsp
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<HTML><body bgcolor = #ffccff>
<form action="example4_1_computer.jsp" method=post >
<input type="text" name="sizeA" value=9 size=6 />
<input type="text" name="sizeB" value=8 size=6 />
<input type="text" name="sizeC" value=8 size=6 />
<input type="submit" name="submit" value="提交"/>
</form>
</body></HTML>

--- example4_1computer.jsp
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<HTML><body bgcolor = #ccffff>
<p style="font-family:黑体;font-size:36;color:blue">
<%
String sideA=request.getParameter("sizeA");
String sideB=request.getParameter("sizeB");
String sideC=request.getParameter("sizeC");
try { double a=Double.parseDouble(sideA);
double b=Double.parseDouble(sideB);
double c=Double.parseDouble(sideC);
double p=(a+b+c)/2,area=0;
area=Math.sqrt(p*(p-a)*(p-b)*(p-c));
String result = String.format("%.2f",area);
out.println("<BR>三边:"+sideA+","+sideB+","+sideC);
out.println("<BR>三角形面积(保留2位小数):"+result);
}
catch(NumberFormatException ee){
out.println("<BR>请输入数字字符");
}
%>
</p></body></HTML>

处理HTML标记

  1. input标记
    ※ 在form表单中将input标记作为子标记来指定form表单中数据的输入方式以及form表单的提交键。
    ※ input标记属于空标记,即没有标记体,所以input标记没有开始标签和结束标签。
    ※ 空标记体的基本格式是 —> <标记名称 属性列表 />
    ※ < input > 标记的基本格式 —> < input type = “GUI对象” name = “GUI对象的名字” value = “GUI中的默认值” />
  • 文本框text
    当type属性值指定输入方式的GUI是text时,除了用name为text指定名字外,还可以为text指定其他的一些值。比如:
    1
    <input type = "text" name = "m" value = "h" size = "8" algin = "left" maxlength = "9">
    其中size是text的长度(单位是字符),algin是text在浏览器窗体中的对齐方式,maxlength指定text可输入的最多字符。request对象通过name指定的名字来获取用户在text输入的字符串。
  • 单选框 radio\
    1
    2
    <input type = "radio" name = "hi" value = "男" algin = "top" checked = "ok" />
    <input type = "radio" name = "hi" value = "女" algin = "top" />
    ※ request对象调用getParameter方法获取被选中的radio中value属性指定的值。
    ※ checked如果取值是一个非空的字符串,那么该单选框的初始状态就是选中状态。
  • 复选框 checkbox
    1
    2
    3
    4
    5
    6
    <input type = "checkbox" name = "item" value = "A" algin = "top" checked = "ok" />
    <input type = "checkbox" name = "item" value = "B" algin = "top" />
    <input type = "checkbox" name = "item" value = "C" algin = "top" checked = "ok" />
    <input type = "checkbox" name = "item" value = "D" algin = "top" />
    ※ 复选框与单选框的区别就是可以多选,即如果几个checkbox的name取值相同,那么同一时刻可有多个checkbox被选中。这时,request对象需调用getParameterValues(不是getParameter方法)获取被选中的多个checkbox中value属性指定的值。
    ※ checked如果取值是一个非空的字符串,那么该复选框的初始状态就是被选中状态。
  • 口令框 password
    当type属性指定输入方式的GUI是password,用户输入的信息用”*”回显,防止他人偷看口令。
    1
    <input type = "password" name = "me" size = "12" maxlength = "30" />
    ※ 用户在口令框中输入tiger,单击提交键,tiger被提交给form表单请求的页面,请求的页面的内置对象request调用getPatameter方法获取password提交的值tiger(password仅仅起着不让别人偷看的作用,不提供加密措施)。
  • 隐藏 hidden
    当type属性指定输入方式是hidden时,input没有可见的输入界面,form表单会将input标记中value属性的值提交给所请求的页面。
    1
    <input type = "hidden" name = "nogui" value = "hello" />
  • 提交键 submit
    1
    <input type = "submit" name = "me" value = "确定" size = "12" />
    单击提交键后,form表单请求的页面才有机会获取form表单提交的各个数据
  • 重置键 reset
    重置键将表单中输入的数据清空,以便重新输入数据。
    1
    <input type = "reset" value = "重置" />
  1. select/option
  • 下拉式列表和滚动列表通过select和option标记来定义,经常作为form的子标记,为表单提供选择数据的GUI。select标记将option作为子标记,形成下拉列表或滚动列表。
  • 下拉列表的基本格式:
    1
    2
    3
    4
    <select name = "myname">
    <option value = "item1">文本描述</option>
    <option value = "item2">文本描述</option>
    </select>
  • 在select中增加size属性的值就变成滚动列表,size的值是滚动列表的可见行的数目。
  • 滚动列表的基本格式:
    1
    2
    3
    4
    <select name = "myname" size = "正整数">
    <option value = "item1">文本描述</option>
    <option value = "item2">文本描述</option>
    </select>
  • request对象通过滚动列表的name指定的值来获取下拉列表或滚动列表中被选中的option的参数value指定的值。
  1. textArea标记
  • < textArea >是一个能输入或显示多行的文本区。在form表单中使用< textArea >作为子标记可以提交多行文本给所请求的JSP页面。
  • < textArea >的基本格式为:
    1
    2
    <textArea name = "名字" rows = "文本可见行数" cols = "文本可见列数">
    </textArea>
  1. style样式标记
  • style标记可用于定义HTML,其他标记中的字体样式。
  • style基本格式
    1
    2
    3
    4
    5
    6
    7
    8
    <style>
    #textStyle{
    font-family:宋体;font-size:18;color:blue
    }
    #tom {
    font-family:黑体;font-size:16;color:black
    }
    </style>
  • 其中,#字符之后的字符序列是样式名称,例如#textStyle给出的样式名称是textStyle(起一个自己喜欢且容易理解的名字),其它html标记可以让其id属性值是样式名称来使用这个样式。例如,段落标记p就可以如下使用textStyle样式:
    1
    <p id = "textStyle">你好</p>
  • textArea标记如下使用tom样式:
    1
    <textArea  name="english"  id = "tom" rows=5 cols=38>大家好 </textArea>
  • input标记如下使用textStyle样式:
    1
    <input type="submit"  name="submit" id = "textStyle" value="提交"/>
  1. table标记
  • 表格以行形式显示数据,不提供输入数据功能。经常将某些数据或GUI放置在表格中的单元格中,让界面更美观。
  • 表格由< table >标记定义,一般格式:
    1
    2
    3
    4
    5
    6
    7
    8
    <table border "边框的宽度">
    <tr width = "该行的宽度">
    <th width = "单元格的宽度">单元格中的数据</th>
    ...
    <td width = "单元格的宽度">单元格中的数据</td>...
    </tr>
    ...
    </table>
  • 其中,< tr >…< /tr >定义表格的一个行,< th >或< /td >标记定义这一行中的表格单元,二者的区别是< th >定义的单元着重显示,< td >称为普通单元,不着重显示
  • table中增加选项border可给出该表格边框的宽度,当border取值是0时,相当于没有边框。
  1. < image >标记
  • 使用image标记可以显示一副图像,image标记的基本格式为:
    1
    <image src = "图像文件的URL">描述文字</image>
  • 如果图像文件和当前页面在同一Web服务目录中,图像文件的地址就是该图像文件的名字,如果图像文件在当前Web服务目录一个子目录中,比如image子目录中,那么“图像文件的URL”就是“image/图像文件的名字”
  • image标记中可以使用width和height属性指定被显示的图像的宽和高,如果省略width和height属性,image标记将按图像的原始宽度和高度来显示图像。
  1. embed标记
  • 使用embed标记可以播放音乐和视频,当浏览器执行该标记时,会把浏览器所在及其上的默认播放器嵌入到浏览器中,以便播放音乐或视频文件。
  • embed标记的基本格式
    1
    <embed src = "音乐或视频文件的URL">描述文字</embed>
  • embed标记中经常使用的属性及取值如下:
    • autostart属性取值true或false,autostart属性的值用来指定音乐或视频文件传送完毕后是否立刻播放,该属性的默认值是false。
    • loop属性取值正整数指定音乐或视频文件重复播放的次数,取值-1为无限循环播放。
    • width和heigh属性取值均为正整数,用width和heigh属性的值指定播放器的宽和高,如果省略width和heigh属性,将使用默认值。
  1. 属性值格式的说明
  • 许多HTML标记都有属性,并可以指定属性的值,例如
    1
    <input type = "text" name = "testname" value = 10 />
  • 其中,type、name、value都是input标记的属性,属性值可以用双引号括起,也可以用单引号括起或者不用任何符号。

处理超链接

  • HTML的超链接:
    1
    <a href = 链接的页面地址>文字说明</a>
  • 用户单击超链接标记的文字说明,可以访问超链接给出的链接页面。使用超链接还可以增加参数,以便向所连接的页面传值,格式如下:
    1
    <a href=链接的页面地址?参数1=字符串1&参数2=字符串2… >文字说明</a>
  • 超链接所链接的页面,使用request调用getParameter(“参数”)获得超链接的参数传递过来的参数的值,即字符串。例如:
    1
    String idStr = request.getParameter("id");
  • 需要注意的是,超链接标记向所链接的页面传递的参数的值,即字符串中不允许含有非ASCII字符(例如汉字等)

response对象

与request对象相对应的对象是response对象。可以用response对象对用户的请求作出动态响应,向用户端发送数据。

response对象的重定向

  • response的sendRedirect(URL url)方法实现用户的重定向,即让用户从一个页面跳转到sendRedirect(URL: url)中url指定的页面。
  • 当使用sendRedirect(URL url)方法将用户从当前页面重定向另一个页面时,Tomcat服务器还是要把当前JSP页面执行完毕后才实施重定向(跳转)操作,但Tomcat服务器不再给用户看当前页面的执行效果。
  • 如果在执行sendRedirect(URL url)方法后,紧接着执行了return返回语句,那么Tomcat服务器会立刻结束当前JSP页面的执行。

session对象

  • HTTP协议是一种无状态协议。一个用户向服务器发出请求(request),然后服务器返回响应(response),在服务器端不保留用户的有关信息,因此当下一次发出请求时,服务器无法判断这一次请求和以前的请求是否属于同一用户。
  • Tomcat服务器可以使用内置session对象(会话)记录用户的信息。内置对象session由Tomcat服务器负责创建.

session对象的id

  • 当一个用户首次访问web服务目录中的一个JSP页面时,Tomcat服务器产生一个session对象,这个session对象调用相应的方法可以存储用户在访问该web服务目录中各个页面期间提交的各种信息。
  • 这个session对象被分配了一个String类型的id号,Tomcat服务器同时将这个id号发送到用户端,存放在用户(浏览器)的Cookie中。这样,session对象和用户之间就建立起一一对应的关系,即每个用户都对应着一个session对象(称作用户的会话),不同用户(不同浏览器)的session对象互不相同,具有不同的id号码。
  • 当用户再访问该Web服务目录的其它页面时,Tomcat服务器不再分配给用户的新session对象,而是使用完全相同的一个,直到session对象达到了最大生存时间或用户关闭自己的浏览器或Tomcat服务器关闭,Tomcat服务器将销毁用户的session对象
  • 简单地说,用户(浏览器)在访问一个Web服务目录期间,服务器为该用户分配一个session对象(称作和该用户的会话),服务器可以在各个页面使用这个session记录当前用户的有关信息。而且服务器保证不同用户的session对象互不相同。
  • 注意:同一个用户在不同的Web服务目录中的session是互不相同的。

session对象与URL重写

  • session对象能和用户建立起一一对应关系依赖于用户浏览器是否支持Cookie。
  • 如果用户不支持Cookie,JSP页面可以通过URL重写来实现session对象的唯一性。所谓URL重写,就是当用户从一个页面重新链接到一个页面时,通过向这个新的URL添加参数,把session对象的id传带过去,这样就可以保障用户在该Web服务目录的各个页面中的session对象是完全相同的。可以让response对象调用encodeURL()或encodeRedirectURL()方法实现URL重写,比如,如果从example4_13_a.jsp页面链接到example_4_13_b.jsp页面,首先在程序片中实现URL重写:
    1
    String str = response.encodeRedirectURL("example_4_13_b.jsp");
    然后将链接目标写成<%= str %>即可。例如,将example_4_13_a.jsp的代码:
    1
    <form action = "example_4_13_b.jsp" method = post>
    更改为:
    1
    <form action = <%= str %> method = post >

session对象存储数据

  • public void setAttribute (String key ,Object obj)。 session对象可以调用该方法将参数Object指定的对象obj添加到session对象中,并为添加的对象指定了一个索引关键字,如果添加的两个对象的关键字相同,则先前添加的对象被清除。
  • public Object getAttribute(String key)。获取session对象索引关键字是key的对象。由于任何对象都可以添加到session对象中,因此用该方法取回对象时,应显式转化为原来的类型。

session对象的生存期限

  • session对象的生存期限依赖于session对象是否调用invalidate()方法使得session无效或session对象达到了设置的最长的“发呆”状态时间以及用户是否关闭浏览器或服务器被关闭。
  • 所谓“发呆”状态时间是指用户对某个Web服务目录发出的两次请求之间的间隔时间(默认的发呆时间是30分钟)。
  • 打开Tomcat安装目录中conf文件下的配置文件web.xml,找到
    1
    2
    3
    <session-config>
    <session-timeout>30</session-timeout>
    </session-config>
    将其中的30修改成所要求的值即可(单位为分钟)。

application对象

application对象也是由Tomcat服务器负责创建,但与session对象不同的是,application对象被访问该Web服务目录的所有的用户共享,但不同Web服务目录下的application互不相同。

application对象的常用方法

  • public void setAttribute(String key ,Object obj)。application对象可以调用该方法将参数Object 指定的对象 obj添加到application对象中,并为添加的对象指定了一个索引关键字,如果添加的两个对象的关键字相同,则先前添加对象被清除。
  • public Object getAttibute(String key)。获取application对象含有的关键字是key的对象。由于任何对象都可以添加到application对象中,因此用该方法取回对象时,应显式转化为原来的类型。
  • 由于application对象对所有的用户都是相同的,因此,在某些情况下,对该对象的操作需要实现同步(synchronized)处理。

out对象

  • out对象是一个输出流,用来向用户端输出数据。在前面的许多例子里曾多次使用out对象进行数据的输出。out对象可调用如下的方法用于各种数据的输出,例如:
    1
    2
    3
    4
    5
    6
    out.print(boolean)或out.println(boolean) 用于输出一个布尔值。
    out.print(char) 或out.println(char) 输出一个字符。
    out.print(double) 或out.println(double)输出一个双精度的浮点数。
    out.print(fload) 或out.println(float)用于输出一个单精度的浮点数。
    out.print(long) 或out.println(long)输出一个长整型数据。
    out.print(String) 或out.println(String)输出一个String对象的字符序列。
  • 方法println和print的区别是:println会向缓存区写入一个换行,而print不写入换行。但是浏览器的显示区域目前不识别println写入的换行,如果希望浏览器显示换行,应当向浏览器写入”< br >”实现换行。

第4章 JSP内置对象
https://lzyjx.github.io.git/2023/05/23/JSP内置对象/
作者
六只羊
发布于
2023年5月23日
许可协议