JSP学习记--04.doc
Jsp的内置对象
2、response对象
跟request对应的对象,可以对客户的请求做出动态响应
由于page指令只能为contentType属性指定一个值来决定响应的MIME类型,要想动态的改变这个属性的值,要使用reponse对象的setContentType(String s)方法来改变对象的属性值。
常用的MIME类型:text/html; application/msword
要保证客户支持MIME类型!
例:response1.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.util.*"%>
<HTML>
<BODY BGCOLOR=cygn background="1148350156370.jpg"><FONT size=4>
<p><h1>reponse对象的setContentType方法</h1><br>
<p><h3>将当前对象保存为word文档吗?</h3><br>
<form action="" method="get" name=form>
<INPUT TYPE="submit" NAME="submit" VALUE="yes">
</form>
<%
String str=request.getParameter("submit" );
if(str==null )
{
str="" ;
}
if(str.equals("yes" ))
{
response.setContentType("application/msword;charset=GB2312" );
}
%>
</font>
</BODY>
</HTML>
<%@ page import="java.util.*"%>
<HTML>
<BODY BGCOLOR=cygn background="1148350156370.jpg"><FONT size=4>
<p><h1>reponse对象的setContentType方法</h1><br>
<p><h3>将当前对象保存为word文档吗?</h3><br>
<form action="" method="get" name=form>
<INPUT TYPE="submit" NAME="submit" VALUE="yes">
</form>
<%
String str=request.getParameter("submit" );
if(str==null )
{
str="" ;
}
if(str.equals("yes" ))
{
response.setContentType("application/msword;charset=GB2312" );
}
%>
</font>
</BODY>
</HTML>
方法:addHeader(String head,String value)或setHeader……
动态的添加新的响应头和响应头的值,并将这些值发送给客户的浏览器。
若头已存在则覆盖原来的头。
例见reponse2.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.util.*"%>
<HTML>
<BODY BGCOLOR=cygn background="1148350156370.jpg"><FONT size=4>
<p><h1>现在的时间</h1><br>
<%
out.println( ""+new Date ());
response.setHeader("Refresh","5" );
%>
</font>
</BODY>
</HTML>
方法:sendRedirect(URL url) 重定向 将网页转向其他!
例见:reponse3.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.util.*"%>
<HTML>
<BODY BGCOLOR=cygn background="1148350156370.jpg"><FONT size=4>
<p><h1>填写姓名:</h1><br>
<form action="tree.jsp" method="get" name=form>
<input type="text" name="boy" >
<input type="submit" value="enter">
</form>
</font>
</BODY>
</HTML>
<%@ page import="java.util.*"%>
<HTML>
<BODY BGCOLOR=cygn background="1148350156370.jpg"><FONT size=4>
<p><h1>填写姓名:</h1><br>
<form action="tree.jsp" method="get" name=form>
<input type="text" name="boy" >
<input type="submit" value="enter">
</form>
</font>
</BODY>
</HTML>
tree.jsp
<HTML>
<BODY BGCOLOR=cygn background="1148350156370.jpg"><FONT size=4>
<%...
String str=null;
str=request.getParameter("boy");
if(str==null)
{
str="";
}
byte b[]=str.getBytes("ISO-8859-1");
str=new String(b);
if(str.equals(""))
{
response.sendRedirect("response1.jsp");
}
else
{
out.println("Welcome!!!");
out.println(str);
}
%>
</font>
</BODY>
</HTML>
<BODY BGCOLOR=cygn background="1148350156370.jpg"><FONT size=4>
<%...
String str=null;
str=request.getParameter("boy");
if(str==null)
{
str="";
}
byte b[]=str.getBytes("ISO-8859-1");
str=new String(b);
if(str.equals(""))
{
response.sendRedirect("response1.jsp");
}
else
{
out.println("Welcome!!!");
out.println(str);
}
%>
</font>
</BODY>
</HTML>
Response的状态行(当服务器对客户请求响应时,客观存它发送的首行)
状态行包括3位数字的状态代码和对状态代码的描述。
5类状态代码的简单描述:(具体查询相关书籍)
Iyy :(1开头的3 位数):主要是实验性质的
2yy:用来表明请求成功的
3yy:用来表明在请求满足之前应采取进一步的行动
4yy:当浏览器做出无法满足的请求时,返回该状态代码
5yy:表示服务器出现问题
一般不用修改状态行,服务器会自动响应,可以用reponse的setStatus(int n)方法增加状态行!!
例见response4.jsp
<%...@ page contentType="text/html;charset=GB2312" %>
<%...@ page import="java.util.*"%>
<HTML>
<BODY BGCOLOR=cygn background="1148350156370.jpg"><FONT size=4>
<p><h1>点击下面的超链接:</h1><br>
<a href="bird1.jsp"> bird1:欢迎你吗?
<br>
<a href="bird2.jsp"> bird2:欢迎你吗?
<br>
<a href="bird3.jsp"> bird3:欢迎你吗?
</font>
</BODY>
</HTML>
<%...@ page import="java.util.*"%>
<HTML>
<BODY BGCOLOR=cygn background="1148350156370.jpg"><FONT size=4>
<p><h1>点击下面的超链接:</h1><br>
<a href="bird1.jsp"> bird1:欢迎你吗?
<br>
<a href="bird2.jsp"> bird2:欢迎你吗?
<br>
<a href="bird3.jsp"> bird3:欢迎你吗?
</font>
</BODY>
</HTML>
bird1.jsp
<html>
<body>
<%...
response.setStatus(408);
out.print("不显示啦");
%>
</body>
</html>
<body>
<%...
response.setStatus(408);
out.print("不显示啦");
%>
</body>
</html>
bird2.jsp
<html>
<body>
<%...
response.setStatus(200);
out.print("显示啦");
%>
</body>
</html>
<body>
<%...
response.setStatus(200);
out.print("显示啦");
%>
</body>
</html>
bird3.jsp
<html>
<body>
<%...
response.setStatus(500);
%>
</body>
</html>
<body>
<%...
response.setStatus(500);
%>
</body>
</html>
3、session对象
如何记录连接信息?用会话记录,会话是指客户打开浏览器械连接某个服务到客户关闭浏览器称作一个会话,
服务器械通过如下办法判断这是一个客户-----session(会话对象)。
当客户首次访问服务目录的一个JSP页面时,JSP引擎产生一个session对象,存放客户的信息,直到客户关闭浏览器或session对象达到最大的生存空间。当用户重新访问时会再创建一个新的session
见例session1.jsp
<%...@ page contentType="text/html;charset=GB2312" %>
<%...@ page import="java.util.*"%>
<HTML>
<BODY BGCOLOR=cygn background="1148350156370.jpg"><FONT size=4>
<p>
<%...
String s=session.getId();
%>
<P> 您的SESSION对象的ID是:
<%=s%>
<p> 点击下面的超链接进入tom.jsp:
<br>
<a href="tom.jsp">
<br> tom欢迎你
</a>
</font>
</BODY>
</HTML>
<%...@ page import="java.util.*"%>
<HTML>
<BODY BGCOLOR=cygn background="1148350156370.jpg"><FONT size=4>
<p>
<%...
String s=session.getId();
%>
<P> 您的SESSION对象的ID是:
<%=s%>
<p> 点击下面的超链接进入tom.jsp:
<br>
<a href="tom.jsp">
<br> tom欢迎你
</a>
</font>
</BODY>
</HTML>
tom.jsp
<HTML>
<BODY BGCOLOR=cygn background="1148350156370.jpg"><FONT size=4>
<p>
<%...
String s=session.getId();
%>
<p> 您在TOM中的对象的ID是:
<%=s%>
<p> 点击下面的超链接进入white.jsp:
<br>
<a href="white.jsp">
<br> White欢迎你
</a>
</font>
</BODY>
</HTML>
<BODY BGCOLOR=cygn background="1148350156370.jpg"><FONT size=4>
<p>
<%...
String s=session.getId();
%>
<p> 您在TOM中的对象的ID是:
<%=s%>
<p> 点击下面的超链接进入white.jsp:
<br>
<a href="white.jsp">
<br> White欢迎你
</a>
</font>
</BODY>
</HTML>
white.jsp
<HTML>
<BODY BGCOLOR=cygn background="1148350156370.jpg"><FONT size=4>
<p>
<%... String s=session.getId();
%>
<p> 您在WHITE中的对象的ID是:
<%=s%>
<p> 点击下面的超链接进入session.jsp:
<br>
<a href="session1.jsp">
<br> session欢迎你
</a>
</font>
</BODY>
</HTML>
<BODY BGCOLOR=cygn background="1148350156370.jpg"><FONT size=4>
<p>
<%... String s=session.getId();
%>
<p> 您在WHITE中的对象的ID是:
<%=s%>
<p> 点击下面的超链接进入session.jsp:
<br>
<a href="session1.jsp">
<br> session欢迎你
</a>
</font>
</BODY>
</HTML>
Session对象与URL重写
如果客户的浏览器不支持COOKIE,则就不能对SESSION对象进行创建,就不能确定会话,则就要使用URL重写,通过向URL写入值,并将之带入将要链接的页面中去,我而使页面中的SESSION对象一致!
实现方法:利用response的encodeURL()或者encodeRedirectURL()实现URL的重写!
例:<%
String s=session.getId(“session.jsp”);
String str=response.encodeURL(“tom.jsp”);
%>
如此便将session.jsp中的URL值写入了tom.jsp,使得二者的session值相同!!!
Session对象的一些常用的方法:
public void setAttribute(String key,Object obj)
public void getAttribute(String key)
public Enumeration getAttributeName()
public long getCreationTime()