对象最新代理服务器地址

最新代理服务器地址  时间:2021-01-01  阅读:()

3.
1JSP内置对象概述在JSP页面中,经常要处理客户端的请求(request)和向客户端回送处理结果响应(response)等信息.
为了简化程序设计,JSP规范定义了常用的隐含对象(见表3.
1),这些隐含对象不需要程序员在JSP页面中用new关键字来创建,而是由Servlet容器来创建与管理,并传递给JSP页面的Servlet实现类使用.
表3.
1JSP内置对象变量名主要功能变量名主要功能out用于JSP页面输出信息exceptionJSP页面产生的异常对象request可获得用户端请求参数config用于传送和获取初始化参数response输出信息给客户端page当前JSP页面所表示的对象session终端用户与后台系统交互pageContext获取其他的隐含对象及实现跳转application同一应用不同程序间数据共享在JSP页面Servlet实现类的_jspService()方法内部,自动初始化了JSP隐含对象.
相应的代码段如下:publicvoid_jspService(HttpServletRequestrequest,HttpServletResponseresponse)throwsjava.
io.
IOException,ServletException{//……HttpSessionsession=null;ServletContextapplication=null;ServletConfigconfig=null;JspWriterout=null;Objectpage=this;try{//……application=pageContext.
getServletContext();config=pageContext.
getServletConfig();session=pageContext.
getSession();out=pageContext.
getOut();}}263.
2out隐含对象out对象是一个输出流,用来向客户端输出数据.
out对象属于javax.
servlet.
jsp.
JspWriter类型.
3.
2.
1显示输出主要方法1.
print()和println()print()和println()用于打印输出信息,前者输出的信息在返回客户端的源代码中不换行,后者输出的信息在返回客户端的源代码中换行.
被打印的信息可以是基本数据类型(如int、double等),也可以是对象(如字符串等).
例如,在JSP页面中有以下代码,其输出结果是"123456".
%out.
print("123");out.
print("456");%2.
newLine()newLine()表示输出一个回车换行符.
例如以下代码输出结果是"123"、"456"分在两行.
%out.
print("123");out.
newLine();out.
print("456");%3.
2.
2缓冲区相关的方法1.
flush()方法Java中把I/O操作转化为流操作.
out.
write()输出的信息暂时存储在流对象缓冲区中,flush()刷新操作把缓冲区中的信息传递给目标对象处理.
如果缓冲区满了,这个方法被自动调用,输出缓冲区中的信息.
如果流已经关闭,调用print()或flush()会引发一个IOException异常,例如:%out.
close();out.
flush();%在命令行窗口中会显示"警告:Internalerrorflushingthebufferinrelease()"的异常信息.
272.
clear()方法clear()表示清除缓冲区中的信息.
如果缓冲区是空的,执行此方法会引发IOException异常.
3.
clearBuffer()clearBuffer()的功能与clear()相似,它将输出缓冲区清除后返回,与clear()不同的是它不抛出异常.
4.
getBufferSize()getBufferSize()返回输出缓冲区的大小,单位为字节,如果没有缓冲区,则返回0.
5.
getRemaining()getRemaining()返回缓冲区剩余的空闲空间,单位为字节.
6.
isAutoFlush()isAutoFlush()返回一个真假值,用于标示缓冲区是否自动刷新.
例如:%out.
print("缓冲区总容量="+out.
getBufferSize()+"br");out.
print("缓冲区空闲容量="+out.
getRemaining()+"br");out.
print("缓冲区是否自动刷新="+out.
isAutoFlush());%3.
3request隐含对象request对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息.
request所依赖的接口是javax.
servlet.
http.
HttpServletRequest.
3.
3.
1用request读取客户端传递来的参数客户端传递给服务器的参数最常见的是表单数据或附在URL中的查询参数.
例如,http://localhost/exam.
jspuseId=admin中的"useId=admin"为查询参数.
1.
用request读取单值参数所谓单值参数是指一个变量最多有一个值.
用request对象的getParameter()方法可读取单个参数.
方法的定义为:publicjava.
lang.
StringgetParameter(java.
lang.
Stringname)方法的形参是参数的变量名,以String形式返回变量的值.
如果request对象中没有28指定的变量,则返回null.
例如,下面操作varValue的值为admin:StringvarValue=request.
getParameter(useId)1)变量名硬编码问题用request.
getParameter()读取表单传来的参数时,必须要给出参数的变量名,参数变量名是以硬编码形式嵌在代码中的,即在程序中参数变量名是给定的,当表单提交数据中参数变量名发生变化时,需要改变程序.
为了提高程序的灵活性,可以利用getParameterNames()方法,该方法能够返回request对象中的参数变量名,从而实现程序中变量的灵活设置.
方法的定义为:publicjava.
util.
EnumerationgetParameterNames()利用getParameterNames()读取表单参数实例如下:%@pageimport="java.
util.
*"%%Enumeratione=request.
getParameterNames();//将request对象中的变量名置于集合中While(e.
hasMoreElements()){StringvarName=(String)e.
nextElement();StringvarValue=request.
getParameter(varName);//获取集合中的变量值out.
print(varName+"="+varValue);out.
print("br");}%【例3.
1】制作一个用户登录应用,用户在如图3.
1所示表单中输入用户名和密码后提交给本JSP页面,读取并显示用户输入信息.
图3.
1用户登录界面ch3exm3_1UserLogin.
jsp%!
Stringname;Stringpw;%%if(request.
getParameter("submit"!
=null){name=request.
getParameter("userName");pw=request.
getParameter("password");29if(name==null||name.
length()==0)name="用户名为空"if(pw==null||pw.
length()==0)pw="口令为空"}%formaction="em3_1/UserLogin.
jsp"method="post"tabletrtdalign="center"用户登录界面/td/trtrtdalign="right"用户名/tdtdinputtype="text"name="userName"//td/trtrtdalign="right"密码/tdtdinputtype="password"name="password"//td/trtrtd/tdtdinputtype="submit"name="submit"value="登录"//td/trtrtd用户名参数为:%=name%/tdtd密码参数为:%=pw%/td/tr/table/form2)显示中文参数时的乱码问题在显示从request对象读取的中文参数时可能会出现乱码.
原因是Java在默认情况下采用的是Unicode编码标准,一般是UTF-8,而中文的编码标准通常是GB2312.
解决乱码问题的方法是把UTF-8转换为GB2312简体中文编码即可.
具体方法是写一个转换方法,在显示字符串前,把字符串转换成简体中文后再显示.
JSP程序如下,转换方法为StringtoChinese(Stringstr).
【例3.
2】从request对象读取参数时的中文乱码问题处理程序.
ch3exm3_2UserLogin.
jsp%!
publicstaticStringtoChinese(Stringstr){//UTF-8转换为GB2312方法try{bytes1[]=str.
getBytes("ISO8859-1");returnnewString(s1,"gb2312");}catch(Exceptione){returnstr;}}%body%if(request.
getParameter("submit"!
=null){Stringname=request.
getParameter("userName");Stringpw=request.
getParameter("password");30if(name==null||name.
length()==0)name="用户名为空";elsename=toChinese(name));//把字符串转换成简体中文后再显示if(pw==null||pw.
length()==0)pw="口令为空";}%/body2.
用request读取多值参数多值参数的典型代表是表单复选框,例如,第2章中会员注册例子中的"教育程度"同名表单就是多值参数,"教育程度"选项中的表单变量名均为"education",用户可以选定多个教育程度.
在服务器端读取多值参数,要用到如下方法:String[]request.
getParameterValues(Stringname)形参为多值参数的变量名,多个参数值返回后存储在一个字符串数组中.
%@pageimport="java.
util.
*"%%Enumeratione=request.
getParameterNames();While(e.
hasMoreElements()){StringvarName=(String)e.
nextElement();if(!
varName.
equals("education")){StringvarValue=request.
getParameter(varName);out.
print(toChinese(varName)+"="+toChinese(varValue));out.
print("br")}else{StringvarValue[]=request.
getParameterValues(varName);out.
print(varName+"=");for(intn=0;nvarValue.
length;n++){out.
print(""+toChinese(varValue[n]));}out.
print("br")}%3.
3.
2request作用范围变量服务器端的两个JSP/Servlet程序间要交换数据时,可通过request作用范围变量来实现.
request作用范围变量也叫request属性,是类似于"name=value"的属性对,由属性名和属性值构成,属性值一般是一个Java对象,不是Java基本数据类型数据.
Servlet程序A要把数据对象传递给Servlet程序B时,程序A通过调用request.
setAttribute()把数据对象写入request作用范围,并通过request转发跳转到程序B,程序31A的request对象被转发给程序B,在程序B中通过request.
getAttribute()从request作用范围读取数据对象.
属性值对象本身的生命周期和request对象的生命周期直接相关,在当前request隐含对象有效的范围内,与之绑定的属性值对象也是有效的,当request对象生命期结束时,与之绑定的request属性变量会变成垃圾对象而被回收.
在JSP中,除了request作用范围变量外,还有page、session和application作用范围变量,它们的基本含义都是把属性值对象与某个有生命周期的JSP隐含对象相绑定,使属性值对象有一定的生命周期,或者说使属性值对象在一定的作用范围内有效.
定义作用范围变量一般是调用相应JSP隐含对象中的setAttribute()方法,读取作用范围变量一般是调用getAttribute()方法.
1.
setAttribute()/getAttribute()方法setAttribute()/getAttribute()方法的语法格式为:voidsetAttribute(Stringname,Objecto)ObjectgetAttribute(Stringname)setAttribute用于把一个属性对象按指定的名字写入request作用范围,getAttribute用于从request作用范围读出指定名字的属性对象.
具体使用方法如下例:%request.
setAttribute("loginName","tom");Strings=(String)request.
getAttribute("loginName");out.
print(s)%2.
getRequestDispatcher()方法两个Servlet程序间要利用request作用范围变量来传递数据时,需要用转发跳转操作实现从第一个Servlet程序A跳转到第二个Servlet程序B.
request转发器(RequestDispatcher)的作用是获得目标资源的转发器,通过转发器将当前Servlet程序的request和response对象转发给目标资源,并跳转至目标资源上运行程序.
这样,目标资源就可通过request对象读取上一资源传递给它的request属性.
request.
getRequestDispatcher()方法的作用是返回目标资源的RequestDispatcher对象,语法为:publicRequestDispatchergetRequestDispatcher(java.
lang.
Stringpath)形参是当前Web应用目标资源的URL,可以使用相对路径或绝对路径.
RequestDispatcher对象的主要方法有:publicvoidforward(ServletRequestrequest,ServletResponseresponse)throwsServletException,java.
io.
IOException该方法能够把当前Servlet程序的request和response隐含对象转发给目标资源,并跳32转至目标资源运行代码.
形参是当前Servlet程序的request和response隐含对象.
publicvoidinclude(ServletRequestrequest,ServletResponseresponse)throwsServletException,java.
io.
IOException该方法用于包含目标资源.
形参是当前JSP/Servlet程序的request、response对象.
如果目标资源是JSP页面,它会被编译成Servlet程序后再运行.
进行包含操作前,允许对当前JSP/Servlet程序的response输出缓冲区进行刷新.
下面例子利用request作用范围变量在两个JSP页面A、B间传递数据.
操作步骤如下:body//JSP程序A%request.
setAttribute("loginName","tom");RequestDispatchergo=request.
getRequestDispatcher("exam.
jsp");go.
forward(request,response);%/bodybody//JSP程序B(exam.
jsp)%Strings=(String)request.
getAttribute("loginName");out.
print(s)%/body3.
removeAttribute()此方法的作用是从request作用范围中删除指定名字的属性,它的语法为:publicvoidremoveAttribute(Stringname)形参是属性名.
3.
3.
3用request读取系统信息1.
StringgetProtocol()返回request请求使用的协议及版本号.
2.
StringgetRemoteAddr()返回客户端或最后一个客户端代理服务器的地址.
3.
StringgetRemoteHost()返回客户端主机名或最后一个客户端代理服务器的主机名,如果主机名读取失败,则返回主机的IP地址.
334.
StringgetScheme()返回当前request对象的构造方案,例如http、https和ftp等,不同的构造方案有不同的URL构造规则.
5.
StringgetQueryString()返回URL的查询字串,即URL中""后面的"name=value"对.
6.
StringgetRequestURI()返回URL请求中目标资源的URI.
7.
StringgetMethod()返回request请求的提交方式,如:GET、POST等.
8.
StringgetServletPath()返回调用Servlet程序的URL请求.
9.
StringgetRealPath()返回虚拟路径在服务器上的真实绝对路径.
3.
4response隐含对象传送给客户端的信息称为响应信息(response),是由response对象实现的,它依赖的接口是javax.
servlet.
http.
HttpServletResponse.
response隐含对象可以将需要显示输出的信息返回给客户端页面.
3.
4.
1输出缓冲区与响应提交输出缓冲区用于暂存Servlet程序的输出信息,减少服务器与客户端的网络通信次数.
如果输出缓冲区中的响应信息已经传递给客户端,称响应是已经提交.
刷新操作强制把输出缓冲区中的内容传送回客户端.
response对象中和输出缓冲区相关的方法有:publicvoidflushBuffer()throwsjava.
io.
IOException刷新输出缓冲区,把信息传回客户端.
publicvoidsetBufferSize(intsize)定义输出缓冲区的大小,单位为字节.
publicbooleanisCommitted()34返回缓冲区中的响应信息是否已经提交.
3.
4.
2HTTP响应报头设置服务器通过HTTP响应报头向客户端浏览器传送通信信息.
JSP服务器在默认情况下,响应信息是以字符形式传送.
如果要用HTTP响应报头传输二进制数据,应该通过response.
getOutputStream()获得一个ServletOutputStream输出流对象输出二进制信息.
HTTP响应报头设置的相关方法介绍如下.
1.
setContentType()定义返回客户端的信息类型及编码标准,默认是"text/html;charset=UTF-8".
语法格式为:publicvoidsetContentType(java.
lang.
Stringtype)例:response.
setContentType("text/html;charset=gb2312");如果返回给客户端的是二进制信息,则应该调用此方法作适当的设置.
信息类型为MIME-type中定义的类型,浏览器会根据信息类型自动调用匹配的软件来处理,或将信息另存为一个文件.
【例3.
3】用response返回Excel文档形式的学生成绩表.
ch3exm3_3UploadExcel.
jsp%@pageimport="java.
io.
*"%%response.
setContentType("application/vnd.
ms-excel");try{PrintWriterout=response.
getWrite();out.
println("学号 姓名 平时成绩 考试成绩 期末成绩");out.
println("s001 张平 78 69 =round(C2*0.
3+D2*0.
7,0)");out.
println("s001 李丽 88 96 =round(C2*0.
3+D2*0.
7,0)");out.
println("s001 王宏 63 72 =round(C2*0.
3+D2*0.
7,0)");}catch(Exceptione){Out.
print("错误信息:"+e);}%IE浏览器接收到返回的Excel数据后,会自动嵌入Excel软件显示数据,如果Excel启动失败,浏览器提示把接收到的信息另存为磁盘文件.
2.
setCharacterEncoding()定义返回客户端信息的编码标准.
格式为:publicvoidsetCharacterEncoding(java.
lang.
Stringcharset)35如果已经用response.
setContentType()定义字符集,则调用此方法将重新设置字符集.
信息字符集的定义要在缓冲区刷新前进行.
3.
sendError()向客户端返回HTTP响应码,并清空输出缓冲区.
格式为:publicvoidsendError(intsc)throwsjava.
io.
IOExceptionHTTP响应码由三位的十进制数构成,具体如下.
1xx:请求收到,继续处理.
2xx:成功,行为被成功地接收、理解和接受.
3xx:重定向,为了完成请求,必须进一步执行的动作.
4xx:客户端错误.
5xx:服务器出错.
例如,在IE浏览器地址栏中输入"http://127.
0.
0.
1:8080/aabb.
jsp",企图访问Tomcat服务器中不存在的资源aabb.
jsp,则Tomcat会给客户端返回一个HTTP响应码404,在IE浏览器上显示HTTP响应码及错误信息.
4.
setHeader()设置响应报文中的头域参数.
格式为:publicvoidsetHeader(java.
lang.
Stringname,java.
lang.
Stringvalue)第一个形参为头域名,第二个形参是头域值.
HTTP报头中有一个名为"Refresh"的响应头域,它的作用是使IE浏览器在若干秒后自动刷新当前网页或跳转至指定的URL资源.
设置这个头域的语法格式为:response.
setHeader("Refresh","定时秒数;url=目标资源的URL")方法的第一个形参是响应报头名"Refresh",第二个形参由两部分组成:第一部分定义秒数,即若干秒后自动刷新,第二部分为目标资源的URL,缺少时默认刷新当前页.
例如,下面的程序每隔两秒进行一次页面刷新,并记录和显示刷新的次数;当需要及时显示对页面所更新数据时,这个程序过程是非常实用和有效的.
%!
Staticintnumber=0;%body%number=number+1;out.
print("number="+number);response.
setHeader("Refresh","2");%/body3.
4.
3用response实现JSP页面重定向重定向是JSP中实现JSP/Servlet程序跳转至目标资源的方法之一,response对象的36sendRedirect()方法实现重定向功能.
它的基本思想是:服务器将目标资源完整的URL通过HTTP响应报头发送给客户端浏览器,浏览器接收到URL后更新至地址栏中,并将目标资源的URL提交给服务器.
重定向使目标资源的URL从服务器传到客户端浏览器,再从客户端通过HTTP请求传回服务器,其中有一定的网络时延.
实现JSP页面跳转的主要方法有转发(forward)和重定向(redirect),RequestDispatcher.
forward()实现的是转发跳转,response.
sendRedirect()实现的是重定向跳转.
两者的区别在于:(1)重定向是通过客户端重新发送URL来实现,会导致浏览器地址更新,而转发是直接在服务器端切换程序,目标资源的URL不出现在浏览器的地址栏中.
(2)转发能够把当前JSP页面中的request、response对象转发给目标资源,而重定向会导致当前JSP页面的request、response对象生命期结束,在目标资源中无法取得上一个JSP页面的request对象.
(3)转发跳转直接在服务器端进行,基本上没有网络传输时延,重定向有网络传输时延.
如果要实现服务器中两个Servlet程序间跳转,并且要使用request作用范围变量交换数据,应该优先使用request转发跳转.
用重定向实现程序跳转时,如果要求传递数据给目标资源,一个简单、可行的方法是把数据编码在URL查询串中,例如:http://127.
0.
0.
1:8080/exam.
jspname=tom.
用response实现重定向示例如下:%response.
sendRedirect("http://127.
0.
0.
1:8080/exam.
jspname=tom");%3.
4.
4用response实现文件下载在JSP中实现文件下载最简单的方法是定义超链接指向目标资源,用户单击超链接后直接下载资源,但直接暴露资源的URL也会带来一些负面的影响,例如,容易被其他网站盗链,造成本地服务器下载负载过重.
另外一种下载文件的方法是使用文件输出流实现下载,首先通过response报头告知客户端浏览器,将接收到的信息另存为一个文件,然后用输出流对象给客户端传输文件数据,浏览器接收数据完毕后将数据另存为文件.
使用文件输出流下载方法的优点是服务器端资源路径的保密性好,并可控制下载的流量以及日志登记等.
1.
二进制文件的下载用JSP程序下载二进制文件的基本原理是:首先将源文件封装成字节输入流对象,通过该对象读取文件数据,获取response对象的字节输出流对象,通过输出流对象将二进制的字节数据传送给客户端.
将源文件封装成字节输入流,需用JDK中的java.
io.
FileInputStream类,常用到的方37法有:publicFileInputStream(Stringname)throwsFileNotFoundException该构造方法形参name是源文件的路径和文件名,注意路径分隔符使用"/"或"\",例如:FileInputStreaminFile=newFileInputStream("c:\temp\my1.
exe");publicintread(byte[]b)throwsIOException从输入流中读取一定数量的字节数据并将其缓存在数组b中.
方法返回值是实际读取到的字节数.
如果检测到文件尾,返回-1.
通过输出流对象将二进制的字节数据传送给客户端,需用response对象的getOutputStream()方法返回一个字节输出流对象ServletOutputStream,通过ServletOutputStream对象输出二进制字节数据并传输给客户端.
例如:ServletOutputStreammyOut=response.
getOutputStream();ServletOutputStream中输出二进制字节数据的方法write(byte[]b)将数组中的b.
length个字节写入输出流.
【例3.
4】用response把ROOTd.
zip文件传送回客户端.
ch3exm3_4DownloadBin.
jsp%@pagecontentType="application/x-download",import="java.
io.
*"%%intstatus=0;byteb[]=newbyte[1024];;FileInputStreamin=null;ServletOutputStreamout=null;try{response.
setHeader("content-disposition","attachment;filename=d.
zip");in=newFileInputStream("d.
zip");out=response.
getOutputStream();while(status!
=-1){status=in.
read(b)out.
write(b);}out.
flush();}catch(Exceptione){System.
out.
println(e);response.
sendRedirect("downError.
jsp");//重定向到出错页面}finally{if(in!
=null)in.
close();if(out!
=null)out.
close();}%382.
文本文件的下载文本文件下载时用的是字符流,而不是字节流.
首先取得源文件的字符输入流对象,用java.
io.
FileReader类封装,再把FileReader对象封装为java.
io.
BufferedReader,以方便从文本文件中一次读取一行.
字符输出流直接用JSP的隐含对象out,out能够输出字符数据.
FileReader类的构造方法有:publicFileReader(StringfileName)throwsFileNotFoundException构造方法取得文件的字符输入流对象,形参fileName是文件的路径和文件名,路径分隔符用"/"或"\".
如果打开文件出错,会引发一个异常.
BufferedReader的主要用法有:publicBufferedReader(Readerin)publicStringreadLine()throwsIOException【例3.
5】用JSP下载JSP所在目录的ee.
txt文件.
ch3exm3_5DownloadTxt.
jsp%@pagecontentType="application/x-download",import="java.
io.
*"%%Stringtemp=null;FileReaderin=null;BufferedReaderin2=null;try{response.
setHeader("content-disposition","attachment;filename=exam.
txt");response.
setCharacterEncoding("gb2312");in=newFileReader("ee.
text");in2=newBufferedReader(in);while((temp=in2.
readLine())!
=null)out.
println(temp);out.
close();}catch(Exceptione){System.
out.
println(e);response.
sendRedirect("downError.
jsp");//重定向到出错页面}finally{if(in2!
=null)in2.
close();}%3.
5Cookie管理Cookie或称Cookies,在Web技术中指Web服务器暂存在客户端浏览器内存或硬盘文件中的少量数据.
Web服务器通过HTTP报头来获得客户端中的Cookie信息.
393.
5.
1Cookie概述1.
Cookie机制由于HTTP是无态的,无法记录用户的在线状态信息,利用Cookie可以解决这个问题,把待存储的信息封装在Cookie对象中并传回客户端保存,需要时再从客户端读取.
如果不设置过期时间,则表示这个Cookie的生命期为浏览器会话期间,只要关闭浏览器窗口,Cookie就消失了.
这种生命期为浏览器会话期的Cookie被称为会话Cookie.
会话Cookie一般不存储在硬盘上而是保存在内存里.
如果设置了过期时间,浏览器就会把Cookie保存到硬盘上,关闭后再次打开浏览器,这些Cookie仍然有效,直到超过设定的过期时间.
存储在硬盘上的Cookie可以在不同的浏览器进程间共享,比如两个IE窗口.
Cookie信息的基本结构类似于"name=value"对,每个数据有一个变量名.
Cookie信息有一定的有效期,有效期短的直接存于IE浏览器内存中,关闭浏览器后,这些Cookie信息也就丢失.
有效期长的信息存储在硬盘文件上.
例如,WindowsXP中,有一个C:DocumentsandSettingsadminCookies文件夹,文件夹中存储有曾经访问过的网站的Cookie文件.
在此文件夹中,在类似于"admin@127.
0.
0[1].
txt"的文件中会看到被保存的Cookie数据.
在JSP中使用Cookie的基本过程为:(1)在服务器端生成Cookie对象,把待保存信息写入Cookie对象中.
(2)必要时设置Cookie对象的生命期.
(3)把Cookie对象传给客户端浏览器保存.
(4)服务器端程序需要Cookie信息时,用代码读取Cookie信息.
2.
Cookie类javax.
servlet.
http.
Cookie类用来生成一个Cookie对象,这个类中常用的方法有:Cookie(java.
lang.
Stringname,java.
lang.
Stringvalue)第一个形参是Cookie数据的变量名,第二个形参是待保存的数据,字符串类型.
publicvoidsetMaxAge(intexpiry)这个方法定义Cookie对象的生命期,形参是生命时间数,单位为秒.
如果生命周期为负整数,表示这个Cookie对象是临时的,不要保存在硬盘文件中,关闭IE浏览器后Cookie数据自动丢失.
如果生命期为零,表示删除这个Cookie.
默认值为-1.
Cookie的生命期定义要在Cookie对象传回客户端前进行.
用publicintgetMaxAge()方法可读取Cookie对象的生命时间.
publicvoidsetSecure(booleanflag)形参取值true时,表示用https或SSL安全协议将Cookie传回服务器;取false时表示用当前默认的协议传回Cookie.
publicjava.
lang.
StringgetName()40返回当前Cookie对象的变量名.
publicjava.
lang.
StringgetValue()返回当前Cookie对象的值.
3.
5.
2Cookie回传和读取1.
将Cookie对象传回客户端将Cookie对象传回客户端,要用到JSP隐含对象response的addCookie方法,该方法的语法格式为:publicvoidaddCookie(Cookiecookie)形参是待保存的Cookie对象.
例如:%Cookiemsg=newCookie("login","tom");msg.
setMaxAge(60*60*60*60);response.
addCookie(msg);%2.
读取Cookie对象读取客户端存储的Cookie,用request对象的getCookies()方法,它的语法为:publicCookie[]getCookies()返回的是一个Cookie对象数组,当前浏览器中所有有效的Cookie会通过HTTP请求报头返回给服务器,每个数组分量是一个返回的Cookie对象.
如果客户端没有有效的Cookie,则返回null值.
例如:%Cookiec[]=request.
getCookies();if(c!
=null){for(inti=0;ic.
length;i++)out.
print(c[i].
getName+"="+c[i].
getValue()+"br");}elseout.
print("没有返回Cookie");%【例3.
6】定义一个Cookie对象,存储用户的登录名;再定义一个Cookie对象,记录客户最近浏览过的5本图书的书号:AB001、KC981、DE345、RD332和PC667,生命期均为30天.
在另一个页面中查询这个Cookie,如果读取的Cookie不为空,则显示用户登录名,否则显示"没有登录"信息.
如果已经登录,则显示书号.
41ch3exm3_6CookieTestA.
jspbody%StringmyName="John";StringvisitedBook="AB001,KC981,DE345,RD332,PC667"Cookiec1=newCookie("loginName",myName);c1.
setMaxAge(30*24*60*60);Cookiec2=newCookie(myName,visitedBook);C2.
setMaxAge(30*24*60*60);response.
addCookie(c1);response.
addCookie(c2);out.
print("成功将用户名、书目Cookie传回客户端,有效期30天");%/body预览程序执行网页上显示信息"成功将用户名、书目Cookie传回客户端,有效期30天".
ch3exm3_6CookieTestB.
jspbody%StringmyName=null;StringvisitedBook=null;Cookiec[]=request.
getCookies();if(c==null){out.
print("没有返回Cookie");}else{for(inti=0;ic.
length;i++){Stringtemp=c[i].
getName();if(temp.
equals("loginName"))myName=c[i].
getValue();if(myName!
=null&&temp.
equals(myName))visitedBook=c[i].
getValue();}if(myName!
=null){out.
print("您已经登录,用户名="+myName+"br");if(visitedBook!
=null)out.
print("您最近浏览过的图书书号是:"+visitedBook);}elseout.
print("您没有登录");}%/body预览执行结果页面,浏览器中显示的信息为:您已经登录,用户名=John您最近浏览过的图书书号是:AB001,KC981,DE345,RD332,PC667423.
6application隐含对象3.
6.
1application对象的生命周期及作用范围一个Web服务器通常有多个Web服务目录(网站),当Web服务器启动时,它自动为每个Web服务目录都创建一个application对象,这些application对象各自独立,而且和Web服务目录一一对应.
访问同一个网站的客户都共享一个application对象.
具体来说:不管哪个客户来访问网站A,也不管客户访问网站A下哪个页面文件,都可以对网站A的application对象进行操作.
因此,当在application对象中存储数据后,所有访问网站A的客户都能够对其进行访问,实现了多个客户之间的数据共享.
访问不同网站的客户,对应的application对象不同.
与out、request、response只作用于当前页不同,application对象的有效范围是当前应用,即在同一应用程序中,只要应用服务器不关闭,这个对象就一直有效.
3.
6.
2ServletContext接口application对象必须实现javax.
servlet.
ServletContext接口.
有些Web服务器不直接支持使用application对象,必须用ServletContext类来声明application对象,再调用getServletContext()方法来获取当前页面的application对象.
一个ServletContext类表示一个Web应用程序的上下文.
具体来说:在Web服务器中,提供了一个Web应用程序的运行时环境,专门负责Web应用程序的部署、编译、运行以及生命周期的管理,通过ServletContext类,可以获取Web应用程序的运行时环境信息.
ServletContext类的主要方法及功能如表3.
2所示.
表3.
2ServletContext类主要方法及功能方法名描述ServletContextgetContext(Stringuripath)获取指定URL的ServletContext对象StringgetContextPath()获取当前Web应用程序的根目录StringgetInitParameter(Stringname)根据初始化参数名称,获取参数值StringgetMimeType(Stringfile)获取指定文件的MIME类型StringgetServletContextName()获取当前Web应用程序的名称voidlog(Stringmessage)将信息写入日志文件中3.
6.
3application属性application作用范围变量也叫application属性,是类似于"name=value"的属性对,由属性名和属性值构成,属性值一般是一个Java对象,不是Java基本数据类型数据.
application属性能够被Web应用中的所有程序共享.
43application提供的属性存储方法主要有:(1)publicjava.
util.
EnumerationgetAttributeNames()返回当前上下文中所有可用的appliaction作用范围变量名,并存储在枚举型对象中.
(2)publicjava.
lang.
ObjectgetAttribute(java.
lang.
Stringname)从application作用范围中读取指定名字的属性值,返回的属性值是Object类型,一般要进行强制类型转换,还原其原本数据类型.
如果指定的属性值对象不存在,则返回null.
以下代码段是遍历当前Web应用中所有的application属性:%@pageimport="java.
util.
*"%%Enumeratione=application.
getAttributeNames();While(e.
hasMoreElements()){StringvarName=(String)e.
nextElement();StringvarValue=(String)application.
getAttribute(varName);out.
print(varName+"="+varValue+"br");}%(3)publicvoidsetAttribute(Stringname,Objectobject)把一个属性写入application作用范围.
第一个形参name是属性名,第二个形参object是属性值,它是一个Java对象.
如果属性值object为null,则相当于删除一个属性名为name的属性.
如果容器中已经存在指定名字的属性,写入操作会用当前的属性值替换原有的属性值.
(4)publicvoidremoveAttribute(java.
lang.
Stringname)从Servlet容器中删除指定名字的属性.
形参是属性名,字符串形式.
【例3.
7】用application实现一个站点计数器.
具体要求是当访问JSP页面时,页面进行访问次数统计,并输出当前计数值.
用request.
getRemoteAddr()来获取用户的IP地址,将访问过的用户IP地址作为application属性保存,只有新的IP地址才进行计数.
ch3exm3_7Counter.
jspbody%@pageimport="java.
util.
*"%%intn=0;Stringip=request.
getRemoteAddr();Stringcounter=(String)application.
getAttribute("counter");if(counter!
=null)n=Integer.
parseInt(counter);Enumeratione=application.
getAttributeNames();while(e.
hasMoreElements()){StringvarName=(String)e.
nextElement();StringvarValue=(String)application.
getAttribute(varName);if(!
ip.
equals(varValue)){n=n+1;44out.
print("您是第"+n+"位访客");counter=String.
valueOf(n);application.
setAttribute("counter",counter);application.
setAttribute("ip"+n,ip);}else{out.
print("您已经访问过本站");}}%/body3.
7session隐含对象HTTP是一种无状态协议,也就是当一个客户端页面向服务器发出请求时,服务器接收请求并返回响应后,客户端与服务器端的连接就会关闭,服务器并不保存相关的信息,再次交换数据需要建立新的连接.
而通常一个Web应用是由多个Web页面组成的一个完整的页面访问链条,如何保存这一过程中各页面的相关信息并实现信息的共享是一个重要的问题.
一个用户对一个Web应用包含的多个Web页面的访问过程称为一个会话(session).
session对象是JSP技术是为解决上述问题而专门提供的一种解决方案.
下面的讨论中会话和session对象的概念会交替出现,要注意区分它们.
3.
7.
1session生命期及跟踪方法通常把从用户登录进入系统到注销退出系统所经历的时间,称为一个session生命周期.
生命期结束,则session对象被删除,与之绑定的session属性也随之丢失.
影响session对象生命期的主要因素有:客户端浏览器窗口关闭,服务器关闭,session超时,程序主动结束session.
要跟踪该会话,必须引入一种机制,就是如何把一个操作中产生的有用信息保存下来,供后续的操作步骤使用,以及如何标识当前session通信等,这些问题称为session跟踪问题.
实现session跟踪有多种方法,通过session隐含对象属性设置是实现session跟踪最直接和简捷的方法.
1.
用URL重写实现session跟踪URL重写(URLRewriting)就是把session数据编码成"name=value"对,当作URL的查询串附在URL后,用带有查询串的URL访问下一个目标资源时,附在URL查询串中的session数据自然被传送给下一页.
2.
用Cookie实现session跟踪用Cookie实现session跟踪的基本原理是:把一个session数据封装在一个Cookie对45象中,将Cookie对象传回客户端存储,需要用到时再用代码从客户端读取.
3.
用隐藏表单域实现session跟踪隐藏表单域在页面上不可视,它相当于一个变量,如果把一个session数据存储在其中,则提交表单时,隐藏表单域中的数据也会被提交给服务器.
3.
7.
2session对象和application对象的比较1.
两者的作用范围不同session对象是用户级的对象,而application对象是应用程序级的对象.
一个用户一个session对象,每个用户的session对象不同,在用户所访问网站的多个页面之间共享同一个session对象.
一个Web应用程序一个application对象,每个Web应用程序的application对象不同,但一个Web应用程序的多个用户之间共享同一个application对象.
在同一个网站下,每个用户的session对象不同,所有用户的application对象相同.
在不同网站下,每个用户的session对象不同,每个用户的application对象不同.
2.
两者的生命周期不同session对象的生命周期是用户首次访问网站时创建的,用户离开该网站(不一定要关闭浏览器)时消亡.
application对象的生命周期是启动Web服务器时创建的,关闭Web服务器时销毁.
3.
7.
3session对象和Cookie对象的比较1.
sessionid当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含一个sessionid,如果已包含一个sessionid则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个session检索出来使用,如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,sessionid的值应该是唯一的,这个sessionid将被在本次响应中返回给客户端保存.
2.
Cookie机制和session机制异同Cookie机制和session机制是保存客户端与服务器端连接状态的两种解决方案.
具体来说,Cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案.
同时也可以看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,保存这个sessionid的方式可以采用Cookie,这样在交互过程中浏览器可以自动地按照规则把这个标识发送给服务器.
463.
7.
4session对象主要方法1.
publicbooleanisNew()判断session对象是新创建的,还是已经存在.
返回true时,表示session对象是刚创建的,也表示本次客户端发出的请求是本次session通信的第一次请求.
这个方法返回true,并不表示客户端浏览器窗口是新打开的.

趣米云月付460元,香港CN2云服务器VPS月付低至18元

趣米云早期为做技术起家,为3家IDC提供技术服务2年多,目前商家在售的服务有香港vps、香港独立服务器、香港站群服务器等,线路方面都是目前最优质的CN2,直连大陆,延时非常低,适合做站,目前商家正在做七月优惠活动,VPS低至18元,价格算是比较便宜的了。趣米云vps优惠套餐:KVM虚拟架构,香港沙田机房,线路采用三网(电信,联通,移动)回程电信cn2、cn2 gia优质网络,延迟低,速度快。自行封...

星梦云-年中四川100G高防云主机月付仅60元,西南高防月付特价活动,,买到就是赚到!

官方网站:点击访问星梦云活动官网活动方案:机房CPU内存硬盘带宽IP防护流量原价活动价开通方式成都电信优化线路4vCPU4G40G+50G10Mbps1个100G不限流量210元/月 99元/月点击自助购买成都电信优化线路8vCPU8G40G+100G15Mbps1个100G不限流量370元/月 160元/月点击自助购买成都电信优化线路16vCPU16G40G+100G20Mb...

10gbiz($2.36/月),香港/洛杉矶CN2 GIA线路VPS,香港/日本独立服务器

10gbiz发布了9月优惠方案,针对VPS、独立服务器、站群服务器、高防服务器等均提供了一系列优惠方面,其中香港/洛杉矶CN2 GIA线路VPS主机4折优惠继续,优惠后最低每月仅2.36美元起;日本/香港独立服务器提供特价款首月1.5折27.43美元起;站群/G口服务器首月半价,高防服务器永久8.5折等。这是一家成立于2020年的主机商,提供包括独立服务器租用和VPS主机等产品,数据中心包括美国洛...

最新代理服务器地址为你推荐
买虚拟主机在淘宝购买虚拟主机要注意什么?主机租用电脑租赁多少钱一天,电脑租赁,优易租0元押金.net虚拟主机虚拟主机如何设置net版本?域名注册公司域名注册公司是不是要向DNS根服务器交钱?虚拟主机代理虚拟主机代理哪家好,应该选择哪个家?域名服务域名服务器是什么?查询ip如何查找IP地址?虚拟空间哪个好哪个网络服务商的虚拟空间服务比较好呢?虚拟主机服务商请问哪个服务商的虚拟主机比较好呀www二级域名一级域名和二级域名如何区别?例如,www.,加上了,yutian168.com,就是一级域名吗?
virpus asp.net主机 winhost 国外服务器网站 网络星期一 万网优惠券 云全民 admit的用法 河南移动网 网站在线扫描 香港亚马逊 中国电信测速器 网页提速 便宜空间 太原联通测速 下载速度测试 永久免费空间 测试网速命令 腾讯网盘 阵亡将士纪念日 更多