第4章-JSP内置对象_第1页
第4章-JSP内置对象_第2页
第4章-JSP内置对象_第3页
第4章-JSP内置对象_第4页
第4章-JSP内置对象_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

<JSP程序设计>第4章

JSP内置对象

主要内容request对象response对象session对象out对象application对象难点使用Tag文件处理数据理解session对象使用session对象存储数据关键实践使用request对象使用response对象使用session对象第4章导读第4章JSP内置对象

JSP根据ServletAPI而提供了某些内置对象,不需要使用构造方法实例化就可以直接使用,并且不用编写任何额外的代码,就可以在JSP中自动使用到它。在JSP页面中可以获得的主要的5个内置对象:out对象:把信息回送到客户端的浏览器中。response对象:处理服务器端对客户端的一些响应。request对象:用来得到客户端的信息。application对象:用来保存网站的一些全局变量。session对象:用来保存单个用户访问时的一些信息。§4.1request对象

1.内置对象request封装了用户提交的信息,该对象调用相应的方法可以获取封装的信息.2.当客户端请求一个JSP页面时,JSP服务器会将客户端的请求信息包装在这个request对象中请求信息的内容包括请求的头信息(Header)、系统信息(比如:编码方式)、请求的方式(比如:GET或POST)、请求的参数名称和参数值等信息

客户通常采用表单提交信息,表单的格式:<formmethod=get|postaction=“提交信息的目的页面”>提交的手段</form>

例:input.htmlGet方式:<FORMMETHOD=get

ACTION="input.jsp">输入信息:<INPUTTYPE="text"NAME="info"><INPUTTYPE="submit"value="显示"></FORM>Html表单

Get和Post方式的比较:Get方式传送的数据会在地址栏中显示,不安全,同时数据长度受到URL长度的限制(地址栏最大能放4k-5k容量的文字)使用Post方式不存在以上问题(理论上是任意长度,但是如果上传内容过多,会出现HTTP超时限制)在数据量小、安全要求不高的情况下,get方法便于系统维护

§4.1request对象

在JSP中,内置对象request封装了用户请求页面时所提交的信息,该对象调用相应的方法可以获取封装的信息.即request对象可以获取用户提交的信息。用户在请求JSP页面时,通常会使用HTML表单提交信息,表单的一般格式是:

<FORMmethod=get|postaction="提交信息的目的地页面">

提交手段

</FORM>

例如用户提交信息表单:

<FORMaction="tom.jsp"method=post><INPUTtype="text"name="boy"value="ok"><INPUTTYPE="submit"value="送出"name="submit"></FORM>tom.jsp页面可以使用内置request对象获得用户提交的信息

request.getParameter("boy");

4.1.1获取用户提交的信息request对象获取用户提交信息的最常用的方法是getParameter(Strings).

例4-1,4-2P624.1.2处理汉字信息4.1.2处理汉字信息

当用request对象获取用户提交的汉字字符时,会出现乱码问题,所以对含有汉字字符的信息必须进行特殊的处理。方法一:首先,将获取的字符串用ISO-8859-1进行编码,并将编码存放到一个字节数组中,然后再将这个数组转化为字符串对象即可.如下所示:例4-3P64

<%

Stringstr=request.getParameter("box");byteb[]=str.getBytes("ISO-8859-1");str=newString(b);%>(推荐)方法二:取数据前先设置一个统一的编码,之后就按此编码进行数据的接收。直接用setCharacterEncoding(

)方法例如:将字符编码设置为GB2312request.setCharacterEncoding(“GB2312”);例4-3-1例4-3-24.1.3常用方法举例

可以用内置对象request对象来获取请求所提交的各类信息,request对象的常用方法如下:

getProtocol():获取请求使用的通信协议,如http/1.1等。getServletPath():获取请求的JSP页面所在的目录。getContentLength():获取HTTP请求的长度。getMethod():获取表单提交信息的方式,如POST或GET。getHeader(Strings):获取请求中头的值。getHeaderNames():获取头名字的一个枚举。getHeaders(Strings):获取头的全部值的一个枚举。getRemoteAddr():获取客户的IP地址。getRemoteHost():获取客户机的名称(如果获取不到,就获取IP地址).getServerName():获取服务器的名称。getServerPort():获取服务器的端口号。getParameterNames():获取表单提交的信息体部分中name参数值的一个枚举.

例4-4P664.1.4使用Tag文件处理有关数据JSP页面使用request对象获取用户提交的数据,然后使用Tag标记调用Tag文件,并将必要的数据传递给Tag文件。Tag文件负责处理数据,根据需要将处理结果显示给用户或返回给调用它的JSP页面。

例4-5P68example4_5.jsp用户提交三边

get.jsp调用tag并传递三边

Computer.tag计算面积并返回结果

4.1.5处理HTML标记JSP页面可以含有HTML标记,当用户通过浏览器请求一个JSP页面时,Tomcat服务器将该JSP页面中的HTML标记直接发送到用户的浏览器,由用户的浏览器负责执行这些HTML标记。而JSP页面中的变量声明、程序片以及表达式由Tomcat服务器处理后,再将有关的结果用文本方式发送到用户端的浏览器。

HTML是HypertextMarkedLanguage的缩写,即超文本标记语言。

4.1.5处理HTML标记_<FORM>标记

<FORM>标记被习惯地称作表单,用户经常需要使用表单提交数据。表单的一般格式是:<FORMmethod=get|postaction="提交信息的目的地页面"name="表单的名字">

数据提交手段部分</FORM>

其中<Form…>…</Form>是表单标记,其中的method属性取值get或post。

提交手段包括:通过文本框、列表、文本区等4.1.5处理HTML标记_<Input>标记

表单标记<Form>将<Input>标记作为子标记来指定表单中数据的输入方式以及表单的提交键。<Input>标记中的type属性可以指定输入方式的GUI对象,name属性用来指定这个GUI对象的名称。<Input>标记的基本格式:<Inputtype="输入对象的GUI类型"name="名字">

服务器通过属性name指定的名字来获取“输入对象的GUI类型”中提交的数据。“输入对象的GUI类型”可以是:text(文本框)、checkbox(检查框)、submit(提交键)等。文本框text:<Inputtype="text"name="me"value="hi"size="9"align="left"maxlength="30">单选框radio:<Inputtype="radio"name="rad"value="red"align="top"checked="java">

复选框checkbox:<Inputtype="checkbox"name="ch"value="pink"align="top"checked="java">口令框password:<Inputtype="password"name="me"size="12"maxlength="30">隐藏hidden:<Inputtype="hidden"name="h"value="123">提交键submit:<Inputtype="submit"name="me"value="确定"size="12">

重置键:reset:<Inputtype="reset">文本框,口令框和隐藏域传递参数

例:input1.html<FORMMETHOD=postACTION="input.jsp">输入信息:<INPUTTYPE="text"NAME="info"><INPUTTYPE="

password"NAME="psw"><INPUTTYPE="hidden"NAME="var"value=""><INPUTTYPE="submit"value="显示"></FORM>如何接收多个同名参数?

例:request02.html原因:在整个操作过程中复选框的内容只能得到一个,因为getParameter()方法,只能接收一个参数的内容,如果想要接收多个参数,则必须使用:publicString[]getParameterValues(Stringname)此方法返回一个数组,表示接收同名的一组参数。

例:request03.jsp例如:

String[]inst=request.getParameterValues("inst");可以显示同名的多个参数值。publicString[]getParameterValues(Stringname)此方法返回一个数组,表示接收同名的一组参数。getParameterNames()方法此方法可以取得表单提交的所有参数名称

例:request04.html思考:如何同时显示复选框的全部内容?request05.jsp4.1.5处理HTML标记_<Select>、<Option>格式下拉式列表和滚动列表通过<Select>和<Option>标记来定义。基本格式为:<Select><Option><Option>

…</Select>

(1)下拉列表

<Selectname="shulie"><Optionvalue="cat">你选了小猫

<Optionvalue="dog">你选了小狗

…</Select>(2)滚动列表:在Select中指定size属性的值就变成滚动列表,size的值是滚动列表的可见行的个数。(与下拉式列表的主要区别为:<SELECT>中的size属性值取大于1的值。此值表示在选择栏中不拖动滚动条可以显示选项的数目。)<Selectname="shulie"size=2><Optionvalue="1">计算1到n的连续和

<Optionvalue="2">计算1到n的平方和

…</Select>

例4-6P72

例4-7P744.1.5处理HTML标记_<TextArea>格式<TextArea>标记在表单中指定一个能输入多行文本的文本区域。基本格式为:<TextAreaname="ilovethisgame"Rows="4"Cols="20"></TextArea>其中行数和列数表示不用滚动条就可看到的部分4.1.5处理HTML标记_表格表格由<table>、</table>标记定义。一般格式:<table><trwidth="该行的宽度"><thwidth="单元格的宽度">单元格中的数据</th>

…<tdwidth="单元格的宽度">单元格中的数据</td></tr>

…</table>其中<tr>…</tr>定义表格的一个行,<th>或<td>标记定义这一行中的表格单元,二者的区别是:<th>定义的单元加重显示,<td>称做普通单元,不加重显示。一行中的加重单元和普通单元可以交替出现,也可以全是加重单元或普通单元。<tableborder=1>中增加选项border可指明该表格是否带有边框。

例4-8P764.1.5处理HTML标记_<img>与<image>标记

使用<img>或<iamge>标记都可以显示一副图像,标记的基本格式为:

<imgsrc="图像文件的URL">描述文字</img><imagesrc="图像文件的URL">描述文字</image>

如果图像文件和当前页面在同一Web服务目录中,“图像的文件的URL”就是该图像文件的名字;如果图像文件在当前Web服务目录一个子目录中,比如picture子目录中,那么“图像文件的URL”就是“picture/图像文件的名字”.

标记中可以使用width和height属性指定被显示的图像的宽为和高,如果省略width和height属性,标记将按图像的原始宽度和高度来显示图像。

4.1.5处理HTML标记_<embed>标记使用<embed>标记可以播放音乐和视频,当浏览器执行该标记时,会把浏览器所在机器上的默认播放器嵌入到浏览器中,以便播放音乐或视频文件。<embed>标记的基本格式为:

<embedsrc="音乐或视频文件的URL">描述文字</embed>

如果音乐或视频文件和当前页面在同一Web服务目录中,<embed>标记中src属性的值就是该文件的名字;如果视频文件在当前Web服务目录一个子目录中,比如avi子目录中,那么<embed>标记中src属性的值就是“avi/视频文件的名字”。

<embed>标记中经常使用的属性及取值如下:autostart属性的值用来指定音乐或视频文件传送完毕后是否立刻播放,autostart取值“true”或“false”,该属性的默认值是false。loop属性的取值为正整数,该属性的值用来指定音乐或视频文件重复播放的次数。例4-9P77总结必须掌握:使用request接收参数:getParameter(),getParameterValues()字符乱码的处理§4.2response对象

response对象是一个javax.servlet.http.HttpServletResponse类的实例response对象对客户端的请求做出响应,向客户端发送数据response对象的常用方法

voidsetContentType(String)设置内容的返回MIME类型 voidsendRedirect(String)重定向,从一个页面跳转到另一个页面 voidsetHeader(String,String)设置头信息的文字和内容

voidaddCookie(Cookie)向客户端增加Cookie4.2.1动态响应contentType属性由于page指令只能为contentType属性指定一个值来决定响应的MIME类型。如果想动态地改变这个属性的值来响应用户,就需要使用response对象的setContentType(Strings)方法来改变contentType的属性值。

publicvoidsetContentType(Strings);方法动态设置响应的MIME类型,参数s可取:

text/html、text/plain、image/gif、image/x-xbitmap、

image/jpeg、image/pjpeg、application/x-shockwave-flash、

application/vnd.ms-powerpoint、application/vnd.ms-excel、

application/msword。

例4-10

P78例response01.jsp4.2.2response的HTTP文件头response对象可以使用方法:

addHeader(Stringhead,Stringvalue);或使用方法:

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

自动更新网页

response.setHeader(“Refresh”,”5”);

网页的内容将会5秒钟更新一次

response.setHeader(“Refresh”,”5;URL=response01.jsp”);

可以让一个页面经过5秒之后跳转到其他页面.(定时跳转之后,地址栏变化了,称为客户端跳转)

例4-12P804.2.3response重定向

在某些情况下,JSP引擎在响应用户时,可能需要将用户重新引导至另一个页面。(客户端跳转)

response.sendRedirect(“URL”); //URL可以使完整的路径(http://localhost:port/…),也可以是相对路径例如,如果用户输入的表单信息不完整,就会再次被引导到该表单的输入页面。使用response对象的sendRedirect(“URL”)方法实现用户的重定向。

例4-13P81两种跳转的区别:客户端跳转:sendRedirect(),

setHeader()服务器端跳转:<jsp:forward>forward是无条件跳转,只要执行到此语句立即跳转。sendRedirect跳转发生在整个页面执行完之后再跳转。forward地址栏不发生变化,sendRedirect地址栏发生变化。forward可以传递request属性。sendRedirect则是一个全新的请求,不传递request属性。例:response02.jspresponse03.jsp

和response04.jsp4.2.4response的状态行

当JSP引擎对用户请求进行响应时,它发送的首行称做状态行。状态行包括3位数字的状态代码和对状态代码的描述(称做原因短语)。参考表4-1状态代码表例:sameWebOne.jspP82关于cookie对象Cookie对象是由Web服务器端产生后被保存在客户端的一组信息,安全性较差。在JSP中Cookie属于单独一个类,此类定义在javax.servlet.http.*;Cookie类的主要方法:PublicCookie(Stringname,Stringvalue)实例化Cookie对象,传入名字和内容PublicStringgetName()获取Cookie的名字PublicvoidsetValue(StringnewValue)修改内容PublicvoidsetMaxAge(intexpiry)Cookie的最大保存时间要想设置Cookie,则肯定使用response对象。<%@pagecontentType="text/html;charset=GB2312"%><% //准备好了两个Cookie Cookiec1=newCookie("username",“tom"); Cookiec2=newCookie("userpass",""); //通过response设置到客户端上去

response.addCookie(c1); response.addCookie(c2);%>例:向客户端增加Cookie例:cookie01.jsp要想取得Cookie,则必须依靠request传递,客户端在每次提交时都会将Cookie作为头信息一次性提交过去,所以使用request.getCookies()方法来取得。<%@pagecontentType="text/html;charset=GB2312"%><%

//取得全部设置的Cookie对象

Cookiec[]=request.getCookies(); for(inti=0;i<c.length;i++){%> <h3><%=c[i].getName()%>--><%=c[i].getValue()%></h3><% }%>例:cookie02.jsp运行结果多出一个JSESSIONID!!!Cookie读写案例名称:写入Cookie

cookie_1.jsp<%@pagecontentType="text/html;charset=GBK"%><%StringstrName="Zhourunfa";Cookiec=newCookie(“Name1”,strName);//新建Cookiec.setMaxAge(365*24*60*60);//设置存放的时间response.addCookie(c);//写客户端硬盘%>写入Cookie<br><br><ahref=“cookie_2.jsp">查看</a>案例名称:读出Cookiecookie_2.jsp<%@pagecontentType="text/html;charset=GBK"%><HTML><BODY><%Cookiecookies[]=request.getCookies();//获取所有Cookiefor(inti=0;i<cookies.length;i++){if(cookies[i].getName().equals(“Name1”))//找到指定名称的Cookie out.print(cookies[i].getValue());}%>读出Cookie<br><br>§4.3session对象

HTTP协议是一种无状态协议。一个用户向服务器发出请求(request),然后服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息,因此当下一次连接时,服务器已没有以前的连接信息了,无法判断这一次连接和以前的连接是否属于同一用户。session用来分别保存每一个用户的信息,使用session,可以轻易的识别每一个用户,然后针对每个用户的要求,给予正确的响应。内置对象session由Tomcat服务器负责创建,session

id在用户第一次登录上服务器时由服务器自行分配,不能手工设置。

Stringid=session.getId();

Session在实际操作中的主要功能是判断用户是否登录!Session中的主要操作方法1、取得sessionidsession.getId();2、让session失效session.invalidate();3、设置和取得属性session.setAttribute(Stringname,Objectvalue);session.getAttribute(Stringname);4、判断是否新的sessionsession.isNew()4.3.1session对象的IDsession对象被分配了一个String类型的ID,Tomcat服务器将ID发送到客户端,存放在客户的Cookie中。同一用户在同一Web服务目录中的各个页面的session是相同的.可以使用Session对象存储用户登录网站时候的信息。当用户在页面之间跳转时,存储在Session对象中的变量不会被清除不同用户的session对象互不相同,具有不同的ID.

例first.jsp和second.jsp,third.jspP864.3.2session对象与URL重写

如果用户端不支持Cookie,那么用户在不同网页之间的session对象可能是互不相同的,因为如果服务器无法将Id存放到用户端,就不能建立session对象和用户的一一对应关系。可以通过URL重写来实现session对象的惟一性。所谓URL重写,就是当用户从一个页面重新链接到另一个页面时,通过向这个新的URL添加参数,把session对象的Id传带过去,这样就可以保障用户在该网站各个页面中的session对象是完全相同的。可以使用response对象调用encodeURL()或encodeRedirectURL()方法实现URL重写.

例jiafei.jsp,tom.jsp,jerry.jspP874.3.3session对象存储数据

session对象使用下列方法处理数据:

(1)publicvoidsetAttribute(Stringkey,Objectobj)

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

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

session对象调用该方法产生一个枚举对象,该枚举对象使用nextElemets()遍历session中的各个对象所对应的关键字。(4)publiclonggetCreationTime()

session对象调用该方法可以获取该对象创建的时间,单位是毫秒。

(5)publicvoidremoveAttribute(Stringname)

session对象调用该方法移掉关键字key对应的对象.

例4-17P894.3.4在Tag文件中使用session对象JSP页面通过调用Tag文件可以实现代码的复用,那么在反复调用Tag文件时,Tag文件就可以对session对象中存储的数据进行处理,并将必要的结果返回给JSP页面。

例4-18猜数字游戏P904.3.5session对象的生存期限session对象的生存期限依赖:客户是否关闭浏览器。2.

session对象是否调用invalidate()方法使session无效。

session.invalidate(); //让session失效3.session对象是否达到设置的最长“发呆”时间web.xml<session-config><session-timeout>30</session-timeout></session-config>session对象中与生存期限有关的方法例4-19P92例:session03.jsp4.3.6使用session设置时间间隔为了限制用户在很短的时间间隔内不断地使用某页面所提供的某种功能,而影响其他用户使用该页面所提供的功能,因此我们可以利用用户的session来设置用户使用当前页面所提供功能的间隔时间,从而限制该用户等待若干“时间”后,再次使用该页面所提供的功能。例4-20P934.3.7计数器使用session实现计数器的步骤是:当一个用户请求Web服务目录下的任何一个JSP页面时,首先检查该用户的session对象中是否已经有计数,如果没有计数,立刻将当前的计数增1,并将计数存到用户的session中,否则不改变当前的计数。

例one.jsptwo.jspP95判断是否是新用户session.isNew()例:session02.jsp例:session01.jsp练习:Session的主要功能用于登陆§4.4

out对象out对象是一个输出流,用来向用户端输出数据。

out对象可调用如下的方法用于各种数据的输出,out.print(Boolean),out.println(Boolean)

用于输出一个布尔值。out.print(char),out.println(char)

输出一个字符。out.print(double),out.println(double)

输出一个双精度的浮点数。out.print(float),out.println(float)

用于输出一个单精度的浮点数。out.print(long),out.println(long)

输出一个长整型数据。out.print(String),out.println(String)

输出一个字符串对象的内容。out.newLine()

输出一个换行符。out.flush()

输出缓冲区里的内容。out.close()关闭流。例4-22P97out对象是javax.servlet.jsp.JspWriter类的实例,它的作用是把信息回送到客户端的浏览器中。在out对象中,最常用的方法就是print()和println()。 在使用print()或println()方法时,由于客户端是浏览器,因此向客户端输出时,可以使用HTML中的一些标记,例如:“out.println(”<h1>Hello,JSP</h1>“);”。out对象的生命周期是当前页面。因此对于每一个JSP页面,都有一个out对象ex_out.jspmulti.htm、multi1_1.jsp、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论