jsp

本文详细介绍了JSP的基础知识,包括<jsp:include>和<jsp:forward>的使用方法,如何定义函数,静态属性的应用,表单处理技巧,request对象的使用,缓冲区管理,sendRedirect方法的应用,Cookie的设置与读取,以及application和session对象的使用方法。
摘要由CSDN通过智能技术生成

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>的用法范例:
<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>

在JSP中我们利用<%! ...method()   %>语法来定义一个函数(方法),下面我们就来看一个范例
范例一
<%@ 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>

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值