JSP基础知识(二)
<jsp:include>的用法范例
<jsp:include>用与动态加载html或者是jsp网页,其语法如下:
<jsp:include page="xx.html或者xx.jsp">
<jsp:param value="<% =value%>"/>
</jsp:include>
范例一
first.jsp程序代码:
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<html>
<head>
<title>include 的用法</title>
</head>
<body>
<center>下面是使用include加载的jsp页面</center>
<hr>
<%
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time=sdf.format(date);
%>
<jsp:include page="second.jsp">
<jsp:param value="<%= time %>"/>
</jsp:include>
<hr>
<center>上面是使用include加载的页面</center>
</hr>
</body>
</html>
second.jsp程序代码
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<body>
<center>
%= request.getParameter("time") %>
</center>
</body>
</html>
<jsp:forward>的功能是将浏览器显示的页面,导向另外一个html或者jsp网页。其格式如下
<jsp:forward page="xx.html/xx.jsp">
<jsp:param value="<% =value%>"/>
</jsp:forward>
与<jsp:include>方法不一样,<jsp:include>是用语加载html或者jsp叶面,下面我们来看一个范例,
范例一:
first.jsp程序代码如下
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<html>
<head>
<title>include 的用法</title>
</head>
<body>
<center>下面是使用include加载的jsp页面</center>
<hr>
<%
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time=sdf.format(date);
%>
<jsp:forward page="second.jsp">
<jsp:param value="<%= time %>"/>
</jsp:forward>
<hr>
<center>上面是使用include加载的页面</center>
</hr>
</body>
</html>
second.jsp程序代码
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<body>
<center>
%= request.getParameter("time") %>
</center>
</body>
</html>
范例一
<%@ page contentType="text/html;charset=gb2312" %>
<%!
int a=20,b=10;
int addMethod(int a,int b)
{
return a+b;
}
%>
<html>
<head>
<title>method ()</title>
</head>
<body>
<center>函数的使用方法 </center>
<hr>
addMethod(10,20)的结果为--><%= addMethod(10,20) %><br>
addMethod(2,10)的结果为---><%= addMethod(5,10) %><br>
</body>
</html>
运行结果为:
addMethod(10,20)的结果为-->30
addMethod(2,10)的结果为--->15
范例二:静态属性的用法
<%@ page contentType="text/html;charset=gb2312" %>
<%! static int count=0; %>
<html>
<head>
<title>静态属性的用法 </title>
</head>
<body>
<center>静态属性的使用</center>
<hr>
<%
count++;
%>
本网页一共被浏览了<%= count %>次。
</hr>
</body>
</html>
网页的表单处理范例
范例一:
first.jsp的程序代码:
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<title>数据的输入和输出</title>
</head>
<body>
<center>数据的输入</center>
<hr>
<form action="second.jsp" method="post" >
请输入一些信息:<input type="TextFiled"><br>
<input type="submit" value="提交">
</form>
</hr>
</body>
</html>
second.jsp程序代码
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<title>数据的输出</title>
</head>
<body>
<center>数据的输出</center>
<hr>
%= request.getParameter("textname") %>
</hr>
</body>
</html>
request对象:
范例一
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>request test</title>
</head>
<body>
<table border="1" align=center>
<th>参数名称</th>
<th>参数值</th>
<%
Enumeration e=request.getParameterNames();
while(e.hasMoreElements())
{
String > out.print("<tr><td>"+name+"/n<td>");
String [] values=request.getParameterValues(name);
if(values.length==1)
{
String value=values[0];
if(value.length()==0)
{
out.print("<I>no value<I>");
}
else
{
out.print(value);
}
}
else
{
out.print("<ul>");
for(int i=0;i<values.length;i++)
{
out.println("<li>"+values[i]);
}
out.print("</ul>");
}
}
%>
</table>
</body>
</html>
buffer(缓冲区的使用)
范例一:
对于buffer的使用我们必须掌握下列方法,
1:response.setBufferSize(int bytes) 设置缓冲区的大小
2:response.getBufferSize() %@ page contentType="text/html;charset=gb2312" buffer="16kb" %>
<html>
<head>
<title>buffer Test</title>
</head>
<body>
<center>buffer Test example</center>
<hr>
原缓冲区的大小为<%= response.getBufferSize() %>bytes<br>
<%
response.setBufferSize(8*1024);
%>
更改后缓冲区的大小为<%= out.getBufferSize() %>bytes<br>
<hr>
<%
for(int i=0;i<10000;i++)
{
out.print("缓冲区剩余"+out.getRemaining()+";i=="+i);
if(response.isCommitted())
{
out.print("<br>数据从缓冲区中输出<br>");
break;
}
}
%>
</body>
</html>
范例二:
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<title>out.flush() test</title>
</head>
<body>
<center>out.flush() example</center>
<hr>
<% String str="Hello JSP,do you live me!"; %>
缓冲区的大小为<%= response.getBufferSize() %><br>
<%
for(int i=0;i<=10;i++)
{
try{Thread.sleep(2000);}catch(Exception e){}
out.print(str+"<br>");
out.flush();
//response.flushBuffer();
}
%>
</body>
</html>
sendRedirect方法的使用:
范例一:
first.jsp程序代码
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<title>sendRedirect test</title>
</head>
<body>
<center>sendRedirect test example</center>
<hr>
<form action="second.jsp" method="post" >
<table>
<tr>
<td>/td>
<td><input type="text" ><br></td>
</tr>
<tr>
<td>密码 :</td>
<td><input type="password" ><br> </td>
</tr>
</table>
<input type="submit" value="提交">
</form>
</body>
</html>
second.jsp程序代码
<%@ page contentType="text/html;charset=gb2312" %>
<%
String textname");
String password=request.getParameter("textpass");
if(name.equals("")||password.equals(""))
response.sendRedirect("first.jsp");
%>
<html>
<head>
<title>secnod.jsp</title>
</head>
<body>
<center>sendRedirect方法的使用</center>
<hr>
用户名:<%= name %><br>
密码:<%= password %>
<h3>上面为你输入的内容</h3>
</body>
</html>
Cookie使用范例
在JSP中,将数据存入到Cookie中需要使用response对象的addCookie()方法,如果取得Cookie中的数据需要用到request对象中的getCookies()方法,此方法返回一个Cookie类型的数组。
下面我们就来分别看一下如何存取数据到Cookie中。
1:将数据存入Cookie中,分为两步,
(1):为要保存的数据建立Cookie变量,语法为Cookie cookieName =new Cookie("数据名称",值),需要注意的是,保存到Cookie中的数据只能为字符串,
(2): 调用response对象的addCookie()方法,将上述变量加入到Cookie中去,下面我们来看一个程序片段:
Cookie num=new Cookie("num","100");//为要保存的数据建立Cookie变量
response.addCookie(num);//调用response对象的addCookie()方法,将上述变量加入到Cookie中去
2:从Cookie中取得数据:
(1):调用request对象的getCookies()方法,取得保存在Cookie中的数据,注意返回类型是一个Cookie类型的数组。语法如下
Cookie [] cookies=request.getCookies();
(2):利用循环从Cookie变量数组中取出Cookie变量。
(3):调用Cookie的getName()方法取得变量中的数据名称,并且加以比较。
下面我们就来看一个完整的范例
范例一
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<title>Cookie Test</title>
</head>
<body>
<center>Cookie Test Example</center>
<hr>
<%
Cookie num=new Cookie("num","100");
response.addCookie(num);
Cookie cok=null;
Cookie co[]=request.getCookies();
int len=co.length;
if(len!=0)
{
for(int i=0;i<len;i++)
{
cok=co[i];
if(cok.getName().equals("num"))
{
out.print("Cookie 中 num变量的值为-->"+num.getValue()+"<br>");
}
}
}
else
{
out.print("无法存取Cookie ");
}
%>
</body>
</html>
运行结果:
Cookie 中 num变量的值为-->100
范例二:Cookie变量的可存取范围
<%@ page contentType="text/html;charset=gb2312" %>
<%
int num=100;
Cookie co1=new Cookie("co1",String.valueOf(num));
Cookie co2=new Cookie("co2","200");
String path="d://qq";
co1.setPath(path);
response.addCookie(co1);
response.addCookie(co2);
%>
<html>
<head>
<title>Cookie Test</title>
</head>
<body>
<center>Cookie可存取路径的设置</center>
<hr>
%= co1.getValue() %>,存取路径为:<%= co1.getPath() %><br>
%= co2.getValue() %>,存取路径为:<%= co2.getPath() %><br>
<%
Cookie cok=null,cok1=null,cok2=null;
Cookie [] cos =request.getCookies();
if(cos!=null)
{
for(int i=0;i<cos.length;i++)
{
cok=cos[i];
if(cok.getName().equals("co1")) cok1=cok;
if(cok.getName().equals("co2")) cok2=cok;
}
if(cok1==null)
out.print("无法存取Cookie中的co1<br>");
else
out.print("Cookie中co1变量值=="+co1.getValue()+"<br>");
if(cok2==null)
out.print("无法存取Cookie中的co2<br>");
else
out.print("Cookie中co1变量值=="+co2.getValue()+"<br>");
}
%>
</body>
</html>
运行结果
co1:值为:100,存取路径为:d:/qq
co2:值为:200,存取路径为:null
无法存取Cookie中的co1
Cookie中co1变量值==200
范例三:设置Cookie变量的有效时间
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<%
boolean firstlog=true;
String lastlogdate="";
Cookie cok=null;
Cookie [] cos=request.getCookies();
if(cos!=null)
{
for(int i=0;i<cos.length;i++)
{
cok=cos[i];
if(cok.getName().equals("logdate"))
{
lastlogdate=cok.getValue();
firstlog=false;
}
}
}
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String logdate=sdf.format(date);
Cookie mycok=new Cookie("logdate",logdate);
int time=7*24*60*60;
mycok.setMaxAge(time);
response.addCookie(mycok);
%>
<html>
<head>
<title>Cookie有效时间设置</title>
</head>
<body>
<center>Cookie有效时间设置</center>
<hr>
<%
if(firstlog==true)
out.print("您是第一次光临此网页");
else
out.print("您曾在"+lastlogdate);
%>
</body>
</html>
application对象的使用
将数据保存到application对象的语法为:application.setAttribute(String 变量名称,Object 值)
将数据从application对象中取得的语法为:Object 对象变量名称=application.getAttribute(String 变量名称)
下面请看一个范例
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<title>application test </title>
</head>
<body>
<center>application tsest example</center>
<hr>
<%
String strnum=(String)application.getAttribute("num");
int num=0;
if(strnum!=null)
{
num=Integer.parseInt(strnum)+1;
}
application.setAttribute("num",String.valueOf(num));
%>
application对象中的num变量值为<%= num %>
</body>
</html>
session使用方法
范例一:有效时间的设置和取得
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<title>有效时间的设置与取得</title>
</head>
<body>
<center>有效时间的设置与取得</center>
<hr>
默认的session有效时间为<%= session.getMaxInactiveInterval() %><br>
<%
session.setMaxInactiveInterval(60*20);
%>
更改后的session有效时间为<%= session.getMaxInactiveInterval() %>
</body>
</html>
运行结果:
默认的session有效时间为1800
更改后的session有效时间为1200
范例二:利用isNew()方法来判断一个session()对象是否为新增对象,如果是的话利用isValidate()将其中断。
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<title>新增session对象的判断与强制终止</title>
</head>
<body>
<center>新增session对象的判断与强制终止</center>
<hr>
<%
if(session.isNew())
{
session.invalidate();
out.print("此session对象为非新增对象,已强制中断<br>");
}
else
{
out.print("此session对象不是新增对象");
}
%>
</body>
</html>
范例三:session对象的一些属性用法
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>session的属性用法</title>
</head>
<body>
<center>下面是一些session的属性</center>
<hr>
session的建立时间--><%= new Date(session.getCreationTime()).toLocaleString() %><br>
session的编号------><%= session.getId() %><br>
session的最后一次存取时间--><%= new Date(session.getLastAccessedTime()).toLocaleString() %><br>
</body>
</html>
运行结果:
session的建立时间-->2007-4-1FBADA3444C04834AD295378E77F26C0E
session的最后一次存取时间-->2007-4-1%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<title>request test</title>
</head>
<body>
<center>request Test Example</center>
<hr>
<%
if(request.getParameter("name")==null)
{
%>
<form action="first.jsp" method="post" >
<input type="radio" value="redirect" checked="true">
使用response对象的sendRedirect方法<br>
<input type="radio" value="forward">
使用forward操作<br>
<input type="submit" value="提交">
</form>
<%
}
else
{
request.setAttribute("num","100");
if(request.getParameter("name").equals("redirect"))
{
response.sendRedirect("second.jsp");
}
else
{
%>
<jsp:forward page="second.jsp"/>
<%
}
}
%>
</body>
</html>
second.jsp程序代码
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<title>request test</title>
</head>
<body>
<center>request Test Example</center>
<hr>
<%
String num=(String)request.getAttribute("num");
if(num==null)
{
out.print("无法从request对象中取得名为num的数据");
}
else
{
out.print("num的值为:"+num);
}
%>
</body>
</html>
JSP对文件的操作:
范例一:request.getrealPath()方法的使用
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<title>jsp file test</title>
</head>
<body>
<hr>
Web 站点主目录位置为--><%= request.getRealPath("/") %><br>
JSP网页所在的目录位置为--><%= request.getRealPath("./") %><br>
JSP网页所在目录上一层目录的位置为--><%= request.getRealPath("../") %>
</body>
</html>
范例二:对文件和目录的操作范例
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*" %>
<html>
<head>
<title>file operating test</title>
</head>
<body>
<hr>
<%
File f=new File("d://java.txt");
if(f.exists())
{
f.delete();
out.print(f.getPath()+f.getName()+"文件存在已经删除<br>");
}
else
{
f.createNewFile();
out.print(f.getPath()+f.getName()+"文件不存在,已经创建");
}
%>
<hr>
<%
File f1=new File("d://sub");
if(f1.exists())
{
f1.delete();
out.print(f1.getName()+"目录以存在,已删除");
}
else
{
f1.mkdir();
out.print(f1.getName()+"目录不存在,已经创建");
}
%>
</body>
</html>
范例三:文件属性的获取:
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>file test</title>
</head>
<body>
<center>文件的属性</center>
<hr>
<%
File f=new File("d://j1.bat");
if(f.exists())
{
%>
<%= f.getName() %>的属性如下:
<hr>
<ul>
<li>文件名称--><%= f.getName() %></li>
<li>文件长度--><%= f.length() %></li>
<li><%= (f.isFile()?"是文件":"不是文件") %></li>
<li><%= (f.isDirectory()?"是目录":"不是目录") %></li>
<li><%= (f.canRead()?"can read":"not read") %></li>
<li><%= (f.canWrite()?"can write":"not write") %></li>
<li><%= f.isHidden()?"是隐藏文件":"不是隐藏文件" %></li>
<li>最后修改时间--><%= new Date(f.lastModified()) %></li>
</ul>
<%
}
%>
</body>
</html>
运行结果
文件名称-->j1.bat
文件长度-->218
是文件
不是目录
can read
can write
是隐藏文件
最后修改时间-->Thu%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*" %>
<html>
<head>
<title>file test</title>
</head>
<body>
<center>取得目录中的文件</center>
<hr>
<%
File f=new File("d://my file");
File [] files=f.listFiles();
%>
在<%= f.getPath() %>目录下的文件有
<ul>
<%
for(int i=0;i<files.length;i++)
{
if(files[i].isDirectory())
{
File [] files2=files[i].listFiles();
for(int j=0;j<files2.length;j++)
{
out.print("<li>"+files2[j].getName()+"<br>");
}
}
else
{
out.print("<li>"+files[i].getName()+"<br>");
}
}
%>
</ul>
</body>
</html>
范例五:
FileReader范例:
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*" %>
<html>
<head>
<title>read file </title>
</head>
<body>
<center>以下为从文件readme.txt中读取的内容</center>
<hr>
<%
File f=new File("d://readme.txt");
FileReader fread=new FileReader(f);
/*char [] b =new char[1024];
int num=fread.read(b);
out.print(new String(b,0,num));*/
int count=0;
int num=fread.read();
while(num!=-1)
{
out.print((char)num);
count++;
num=fread.read();
}
out.print("<br>一共读取了 "+count+"个字符");
fread.close();
%>
</body>
</html>
FileWriter范例
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*" %>
<html>
<head>
<title>read file </title>
</head>
<body>
<center>以下为从文件readme.txt中读取的内容</center>
<hr>
<%
File f=new File("d://readme.txt");
FileWriter fwrite=new FileWriter(f);
String str="adjkfhaskdfjasdf";
int num=10;
fwrite.write(num);
fwrite.write(str);
out.print("以将内容写入文件内,请查看");
fwrite.close();
%>
</body>
</html>
FileReader和FileWriter的搭配使用范例
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*" %>
<html>
<head>
<title>read file </title>
</head>
<body>
<center>以下为从文件readme.txt中读取的内容</center>
<hr>
<%
File read=new File("d://readme.txt");
File write=new File("d://readmecopy.txt");
FileReader fread=new FileReader(read);
FileWriter fwrite=new FileWriter(write);
char c[]=new char[1024];
int num=fread.read(c);
out.print("开始读取文件内容....<br><hr>");
String text=new String(c,0,num);
out.print(text);
out.print("<hr>");
out.print("<br>文件读取完毕....<br>");
fread.close();
out.print("下面开始写入.....<br>");
fwrite.write(text);
fwrite.flush();
fwrite.close();
out.print("文件写入完成,请查看");
%>
</body>
</html>
BufferedReader和BufferedWriter用法范例
范例一
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*" %>
<html>
<head>
<title>BufferedReader and BufferedWriter test</title>
</head>
<body>
<center>BufferedReader And BufferedWriter Test Example</center>
<%
FileReader fread=new FileReader("d://readme.txt");
FileWriter fwrite=new FileWriter("d://readmecopy.txt");
BufferedReader bread=new BufferedReader(fread);
BufferedWriter bwrite=new BufferedWriter(fwrite);
String text="";
int count=0;
out.print("开始读取文件的内容,以下为读取的内容<br><hr>");
while((text=bread.readLine())!=null)
{
count++;
out.print(text+"<br>");
bwrite.write(text);
bwrite.newLine();
}
out.print("<hr>文件读取完毕.....<br>");
out.print("一共读取了 "+count+"行内容<br>");
fwrite.flush();
bwrite.flush();
fwrite.close();
bwrite.close();
fread.close();
bread.close();
out.print("<br>");
out.print("文件开始写入....<br>");
out.print("文件写入完成...请查看");
%>
</body>
</html>
范例二:文字类型的记数器
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*" %>
<html>
<body>
<%
FileReader fread=new FileReader("d://count.txt");
BufferedReader bread=new BufferedReader(fread);
String num=bread.readLine();
bread.close();
fread.close();
%>
<center>您是第<%= num %>访问者</center>
<%
FileWriter fwrite=new FileWriter("d://count.txt");
int intnum=Integer.parseInt(num)+1;
fwrite.write(String.valueOf(intnum));
fwrite.close();
%>
</body>
</html>