JSP内置对象下.docx
- 文档编号:10493246
- 上传时间:2023-02-14
- 格式:DOCX
- 页数:22
- 大小:24.77KB
JSP内置对象下.docx
《JSP内置对象下.docx》由会员分享,可在线阅读,更多相关《JSP内置对象下.docx(22页珍藏版)》请在冰豆网上搜索。
JSP内置对象下
1、课程名称:
JSP内置对象
2、知识点
2.1、上次课程的主要知识点
1、JSP中的四种属性范围:
page、request、session、application;
2、request对象的使用:
getParameter()、getParmeterValues()、getContextPath()、getRemoteAddr()、setCharacterEncoding();
3、完全是围绕着JSP+JDBC的开发,可以发现代码极其重复。
2.2、本次预计讲解的知识点
1、response对象的使用;
2、session对象的使用,并且使用session修改登陆程序;
3、config及application对象的使用。
3、具体内容
3.1、response对象(重点)
服务器端接收客户端的请求使用的是request对象,而服务器端对客户端请求的回应使用的就是response对象,response对应的类型是:
javax.servlet.http.HttpServletResponse,而在实际的工作之中,response对象主要有以下三个作用:
设置头信息、请求重定向(跳转)、操作Cookie。
3.1.1、设置头信息
头信息:
头信息是附加在请求和回应上的一些内容。
范例:
观察请求的头信息
·既然要想取得头信息,现在依靠的肯定是request对象,在request对象之中提供了如下的几个方法;
|-取得全部头信息的名字:
publicEnumerationgetHeaderNames()
|-取得头信息的内容:
publicStringgetHeader(Stringname)
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%@pageimport="java.util.*"%>
<%
Enumerationenu=request.getHeaderNames();//取得全部头信息
while(enu.hasMoreElements()){
StringheadName=(String)enu.nextElement();//取得头信息的名称
%>
<%=headName%>--><%=request.getHeader(headName)%>
<%
}
%>
但是在这些头信息之中有一个头信息是最需要关注的,那么就是定时刷新,可以使用refresh的头信息完成。
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%!
intcount=0;
%>
<%//1秒一刷新
response.setHeader("refresh","1");
%>
<%=count++%>
现在声明了一个全局变量,之后每次一刷新,变量的内容就自增,一般的刷新频率都是2秒一刷新。
除了定时刷新之外,设置此类的头信息也可以完成定时跳转的操作功能。
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%//1秒一刷新
response.setHeader("refresh","2;URL=show.htm");
%>
恭喜您,注册成功,两秒后将跳转到首页!
如果没有跳转,请按这里!
定时跳转之后的地址栏发生了改变,所以此跳转属于客户端跳转。
3.1.2、页面重定向
在respose对象之中有一个跳转的操作:
publicvoidsendRedirect(Stringlocation)throwsIOException
范例:
观察跳转
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%//客户端跳转
response.sendRedirect("show.htm");
%>
面试题:
请解释JSP中两种跳转的区别?
在JSP中存在两种跳转:
· forward>: 服务器端跳转,可以传递request属性,无条件跳转,执行之后立刻跳转; ·response.sendRedirect(): 客户端跳转,不能传递request属性,整个页面执行完之后才进行跳转。 3.1.3、设置Cookie Cookie是服务器端保留在客户端上的一组数据,例如: 经常可以在某些论坛上发现有记住密码的功能,实际上这些密码都是保存在客户端上的,而保存的数据就称为Cookie。 但是由于Cookie是保存在客户端,所以安全性是相当的差的,在JSP之中专门提供了Cookie的操作类。 ·构造: publicpublicCookie(Stringname,Stringvalue),直接传入要设置的Cookie的名称和内容; ·取得Cookie的名称: publicStringgetName() ·取得Cookie的内容: publicStringgetValue() ·设置Cookie的保存时间: publicvoidsetMaxAge(intexpiry),单位是秒 当Cookie的对象准备完成之后,下面可以直接利用response对象的方法: publicvoidaddCookie(Cookiecookie) <%@pagecontentType="text/html"pageEncoding="GBK"%> <% Cookiec1=newCookie("username","hello"); Cookiec2=newCookie("userpass","mldn"); response.addCookie(c1); response.addCookie(c2); %> 现在的Cookie设置到了客户端之后,如果服务器要想取得,则依靠request对象,之所以要使用request对象,主要的原因是因为所有的Cookie会随着用户的请求头信息一起发送到服务器端。 在request对象中提供了接收Cookie的方法: publicCookie[]getCookies() <%@pagecontentType="text/html"pageEncoding="GBK"%> <%//取得全部的Cookie Cookiec[]=request.getCookies(); for(intx=0;x %> <% } %> 以上的程序运行之后发现可以取得了所设置的Cookie,但是同时又增加了以下一个Cookie: JSESSIONID-->CC2B62B3293C76BA7B9FF3F9B209AD81 此字符串为服务器端自动设置到客户端上的一个标记,这个标记就是SESSIONID,而且是32位。 在默认的情况下,一个Cookie只会保存在客户端浏览器上,而没有真正的保存在了系统文件之中,所以要想保存,就必须设置Cookie的保存时间,使用setMaxAge()方法完成。 <%@pagecontentType="text/html"pageEncoding="GBK"%> <% Cookiec1=newCookie("username","hello"); Cookiec2=newCookie("userpass","mldn"); c1.setMaxAge(20); c2.setMaxAge(50); response.addCookie(c1); response.addCookie(c2); %> 要想真正保存,必须设置保存的时间。 3.3、session对象(重点) session在web中表示的是每一个用户的操作,session是javax.servlet.http.HttpSession接口的实例,而此接口没有任何的继承关系,因为session只是HTTP协议的范畴。 3.3.1、sessionid session表示的是每一个用户,那么服务器端如何去区分每一个用户呢? 在每一个用户第一次连接到服务器上的时候,服务器会为这个用户分配一个唯一的编号,而这个编号就称为SESSIONID,每个用户的ID不一样,所以服务器端就根据这些ID的不同来区分不同的用户。 如果要想取得ID方法: publicStringgetId(),此方法没有对应的setter,因为sessionid如果让用户设置了就会出现重复的问题。 范例: 观察SESSIONID <%@pagecontentType="text/html"pageEncoding="GBK"%> <%//取得SESSIONID Stringid=session.getId(); %><%=c[x].getName()%>--><%=c[x].getValue()%>
<%=id%>
<%=id.length()%>
可以发现每一个SESSIONID的长度都是32位,而且这个SESSIONID的内容与自动设置到浏览器中Cookie的内容是一样的,所以SESSION实际上是利用到了Cookie的处理机制,每次客户端发送请求的时候都会将自己对应的SESSIONID发送到服务器端上,服务器端接收到此ID之后,与服务器端自己保留的SESSIONID相比较,如果成功了,则取出用户的信息,如果没有成功,则认为是一个新的SESSION。
3.3.2、登陆检查
在实际的应用之中,session的最大用处就是完成用户的登陆验证及注销的操作,session中存在着属性的设置方法,而且使用session属性范围保存的对象不管是何种跳转都能够保留下来,如果是新的用户则没有,那么就可以根据此特性完成用户的登陆检查。
范例:
编写login.jsp用于用户的登陆操作
<%@pagecontentType="text/html"pageEncoding="GBK"%>
用户名:
密 码:
<%//现在假设用户名是hello,密码是mldn
Stringname=request.getParameter("uname");
Stringpassword=request.getParameter("upass");
if(!
(name==null||"".equals(name)||password==null||"".equals(password))){
if("hello".equals(name)&&"mldn".equals(password)){
session.setAttribute("username",name);//设置session
response.setHeader("refresh","2;URL=welcome.jsp");
%>
您已登陆成功,欢迎回来!
两秒后跳转到首页,如果没有跳转,请按这里!
<%
}else{
%>
错误的用户名和密码!
<%
}
}
%>
由于登陆成功之后可以设置session属性,而此属性又不受跳转的限制,所以无论如何跳转,都可以取得,随后就通过此属性是否存在来判断用户是否已登陆。
范例:
欢迎页——welcome.jsp
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%//此页面应该是登陆之后才可以访问
if(session.getAttribute("username")!
=null){//设置过属性
%>
欢迎<%=session.getAttribute("username")%>的光临!
注销登陆!
<%
}else{
%>
您还未登陆,请先登陆!
<%
}
%>
既然用户可以登陆,那么也就可以注销,在session对象中提供了一个方法:
publicvoidinvalidate()
范例:
注销页——logout.jsp
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%//session失效,所有的属性没有,而且意味着sessionid也消失
session.invalidate();
response.sendRedirect("login.jsp");
%>
这种代码就是一个典型的用户的登陆验证操作,可是从现实的生活中来讲,这种登陆操作往往还会增加一个验证码功能,之所以会有此功能,主要是防止机器人程序。
3.3.3、判断是否是新的session
在session对象之中提供了一个方法,用于判断一个session是否是新的(就是刚创建的)
·方法:
publicbooleanisNew()
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%
if(session.isNew()){//是一个新连接的用户
%>
您好,欢迎您的光临!
<%
}else{
%>
您已经来过了,别来了!
<%
}
%>
而在实际的工作之中,session的最大功能就是登陆的验证及注销的实现。
3.4、application对象(重点)
application是javax.servlet.ServletContext接口的实例,此对象表示的是Servlet上下文,如果按照通俗的理解来讲,就是表示的整个WEB容器的操作,在application对象之中属性操作也是一个经常使用到的操作,但是之前也强调了由于此类属性保存在服务器上,所以这种属性越少越好,另外在这个对象之中有一个最常用的方法:
·取得虚拟目录对应的真实路径:
publicStringgetRealPath(Stringpath)
范例:
观察取得真实路径
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%
Stringpath=application.getRealPath("/");
%>
<%=path%>
现在找到的是在“
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%
Stringpath=this.getServletContext().getRealPath("/");
%>
<%=path%>
以后只要是看见了getServletContext()方法肯定表示调用的就是application对象。
既然现在已经可以取得真实路径了,那么下面就可以利用此操作完成文件的输出。
范例:
定义一个输入的文本框,输入文件名称及文件内容
输入文件名称:
输入文件内容: