JSP 技术

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*,java.sql.Date,java.util.*,java.text.*"%>
<%@include file="trans.jsp"%>
<html>
<head>
<title>将数据写入文件</title>
</head>
<body>
<form method="post" action="WriteData.jsp">
主题:<INPUT name=subject size=80><br>
内容:<textarea name=content cols=80 rows=20 ></textarea>
<br>
<input name="submit" type="submit" value="确 认">
<input name="reset" type="reset" value="重 填">
</form>
<%
String path=request.getRealPath(".");
Calendar cal = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
String Files=formatter.format(cal.getTime());

FileWriter fw=new FileWriter(path + "\\"+Files+".html");
fw.write("<html><head><title>"+trans(request.getParameter("subject"))+"</title>");
fw.write("<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>");
fw.write("<META HTTP-EQUIV='Pragma' CONTENT='no-cache'>");
fw.write("</head><body leftmargin='0' topmargin='0'>");
fw.write("<table border=0 cellspacing=0 cellpadding=0 width='100%'>");
fw.write("<tr><td align=left valign=top><table border=0 cellspacing=0 cellpadding=0 width=770 align=center>");
fw.write("<tr><td width='777'><table border=0 cellspacing=0 cellpadding=0 width=770><tr><td valign=top width=680> <br>");
fw.write("<table border=0 cellspacing=0 cellpadding=0 width='100%'>");
fw.write("<tr> <td align=center>");
fw.write("<table border=0 cellspacing=0 cellpadding=0 width='95%'>");
fw.write("<tr>");
fw.write("<td align=center></td>");
fw.write("</tr><tr><td align=center height=25 valign=top><table width=100% bgcolor='#D0C8C8'>");
fw.write("<tr><td width='20%'>>>新闻中心>>正文</td>");
fw.write("</tr> </table> <br>");
fw.write("<b>"+trans(request.getParameter("subject"))+"</b>");
fw.write(" <hr><span class=9n>"+new java.util.Date()+"</span></td>");
fw.write("</tr> <tr> <td align=left><div align=center></div>");
fw.write("<br><p class='wtext'>"+trans(request.getParameter("content"))+" </p>");
fw.write("<div align=right></div></td> </tr>");
fw.write("<tr><td align=center><br>");
fw.write("<div align=center><a href='javascript:window.close()' class=tl>【关闭窗口】</a></td></tr>");
fw.write("</table> </td> </tr> </table></td>");
fw.write("<td width=150 valign=top bgcolor='#ffffff' align=left>");
fw.write("<p> </p>");
fw.write("</td></tr></table> </td></tr><tr><td>");
fw.write("<table border=0 height=4 cellspacing=0 cellpadding=0 width='100%'>");
fw.write("<tr><td width=108 bgcolor='#003564'> </td>");
fw.write("<td rowspan='2'><table width=100% border=0 cellspacing=0 cellpadding=0>");
fw.write(" <tr><td height=1 bgcolor='#003564'> </td>");
fw.write(" </tr><tr><td height=3 bgcolor='#cc0001'> </td>");
fw.write("</tr> </table> </td></tr><tr><td bgcolor='#CC0001'> </td>");
fw.write("</tr></table></td></tr>");
fw.write("<tr><td> </td> </tr>");
fw.write("<tr> <td> <table width='770' border='0' cellspacing='0' cellpadding='0'>");
fw.write("<tr bgcolor='#000000' valign='top'> <td bgcolor='#E7E7E7'> </td>");
fw.write(" </tr> </table></td> </tr> </table> </td> </tr></table></body></html>");
fw.close();
out.println("数据已经插入!");
%>
</body>
</html>
Jason   2005-05-12 22:09:49 阅读:2323  评论:2  引用:0
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*,java.lang.*"%>
<html>
<head>
<title>读取所有的文件数据</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "\\ReadData.txt");
//关键在于读取过程中,要判断所读取的字符是否已经到了文件的末尾,并且这个字符是不是文件中的断行符,即判断该字符值是否为13。
int c=fr.read();//从文件中读取一个字符
//判断是否已读到文件结尾
while(c!=-1){
out.print((char)c);//输出读到的数据
c=fr.read();//从文件中继续读取数据
if(c==13){//判断是否为断行字符
out.print("<br>");//输出分行标签
fr.skip(1);//略过一个字符
//c=fr.read();//读取一个字符
}
}
fr.close();
%>
</body>
</html>

Jason   2005-05-12 16:17:32 阅读:1233  评论:0  引用:0
  通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法。如下所示:

class Simple{
static void go(){
System.out.println("Go...");
}
}
public class Cal{
public static void main(String[] args){
Simple.go();
}
}

  调用一个静态方法就是“类名.方法名”,静态方法的使用很简单如上所示。一般来说,静态方法常常为应用程序中的其它类提供一些实用工具所用,在Java的类库中大量的静态方法正是出于此目的而定义的。

使成员变量m 被函数fun()直接访问
class Test{
  static int m;
  public static void fun() {
    // some code...
  }
}
Jason   2005-04-20 21:13:52 阅读:2369  评论:0  引用:0
request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。
response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)
out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page表示从该页面产生的一个servlet实例
Jason   2005-04-18 18:12:25 阅读:2800  评论:3  引用:0

答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面synchronized
Jason   2005-03-06 12:41:00 阅读:2289  评论:1  引用:0
ArrayList是List接口的一个可变长数组实现。实现了所有List接口的操作,并允许存储null值。除了没有进行同步,ArrayList基本等同于Vector。在Vector中几乎对所有的方法都进行了同步,但ArrayList仅对writeObject和readObject进行了同步,其它比如add(Object)、remove(int)等都没有同步。 所以:一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 ;二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
Jason   2005-03-06 12:35:41 阅读:5491  评论:2  引用:0
http://sanxia.name/A,8,111.aspx
  一、 前言

说起来,Cookie应该是一种应用较久的技术了。早在HTML刚刚出现的时候,在每个独立的页面之间没有办法记录和标识不同的用户。后来人们就发明了Cookie技术,当用户访问网页时,它能够在访问者的机器上创立一个文件,我们把它叫作Cookie,写一段内容进去,来标识不同的用户。如果下次用户再访问这个网页的时候,它又能够读出这个文件里面的内容,这样网页就知道上次这个用户已经访问过该网页了。

虽然现在网页的制作技术比起几年以前已经发展了许多。不过有些时候,Cookie还是能够帮我们很多忙的。接下来,我们就来看看,如何在写JSP文件的时候,用JSP操作Cookie。
二、 写入Cookie

其实用JSP操作Cookie是非常简单的,我们来看下面一段JSP程序:

........(中间略)


<%
String cookieName="Sender";
Cookie cookie=new Cookie(cookieName, "Test_Content");
cookie.setMaxAge(10);
response.addCookie(cookie);
%>
........(其他内容)


这样我们就设置了一个Cookie,很简单吧?
我们来仔细研究一下这段代码:

  Cookie cookie=new Cookie(cookieName, "Test_Content");

这一行建立了一个Cookie对象,初始化有两个参数,第一个参数cookieName定义了Cookie的名字,后一个参数,也是一个字符串,定义了Cookie的内容。也就是我们希望网页在用户的机器上标识的文件内容。

接下来一行:cookie.setMaxAge(10),调用了Cookie中的setMaxAge方法,设定Cookie在用户机器硬盘上的存活期为10秒。一个Cookie在用户的硬盘里面存在的时间并不是无限期的,在建立Cookie对象的时候,我们必须制定Cookie的存活期,超过了这个存活期后,Cookie文件就不再起作用,会被用户的浏览器自行删除。如果我们希望用户在下次访问这个页面的时候,Cookie文件仍然有效而且可以被网页读出来的话,我们可以将Cookie的存活期设得稍微长一些。比如cookie.setMaxAge(365*24*60*60)可以让Cookie文件在一年内有效。

三、 读出Cookie

Cookie文件创建好后,自然还需要我们把它读出来,否则我们不是白费力气吗?接下来我们看看如何读出在用户硬盘上的Cookie。

........(中间略)

Name value

<%
Cookie cookies[]=request.getCookies();
Cookie sCookie=null;
String svalue=null;
String sname=null;
for(int a=0;a{
sCookie=cookies[a];
svalue=sCookie.getValue();
sname=sCookie.getName();
%>

<%
}
%>

name value
<%=name%> <%=svalue%>

........(其他内容)

这一小段JSP文件可以读出用户硬盘上的所有有效的Cookie,也就是仍然在存活期内的Cookie文件。并用表格的形式列出每个Cookie的名字和内容。

我们来逐行分析一下这段代码:

Cookie cookies[]=request.getCookies() 我们用request.getCookies()读出用户硬盘上的Cookie,并将所有的Cookie放到一个cookie对象数组里面。

接下来我们用一个循环语句遍历刚才建立的Cookie对象数组,我们用sCookie=cookies[a]取出数组中的一个Cookie对象,然后我们用sCookie.getValue()和sCookie.getName()两个方法来取得这个Cookie的名字和内容。

通过将取出来的Cookie的名字和内容放在字符串变量中,我们就能对其进行各种操作了。在上面的例子里,可通过循环语句的遍历,将所有Cookie放在一张表格中进行显示。

四、 需要注意的一些问题

通过上面两个简单的例子,可以看到,用JSP进行Cookie的操作,是非常简单的。不过我们在实际操作中还要注意一些问题:
1. Cookie的兼容性问题

Cookie的格式有2个不同的版本,第一个版本,我们称为Cookie Version 0,是最初由Netscape公司制定的,也被几乎所有的浏览器支持。而较新的版本,Cookie Version 1,则是根据RFC 2109文档制定的。为了确保兼容性,JAVA规定,前面所提到的涉及Cookie的操作都是针对旧版本的Cookie进行的。而新版本的Cookie目前还不被Javax.servlet.http.Cookie包所支持。

2. Cookie的内容

同样的Cookie的内容的字符限制针对不同的Cookie版本也有不同。在Cookie Version 0中,某些特殊的字符,例如:空格,方括号,圆括号,等于号(=),逗号,双引号,斜杠,问号,@符号,冒号,分号都不能作为Cookie的内容。这也就是为什么我们在例子中设定Cookie的内容为"Test_Content"的原因。

虽然在Cookie Version 1规定中放宽了限制,可以使用这些字符,但是考虑到新版本的Cookie规范目前仍然没有为所有的浏览器所支持,因而为保险起见,我们应该在Cookie的内容中尽量避免使用这些字符。
Jason   2005-02-24 21:20:27 阅读:1199  评论:0  引用:0

<%
java.sql.Connection conn;
java.sql.Statement stmt;
java.sql.ResultSet rs;
Class.forName(
"com.mysql.jdbc.Driver").newInstance();
Conn=java.sql.DriverManager.getConnection(
"jdbc:mysql://localhost:3306/joke?user=root");
stmt = conn.createStatement();
rs=stmt.executeQuery(
"select * from secondnews");
while(rs.next())
{
%>
<%=rs.getString(1)%>

<%=rs.getString(2)%><br>
<%
}
rs.close();
stmt.close();
conn.close();
%>
Jason   2004-12-06 19:05:49 阅读:1616  评论:0  引用:0
     10.1 会话状态概述 
  
     HTTP协议的“无状态”(Stateless)特点带来了一系列的问题。特别是通过在线商店购物时,服务器不能顺利地记住以前的事务就成了严重的问题。它使得“购物篮”之类的应用很难实现:当我们把商品加入购物篮时,服务器如何才能知道篮子里原先有些什么?即使服务器保存了上下文信息,我们仍旧会在电子商务应用中遇到问题。例如,当用户从选择商品的页面(由普通的服务器提供)转到输入信用卡号和送达地址的页面(由支持SSL的安全服务器提供),服务器如何才能记住用户买了些什么? 
  
     这个问题一般有三种解决方法: 
  
  Cookie。利用HTTP Cookie来存储有关购物会话的信息,后继的各个连接可以查看当前会话,然后从服务器的某些地方提取有关该会话的完整信息。这是一种优秀的,也是应用最广泛的方法。然而,即使Servlet提供了一个高级的、使用方便的Cookie接口,仍旧有一些繁琐的细节问题需要处理: 
  从其他Cookie中分别出保存会话标识的Cookie。 
  为Cookie设置合适的作废时间(例如,中断时间超过24小时的会话一般应重置)。 
  把会话标识和服务器端相应的信息关联起来。(实际保存的信息可能要远远超过保存到Cookie的信息,而且象信用卡号等敏感信息永远不应该用Cookie来保存。) 
  改写URL。你可以把一些标识会话的数据附加到每个URL的后面,服务器能够把该会话标识和它所保存的会话数据关联起来。这也是一个很好的方法,而且还有当浏览器不支持Cookie或用户已经禁用Cookie的情况下也有效这一优点。然而,大部分使用Cookie时所面临的问题同样存在,即服务器端的程序要进行许多简单但单调冗长的处理。另外,还必须十分小心地保证每个URL后面都附加了必要的信息(包括非直接的,如通过Location给出的重定向URL)。如果用户结束会话之后又通过书签返回,则会话信息会丢失。 
  隐藏表单域。HTML表单中可以包含下面这样的输入域:<INPUT TYPE="HIDDEN" NAME="session" VALUE="...">。这意味着,当表单被提交时,隐藏域的名字和数据也被包含到GET或POST数据里,我们可以利用这一机制来维持会话信息。然而,这种方法有一个很大的缺点,它要求所有页面都是动态生成的,因为整个问题的核心就是每个会话都要有一个唯一标识符。 
     Servlet为我们提供了一种与众不同的方案:HttpSession API。HttpSession API是一个基于Cookie或者URL改写机制的高级会话状态跟踪接口:如果浏览器支持Cookie,则使用Cookie;如果浏览器不支持Cookie或者Cookie功能被关闭,则自动使用URL改写方法。Servlet开发者无需关心细节问题,也无需直接处理Cookie或附加到URL后面的信息,API自动为Servlet开发者提供一个可以方便地存储会话信息的地方。 
  
     10.2 会话状态跟踪API 
  
     在Servlet中使用会话信息是相当简单的,主要的操作包括:查看和当前请求关联的会话对象,必要的时候创建新的会话对象,查看与某个会话相关的信息,在会话对象中保存信息,以及会话完成或中止时释放会话对象。 
  
     10.2.1 查看当前请求的会话对象 
  
     查看当前请求的会话对象通过调用HttpServletRequest的getSession方法实现。如果getSession方法返回null,你可以创建一个新的会话对象。但更经常地,我们通过指定参数使得不存在的第一个步骤通常如下所示: 
   HttpSession session = request.getSession(true);
   
  
  
     10.2.2 查看和会话有关的信息 
  
     HttpSession对象生存在服务器上,通过Cookie或者URL这类后台机制自动关联到请求的发送者。会话对象提供一个内建的数据结构,在这个结构中可以保存任意数量的键-值对。在2.1或者更早版本的Servlet API中,查看以前保存的数据使用的是getValue("key")方法。getValue返回Object,因此你必须把它转换成更加具体的数据类型。如果参数中指定的键不存在,getValue返回null。 
  
     API 2.2版推荐用getAttribute来代替getValue,这不仅是因为getAttribute和setAttribute的名字更加匹配(和getValue匹配的是putValue,而不是setValue),同时也因为setAttribute允许使用一个附属的HttpSessionBindingListener 来监视数值,而putValue则不能。 
  
     但是,由于目前还只有很少的商业Servlet引擎支持2.2,下面的例子中我们仍旧使用getValue。这是一个很典型的例子,假定ShoppingCart是一个保存已购买商品信息的类: 
   HttpSession session = request.getSession(true);
   ShoppingCart previousItems = 
   (ShoppingCart)session.getValue("previousItems");
   if (previousItems != null) {
   doSomethingWith(previousItems);
   } else {
   previousItems = new ShoppingCart(...);
   doSomethingElseWith(previousItems);
   }
   
  
  
     大多数时候我们都是根据特定的名字寻找与它关联的值,但也可以调用getValueNames得到所有属性的名字。getValuesNames返回的是一个String数组。API 2.2版推荐使用getAttributeNames,这不仅是因为其名字更好,而且因为它返回的是一个Enumeration,和其他方法(比如HttpServletRequest的getHeaders和getParameterNames)更加一致。 
  
     虽然开发者最为关心的往往是保存到会话对象的数据,但还有其他一些信息有时也很有用。 
  
  getID:该方法返回会话的唯一标识。有时该标识被作为键-值对中的键使用,比如会话中只保存一个值时,或保存上一次会话信息时。 
  isNew:如果客户(浏览器)还没有绑定到会话则返回true,通常意味着该会话刚刚创建,而不是引用自客户端的请求。对于早就存在的会话,返回值为false。 
  getCreationTime:该方法返回建立会话的以毫秒计的时间,从1970.01.01(GMT)算起。要得到用于打印输出的时间值,可以把该值传递给??。 
  getLastAccessedTime:该方法返回客户最后一次发送请求的以毫秒计的时间,从1970.01.01(GMT)算起。 
  getMaxInactiveInterval:返回以秒计的最大时间间隔,如果客户请求之间的间隔不超过该值,Servlet引擎将保持会话有效。负数表示会话永远不会超时。 
     10.2.3 在会话对象中保存数据 
  
     如上节所述,读取保存在会话中的信息使用的是getValue方法(或,对于2.2版的Servlet规范,使用getAttribute)。保存数据使用putValue(或setAttribute)方法,并指定键和相应的值。注意putValue将替换任何已有的值。有时候这正是我们所需要的(如下例中的referringPage),但有时我们却需要提取原来的值并扩充它(如下例previousItems)。示例代码如下: 
   HttpSession session = request.getSession(true);
   session.putValue("referringPage", request.getHeader("Referer"));
   ShoppingCart previousItems = 
   (ShoppingCart)session.getValue("previousItems");
   if (previousItems == null) {
   previousItems = new ShoppingCart(...);
   }
   String itemID = request.getParameter("itemID");
   previousItems.addEntry(Catalog.getEntry(itemID));
  
   session.putValue("previousItems", previousItems);
   
  
  
     10.3 实例:显示会话信息 
  
     下面这个例子生成一个Web页面,并在该页面中显示有关当前会话的信息。 
  package hall;
  
  import java.io.*;
  import javax.servlet.*;
  import javax.servlet.http.*;
  import java.net.*;
  import java.util.*;
  
  public class ShowSession extends HttpServlet {
   public void doGet(HttpServletRequest request,
   HttpServletResponse response)
   throws ServletException, IOException {
   HttpSession session = request.getSession(true);
   response.setContentType("text/html");
   PrintWriter out = response.getWriter();
   String title = "Searching the Web";
   String heading;
   Integer accessCount = new Integer(0);;
   if (session.isNew()) {
   heading = "Welcome, Newcomer";
   } else {
   heading = "Welcome Back";
   Integer oldAccessCount =
   // 在Servlet API 2.2中使用getAttribute而不是getValue
   (Integer)session.getValue("accessCount"); 
   if (oldAccessCount != null) {
   accessCount =
   new Integer(oldAccessCount.intValue() + 1);
   }
   }
   // 在Servlet API 2.2中使用putAttribute
   session.putValue("accessCount", accessCount); 
   
   out.println(ServletUtilities.headWithTitle(title) +
   "<BODY BGCOLOR=\"#FDF5E6\">\n" +
   "<H1 ALIGN=\"CENTER\">" + heading + "</H1>\n" +
   "<H2>Information on Your Session:</H2>\n" +
   "<TABLE BORDER=1 ALIGN=CENTER>\n" +
   "<TR BGCOLOR=\"#FFAD00\">\n" +
   " <TH>Info Type<TH>Value\n" +
   "<TR>\n" +
   " <TD>ID\n" +
   " <TD>" + session.getId() + "\n" +
   "<TR>\n" +
   " <TD>Creation Time\n" +
   " <TD>" + new Date(session.getCreationTime()) + "\n" +
   "<TR>\n" +
   " <TD>Time of Last Access\n" +
   " <TD>" + new Date(session.getLastAccessedTime()) + "\n" +
   "<TR>\n" +
   " <TD>Number of Previous Accesses\n" +
   " <TD>" + accessCount + "\n" +
   "</TABLE>\n" +
   "</BODY></HTML>");
   }
   public void doPost(HttpServletRequest request,
   HttpServletResponse response)
   throws ServletException, IOException {
   doGet(request, response);
   }
  }
   
  
Jason   2004-08-05 21:40:34 阅读:978  评论:0  引用:0
11.1 概述 
  
   JavaServer Pages(JSP)使得我们能够分离页面的静态HTML和动态部分。HTML可以用任何通常使用的Web制作工具编写,编写方式也和原来的一样;动态部分的代码放入特殊标记之内,大部分以“<%”开始,以“%>”结束。例如,下面是一个JSP页面的片断,如果我们用http://host/OrderConfirmation.jsp?title=Core+Web+Programming这个URL打开该页面,则结果显示“Thanks for ordering Core Web Programming”。 
  Thanks for ordering
  <I><%= request.getParameter("title") %></I>
     JSP页面文件通常以.jsp为扩展名,而且可以安装到任何能够存放普通Web页面的地方。虽然从代码编写来看,JSP页面更象普通Web页面而不象Servlet,但实际上,JSP最终会被转换成正规的Servlet,静态HTML直接输出到和Servlet service方法关联的输出流。 
    JSP到Servlet的转换过程一般在出现第一次页面请求时进行。因此,如果你希望第一个用户不会由于JSP页面转换成Servlet而等待太长的时间,希望确保Servlet已经正确地编译并装载,你可以在安装JSP页面之后自己请求一下这个页面。 
    另外也请注意,许多Web服务器允许定义别名,所以一个看起来指向HTML文件的URL实际上可能指向Servlet或JSP页面。 
    除了普通HTML代码之外,嵌入JSP页面的其他成分主要有如下三种:脚本元素(srcipting Element),指令(Directive),动作(Action)。脚本元素用来嵌入Java代码,这些Java代码将成为转换得到的Servlet的一部分;JSP指令用来从整体上控制Servlet的结构;动作用来引入现有的组件或者控制JSP引擎的行为。为了简化脚本元素,JSP定义了一组可以直接使用的变量(预定义变量),比如前面代码片断中的request就是其中一例。 
    注意本文以JSP 1.0规范为基础。和0.92版相比,新版本的JSP作了许多重大的改动。虽然这些改动只会使JSP变得更好,但应注意1.0的JSP页面几乎和早期的JSP引擎完全不兼容。 
    11.2 JSP语法概要表 JSP元素 语法 说明 备注 
  JSP表达式 <%= expression %> 计算表达式并输出结果。 等价的XML表达是: 
  <jsp:expression> 
  expression 
  </jsp:expression> 
   可以使用的预定义变量包括:request,response,out,session,application,config,pageContext。这些预定义变量也可以在JSP srciptlet中使用。 
   JSP srciptlet <% code %> 插入到service方法的代码。 等价的XML表达是: 
  <jsp:srciptlet> 
  code 
  </jsp:srciptlet> 
   
  JSP声明 <%! code %> 代码被插入到Servlet类(在service方法之外)。 等价的XML表达是: 
  <jsp:declaration> 
  code 
  </jsp:declaration> 
   
  page指令 <%@ page att="val" %> 作用于Servlet引擎的全局性指令。 等价的XML表达是 
  <jsp:directive.page att="val"\>。 
  
  合法的属性如下表,其中粗体表示默认值: 
  
  import="package.class" 
  contentType="MIME-Type" 
  isThreadSafe="true|false" 
  session="true|false" 
  buffer="size kb|none" 
  autoflush="true|false" 
  extends="package.class" 
  info="message" 
  errorPage="url" 
  isErrorPage="true|false" 
  language="java" 
   
  include指令 <%@ include file="url" %> 当JSP转换成Servlet时,应当包含本地系统上的指定文件。 等价的XML表达是: 
  
  <jsp:directive.include 
  file="url"\>. 
  
  其中URL必须是相对URL。 
  
  利用jsp:include动作可以在请求的时候(而不是JSP转换成Servlet时)引入文件。 
   
  JSP注释 <%-- comment --%> 注释;JSP转换成Servlet时被忽略。 如果要把注释嵌入结果HTML文档,使用普通的HTML注释标记<-- comment -->。 
  jsp:include动作 <jsp:include 
  page="relative URL" 
  flush="true"/> 当Servlet被请求时,引入指定的文件。 如果你希望在页面转换的时候包含某个文件,使用JSP include指令。 
  注意:在某些服务器上,被包含文件必须是HTML文件或JSP文件,具体由服务器决定(通常根据文件扩展名判断)。 
   
  jsp:useBean动作 <jsp:useBean att=val*/> 或者 
  <jsp:useBean att=val*> 
  ... 
  </jsp:useBean> 寻找或实例化一个Java Bean。 可能的属性包括: 
  id="name" 
  scope="page|request
  |session|application" 
  class="package.class" 
  type="package.class" 
  beanName="package.class" 
   
  jsp:setProperty动作 <jsp:setProperty att=val*/> 设置Bean的属性。既可以设置一个确定的值,也可以指定属性值来自请求参数。 合法的属性包括: 
  name="beanName" 
  property="propertyName|*" 
  param="parameterName" 
  value="val" 
   
  jsp:getProperty动作 <jsp:getProperty 
  name="propertyName" 
  value="val"/> 提取并输出Bean的属性。   
  jsp:forward动作 <jsp:forward 
  page="relative URL"/> 把请求转到另外一个页面。   
  jsp:plugin动作 <jsp:plugin 
  attribute="value"*> 
  ... 
  </jsp:plugin> 根据浏览器类型生成OBJECT或者EMBED标记,以便通过Java Plugin运行Java Applet。   
  
  
     11.3 关于模板文本(静态HTML) 
  
     许多时候,JSP页面的很大一部分都由静态HTML构成,这些静态HTML也称为“模板文本”。模板文本和普通HTML几乎完全相同,它们都遵从相同的语法规则,而且模板文本也是被Servlet直接发送到客户端。此外,模板文本也可以用任何现有的页面制作工具来编写。 
  
     唯一的例外在于,如果要输出“<%”,则模板文本中应该写成“<\%”。 
  
  
Jason   2004-08-05 20:51:07 阅读:995  评论:1  引用:0
小圣空间 版权没有 盗版必就