第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 |
|
处理HTML标记
- input标记
※ 在form表单中将input标记作为子标记来指定form表单中数据的输入方式以及form表单的提交键。
※ input标记属于空标记,即没有标记体,所以input标记没有开始标签和结束标签。
※ 空标记体的基本格式是 —> <标记名称 属性列表 />
※ < input > 标记的基本格式 —> < input type = “GUI对象” name = “GUI对象的名字” value = “GUI中的默认值” />
- 文本框text
当type属性值指定输入方式的GUI是text时,除了用name为text指定名字外,还可以为text指定其他的一些值。比如:其中size是text的长度(单位是字符),algin是text在浏览器窗体中的对齐方式,maxlength指定text可输入的最多字符。request对象通过name指定的名字来获取用户在text输入的字符串。1
<input type = "text" name = "m" value = "h" size = "8" algin = "left" maxlength = "9">
- 单选框 radio\※ request对象调用getParameter方法获取被选中的radio中value属性指定的值。
1
2<input type = "radio" name = "hi" value = "男" algin = "top" checked = "ok" />
<input type = "radio" name = "hi" value = "女" algin = "top" />
※ 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,用户输入的信息用”*”回显,防止他人偷看口令。※ 用户在口令框中输入tiger,单击提交键,tiger被提交给form表单请求的页面,请求的页面的内置对象request调用getPatameter方法获取password提交的值tiger(password仅仅起着不让别人偷看的作用,不提供加密措施)。1
<input type = "password" name = "me" size = "12" maxlength = "30" />
- 隐藏 hidden
当type属性指定输入方式是hidden时,input没有可见的输入界面,form表单会将input标记中value属性的值提交给所请求的页面。1
<input type = "hidden" name = "nogui" value = "hello" />
- 提交键 submit单击提交键后,form表单请求的页面才有机会获取form表单提交的各个数据
1
<input type = "submit" name = "me" value = "确定" size = "12" />
- 重置键 reset
重置键将表单中输入的数据清空,以便重新输入数据。1
<input type = "reset" value = "重置" />
- 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指定的值。
- textArea标记
- < textArea >是一个能输入或显示多行的文本区。在form表单中使用< textArea >作为子标记可以提交多行文本给所请求的JSP页面。
- < textArea >的基本格式为:
1
2<textArea name = "名字" rows = "文本可见行数" cols = "文本可见列数">
</textArea>
- 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="提交"/>
- 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时,相当于没有边框。
- < image >标记
- 使用image标记可以显示一副图像,image标记的基本格式为:
1
<image src = "图像文件的URL">描述文字</image>
- 如果图像文件和当前页面在同一Web服务目录中,图像文件的地址就是该图像文件的名字,如果图像文件在当前Web服务目录一个子目录中,比如image子目录中,那么“图像文件的URL”就是“image/图像文件的名字”
- image标记中可以使用width和height属性指定被显示的图像的宽和高,如果省略width和height属性,image标记将按图像的原始宽度和高度来显示图像。
- embed标记
- 使用embed标记可以播放音乐和视频,当浏览器执行该标记时,会把浏览器所在及其上的默认播放器嵌入到浏览器中,以便播放音乐或视频文件。
- embed标记的基本格式
1
<embed src = "音乐或视频文件的URL">描述文字</embed>
- embed标记中经常使用的属性及取值如下:
- autostart属性取值true或false,autostart属性的值用来指定音乐或视频文件传送完毕后是否立刻播放,该属性的默认值是false。
- loop属性取值正整数指定音乐或视频文件重复播放的次数,取值-1为无限循环播放。
- width和heigh属性取值均为正整数,用width和heigh属性的值指定播放器的宽和高,如果省略width和heigh属性,将使用默认值。
- 属性值格式的说明
- 许多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重写:然后将链接目标写成<%= str %>即可。例如,将example_4_13_a.jsp的代码:
1
String str = response.encodeRedirectURL("example_4_13_b.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,找到将其中的30修改成所要求的值即可(单位为分钟)。
1
2
3<session-config>
<session-timeout>30</session-timeout>
</session-config>
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
6out.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内置对象/