随笔-124  评论-49  文章-56  trackbacks-0
 
自定义函数库
1 定义类和方法(方法必须是public static)
package com.bjsxt.struts;
public class MyFunctios{
  public static String sayHello(String name){
    return "Hello "+name;
  }
}
2 编写自定义tld文件,并且将此文件放在WEB-INF或WEB-INF的任意子目录下
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" 
    version="2.0"> 
   
    <description>my functions library</description>
    <display-name>my functions</display-name>
    <tlib-version>1.0</tlib-version>
    <short-name>my</short-name>
    <uri>http://www.bjsxt.com/functions</uri>
    <function>
      <name>say</name>
      <function-class>com.bjsxt.struts.MyFunctions</function-class>
      <function-signature>java.lang.String sayHello(java.lang.String)</function-signature>
    </function>
</taglib>
3 在web.xml中注册(建意,可以不注册)
  <jsp-config>
   <taglib>
    <taglib-uri>http://www.bjsxt.com/functions</taglib-uri>
    <taglib-location>/WEB-INF/my.tld</taglib-location>
   </taglib>
  </jsp-config>
4 在JSP中采用taglib指令引入自定义函数库
<%@ taglib prefix="my" uri="com.bjsxt.struts.MyFunctions"%>
5 调用
${my:say("jack")}
posted @ 2009-11-29 22:30 junly 阅读(439) | 评论 (0)编辑 收藏

定制标记库
1 编写标记处理类
public class TimerTag extends TagSupport{
 private long start;
 private long end;
 public int doStartTag(){       //doStartTag标记开始方法
  start=System.currentTimeMillis();
  return EVAL_BODY_INCLUDE;//
 }
 public int doEndTag() throws JspTagException {//doEndTag标记结束方法
  end=System.currentTimeMillis();
  long elapsed=end-start;
  try{
   JspWriter out=pageContext.getOut();
   out.println("running time:"+elapsed+"ms.");
  }catch(IOException e){
   throw new JspTagException(e);
  }
  return EVAL_PAGE;//
 }
}
2 编写.tld文件
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" 
    version="2.0"> 
 
    <description>custion web utility tags</description> //对当前标记库的描述 
    <tlib-version>1.0</tlib-version>   //当前标记库的版本 
    <short-name>util</short-name>  //对当前标记库使用时的前缀名称 
    <uri>http://163.com</uri> //可任意
    
     <tag> 
         <description>calc code running time</description>  //对当前标记的描述 
         <name>timer</name>  //标记我名称
           <tag-class>com.tags.TimerTag</tag-class> 当前标记对应的处理类的具体名称
           <body-content>JSP</body-content>  //可有empty,JSP 
     </tag> 
 </taglib> 
3 使用格式
jsp页面
<%@ taglib prefix="util" uri="http://163.com" %> 添加指令
<util:timer></util:timer>

总结:
TLD是一个XML文件,在WEB-INF目录下
<taglib>根元素
 <tlib-version>version</tlib-version>标记库的版本
 <short-name>prefix</short-name>前缀名称
 <uri>uri</uri>引用的地址
 ...
 <tag>
  <name>tagname</name>标记名称
  <tag-class>classname</tag-class>标记对应的处理类
  <tei-class>classname</tei-class>标记处理类的辅助处理类
  <body-content>[JSP,empty,scriptless,tagdependent]</body-content>
  //jsp表示标记中可以包含html,java代码,这些代码可以被运行
  //empty表示标记中不包含内容
  //scriptless表示标记中可以包含EL,jsp的动作代码,不可以包括JAVA脚本代码
  //tagdependent表示标记中可以包含
  <attribute>标记的属性
             <name>pattern</name>属性的名称
             <required>false</required>表示该属性是否是必须的
             <rtexprvalue>false</rtexprvalue>该属性是否可以是JSP的表达式
    </attribute>  
 </tag>
</taglib>

TagSupport运行原理(不能对标记所包含的内容进行二次加工)
 
        
BodyTagSupport运行原理(可以对开始和结束标记所包含的内容进行处理)
   
          
 public int doAfterBody()throws JspTagException{
  BodyContent bc=getBodyContent();取内容
  String input=bc.getString();取内容
  JspWriter out=bc.getEnclosingWriter();
  
  String newContent=input;
  try{
   out.println(newContent);
  }catch(IOException e){
   throw new JspTagException(e);
  }
  return 1;
 }

posted @ 2009-11-29 22:29 junly 阅读(1481) | 评论 (0)编辑 收藏

Tag Library JAR
标记库打包
1 前建一个临时文件temp
2 把当前工作空间下的classes文件夹下的文件复制到temp文件夹下
3 在temp文件夹下新建WEB-INF文件夹
4 把当前项目下的WEB-INF目录下的.tld文件复到到temp中WEB-INF文件夹下
5 启用DOS,进入temp目录下
6 运行命令:jar -cvf mytags.jar *
mytags为要生成的jar文件名
*代表temp文件下的所有文件
7 其他项目要用时将该jar文件复制到项目的lib目录下就可以了

开源定制标记库
JSTL
Jakarta Taglibs http://jakarta.apache.org/taglibs/index.html
Display tag http://displaytag.sf.net

posted @ 2009-11-29 22:20 junly 阅读(189) | 评论 (0)编辑 收藏

JSTL
------------------------------------------------------------------------------
功能领域   URI                                    前缀   描述
Core       http://java.sun.com/jsp/jstl/core       c     核心标记库
format     http://java.sun.com/jsp/jstl/fmt        fmt   格式化标记库-进间、日期、国际化
SQL        http://java.sun.com/jsp/jstl/sql        sql   对数据库的操作
XML        http://java.sun.com/jsp/jstl/xml        xml   对XML的操作
Functions  http://java.sun.com/jsp/jstl/functions  fn    函数标记库,主要是字符串
用在视图层的技术
--------------------------------------------------------------------------------
用使:
1 引用标记库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<body>
用户名:<c:out value="${username}" />
</body>
</html>
-----------------------------------------------------------------------------------
Core核心标记库
操作变量     条件操作     循环操作     URI操作
out          if           forEach      import
set          choose       forTokens    url
remove       when                      redirect转向
catch        otherwise                 param
--------------------------------------------------------------------------------------
<c:out>标记
使用语法
1 <c:out value="vlaue" [escapeXml="{true|false}"]
   [default="defaultValue"] />
2 <c:out value="vlaue" [escapeXml="{true|false}"]>
   default value
  </c:out>
属性
------------------------------------------------------------------------
属性名      | 描述                                                              | EL    | 必选  | 缺省值
value          | 需要输出的值,可以是EL表达式或常量  | 可以  | 是    | 无
default        | value值为空时所输出的内容                       | 可以  | 否    | 无
escapeXml | 为true对输出内容中的<、>、'、"和&        | 可以  | 否    | true
                  | 字符进行转义,分别转成都市&lt,&gt,      |       |       |
                  | ',"和&amp.为false不进行转义 |       |       |
------------------------------------------------------------------------
<c:set>标记
使用语法
1 <c:set value="value" var="name" [scope="{page|request|session|application}"] />
2 <c:set var="name" [scope="{page|request|session|application}"]>
  value
  </c:set>
3 <c:set var="name" target="target" property="propertName">
4 <c:set target="target" propert="propertyName">
  value
  </c:set>
3和4是给已有的对象属性赋值
属性
-----------------------------------------------------------------------------
属性名    | 描述                                                                      | EL    | 必选  | 缺省值
value        | 要保存的内容,可以是EL表达式或常量             | 可以  | 是    | 无
target       | 要修改属性的对象名,一般为javaBeans对象名 | 可以  | 否    | 无
property  | 要修改的javaBeans的属性                                    | 可以  | 否    | 无
var          | 要保存内容的变量名                                            |  否   | 是    | 无
scope     | 保存内容的变量的作用范围                                 |  否   | 否    | page
-----------------------------------------------------------------------------
<c:remove>标记
使用语法
<c:remove var="name" [scope="{page|request|session|application}"] />
属性
------------------------------------------------------------------------------------------------
属性名    | 描述                                              | EL  | 必选  | 缺省值
var           | 被删除的变量的名字                  | 否  | 是    | 无
scope       | 被删除的变量的作用范围          | 否  | 否    | page,request,session,application
------------------------------------------------------------------------------------------------
<c:catch>标记
使用语法
<c:catch [var="name"]>
 body content
</c:catch>
属性
------------------------------------------------------------------------
属性名    | 描述                                                   | EL  | 必选  | 缺省值
var           | 用来保存违例信息的变量名            | 否  | 否    | 无
------------------------------------------------------------------------
例子:
<c:catch var="ex">
    <%
     String number="none";
     int i=Integer.parseInt(number);
    %>
</c:catch>
${ex}
将违例信息保存在ex变量中,如没有发生违例,则什么也不作

<c:if>标记
使用语法
1 <c:if test="condition" var="name" [scope="{page|request|session|application}"] />
2 <c:if test="condition" [var="name"] [scope="{page|request|session|application}"]>
 body content
</c:if>
属性
-----------------------------------------------------------------------------
属性名    | 描述                                                             | EL    | 必选  | 缺省值
test           | 判断所要使用的条件                                 | 可以  | 是    | 无
var           | 保存条件结果的变量的名称                     | 否    | 否    | 无
scope       | 保存条件结果的变量的作用范围             | 否    | 否    | page
-----------------------------------------------------------------------------
<c:choose>标记
使用语法
<c:choose>
 body content(<when>and<otherwise>)
</c:choose>

<c:when>标记
使用语法
<c:when test="condition">
 body content
</c:when>
属性
-----------------------------------------------------------------------------
属性名    | 描述                                                                    | 动态  | 必选  | 缺省值
test           | 如果它的结果为true,执行<c:when>所包含的  | 可以  | 是    | 无
                | 内容,false则不执行<c:when>所包含的内容      |       |       |
-----------------------------------------------------------------------------
<c:otherwise>标记
使用语法
<c:otherwise>
 body content
</c:otherwise>
---------------------------------------------------------------------------
例子:
<c:choose>
    <c:when test="${param.age>=70}">
      70以上
    </c:when>
    <c:when test="${param.age>35 and param.age<70}">
      35-70
    </c:when>
    <c:otherwise>
      35以下
    </c:otherwise>
</c:choose>
--------------------------------------------------------------------------------------------
<c:forEach>标记
使用语法
1 <c:forEach [var="name"] items="collection" [varStatus="varStatusName"]
   [begin="begin"] [end="end"] [step="step"]>
     body content
  </c:forEach>
2 <c:forEach [var="name"] items="collection" [varStatus="varStatusName"]
   begin="begin" end="end" [step="step"]>
     body content
  </c:forEach>
属性
------------------------------------------------------------------------------------------------------------------------------
属性名    | 描述                                | EL    | 必选  | 类型                                            |缺省值
begin        | 开始下标                        | 可以  | 否    | int                                                 |0
end          | 结束下标                        | 可以  | 否    | int                                                  |集合中最后一个成员的索引
step         | 步长                                 | 可以  | 否    | int                                                 |1
var          | 代表当前成员的变量名 |  否   | 否    | String                                              |无
items       | 进得循环的集合             |  否   | 否    | String,数组,Map,Collection,Iterator,Enumeration |无
varStatus | 显示循环状态的变量     | 可以  | 否    | String                                          |无
-------------------------------------------------------------------------------------------------------------------------------
varStatus属性
----------------------------------------------------------
名称    | 类型     | 描述   
index   | int      | 现在所操作的成员的索引 
count   | int      | 现在所操作的成员的总数 
first   | boolean  | 现在所操作的成员,是否为第一个成员   
last    | boolean  | 现在所操作的成员,是否为最后一个成员  
----------------------------------------------------------
<%
    String names[]=new String[4];
    names[0]="afdsaf";
    names[1]="dggh";
    names[2]="bcbncn";
    names[3]="434535";
    pageContext.setAttribute("names",names);
    Map map=new HashMap();
    map.put("k1","v1");
    map.put("k2","v2");
    request.setAtrribute("map1",map);
%>
    <c:forEach items="${names}" var="name" begin="1" end="2" step="1" varStatus="i">
     ${name } ${i.index } ${i.count } ${i.first } ${i.last }<br/>
    </c:forEach>
    <c:forEach items="${map1}"  var="v">
     ${v.key } = ${v.value }<br/>
    </c:forEach>

<c:forTokens>标记 将一个字符串进行分隔
使用语法
<c:forTokens items="stringOfTokens" delims="delimiters" [var="name"]
   [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
     body content
</c:forTokens>
属性
------------------------------------------------------------------------------------------
属性名    | 描述                                 | EL    | 必选  | 类型      |缺省值
items        | 进行迭代处理的变量     | 可以  | 是    | String    |无
delims      | 分割符号                         | 可以  | 是    | char      |无
begin        | 开始下标                         | 可以  | 否    | int       |0
end         | 结束下标                          | 可以  | 否    | int       |集合中最后一个成员的索引
step        | 步长                                  | 可以  | 否    | int       |1
var         | 代表当前成员的变量名   |  否   | 否    | String    |无
varStatus | 显示循环状态的变量     |  否   | 否    | String    |无
-------------------------------------------------------------------------------------------
<c:forTokens items="dsf:dsafsa:dsffs,dfdfs" var="name" delims=":,">
    ${name }<br/>
</c:forTokens>
-------------------------------------------------------------------------------------------
<c:import>标记 相当于include将另外一个页面的内容引入到当前页面来
使用语法
1 <c:import url="url" [context="context"] [var="name"] [scope="{page|request|session|application}"]
   [charEncoding="charEncoding"]>
     <c:param>//可传参数
  </c:import>
2 <c:import url="url" [context="context"] varReader="varReaderName"
   [charEncoding="charEncoding"]>
     body content//内容
  </c:import>
属性
------------------------------------------------------------------------------------------
属性名           | 描述                                                                 | EL    | 必选  |缺省值
url                   | 需要导入页面url地址                                       | 是    | 是    |无
context            | 本地web应用的名字                                       | 是    | 否    |当前应用的名子
charEncoding  | 设置导入数据的字符编码                               | 是    | 否    |ISO-8859-1
var                  | 接受导入文本的变量的名称                           | 否    | 否    |无
scope            | 接受导入文本内容的变量的作用范围              | 否    | 否    |page
varReader     | 用于接受导入文本的java.io.Reader变量的名称 | 否    | 否    |无
-------------------------------------------------------------------------------------------

<c:url>标记 创建链接
使用语法
1 <c:url value="value" [context="context"] [var="name"] [scope="{page|request|session|application}"] />
2 <c:url value="value" [context="context"] [var="name"] [scope="{page|request|session|application}"] />
    <c:param />
  </c:url>
属性
------------------------------------------------------------------------------------------
属性名       | 描述                                             | EL    | 必选  |缺省值
value           | url地址                                         | 是    | 是    |无
context       | web应用的名字                           | 是    | 否    |当前web应用的名子
var             | 保存url地址的变量的名称          | 否    | 否    |输出到当前页面
scope         | 存储url地址的变量的作用范围   | 否    | 否    |page
-------------------------------------------------------------------------------------------
<c:url var="website" value="http://localhost:8080/webproject/out.jsp">
    <c:param name="p" value="hello" />
</c:url>
${website }<br>
<a href=" ${website }">dddd</a>
--------------------------------------------------------------------------------
<c:redirect>标记 页面跳转
使用语法
1 <c:redirect url="value" [context="context"] />
2 <c:redirect url="value" [context="context"]>
    <c:param />
  </c:redirect>
属性
------------------------------------------------------------------------------------------
属性名        | 描述                                             | 必选  |缺省值
url                | url地址                                         | 是    |无
context         | 要转向到的web应用的名字       | 否    |当前web应用的名子
-------------------------------------------------------------------------------------------
<c:redirect url="LoopTag.jsp">
     <c:param name="p" value="aa" />
</c:redirect>
-------------------------------------------------------------------------------


Format标记库
-----------------------------------------
国际化有关        | 时间日期有关(一般不在页面作处理)
setLocale         | formatNumber
requestEncoding   | formatDate
bundle            | parseDate
message           | parseNumber
param             | setTimeZone
setBundle         | timeZone
-----------------------------------------
<fmt:setLocale>标记  设置国际化语言
使用语法
<fmt:setLocale value="locale" [variant="variant"] [scope="{page|request|session|application}"] />
属性
---------------------------------------------------------------------------------------------------------------------------
属性名        | 描述                                                                                | EL    | 必选  |缺省值
value         | 表示该语言环境的一个字符串,或者是java.util.Locale类的对象                          | 可以  | 是    |无
scope         | 指定这个对象的作用范围,有效值为page,requset,session,applicattion                   | 否    | 否    |page
variant       | 进一步针对特定的平台或供应商定制语言环境。如,MAC和WIN分别对应Macintosh和Windows平台 | 可以  | 否    |无
---------------------------------------------------------------------------------------------------------------------------
<fmt:setBundle>标记  设定国际化资源束的位置
使用语法
<fmt:setBundle basename="basename" [var="name"] [scope="{page|request|session|application}"] />
属性
---------------------------------------------------------------------------------------------------------------------------
属性名        | 描述                                                                                | EL    | 必选  |缺省值
basename      | 设置使用的资源文件束文件的路径与名称,不应当包含任保本地化后缀或文件扩展名          | 可以  | 是    |无
var           | 设置了该属性,那么将把basename属性所标识的资源束赋给该属性值所命名的变量            | 否    | 否    |无
scope         | 指明缺省资源束设置所应用的JSP作用域                                                 | 否    | 否    |page
---------------------------------------------------------------------------------------------------------------------------
束文件名resources_zh_CN.properties(basename属性)
<fmt:setBundle basename="com.v512.examples.resources" />

<fmt:bundle>标记  设定某个页面或某几行国际化资源束的位置
使用语法
<fmt:bundle basename="basename" [prefix="prefix"]>
  body content
<fmt:bundle>
属性
---------------------------------------------------------------------------------------------------------------------------
属性名        | 描述                                                                                | EL    | 必选  |缺省值
basename      | 设置使用的资源文件束文件的路径与名称,不应当包含任保本地化后缀或文件扩展名          | 可以  | 是    |无
prefix        | 为所嵌套的<fmt:message>标记的key值指定缺省前缀                                      | 可以  | 否    |无
---------------------------------------------------------------------------------------------------------------------------

<fmt:message>标记  (核心)设置资料束文件中的KEY和对应的内容
使用语法
1 <fmt:message key="messageKey" [bundle="resourceBundle"] [var="varName"] [scope="{page|request|session|application}"] />
2 <fmt:message [bundle="resourceBundle"] [var="varName"] [scope="{page|request|session|application}"]>
  key
  [<fmt:param>]
  </fmt:message>
属性
-----------------------------------------------------------------------------------------------------------------------------------------------
属性名       | 描述                                                                                                                                                                                | EL    | 必选  |缺省值
key             | 用来确定在资源束中定义哪个文本消息进行输出显示                                                                                              | 可以  | 是    |无
bundle        | 用来指定一个显式的资源束,用来查找由key属性标识的消息.请注意,该属性的值必须是实际的资源束.             | 可以  | 否    |无
                  | 如当指定<fmt:setBundle>操作的var属性时同该标记所赋予的资源束.<fmt:message>的bundle属性不支持字符串值                                    
var             | 该标记所生成的文本消息赋给指定的变量,而不是输出到JSP页面中                                                                        | 否    | 否    |无
scope         | 由来指定的var属性指定的变量的作用域,有效值:page,request,session,application                                                         | 否    | 否    |page
-----------------------------------------------------------------------------------------------------------------------------------------------

<fmt:requestEncoding>标记  设置编码方式
使用语法
<fmt:requestEncoding [value="charsetName"] />
作用等同于
request.setCharacterEncoding()
--------------------------------------------------------------------------------
<fmt:param>标记  设置编码方式
使用语法
1 <fmt:param value="messageParameter" />
2 <fmt:param>
  body content
  </fmt:param>
-----------------------------------------------------------------
<fmt:formatDate> 标记
使用方法:
<fmt:formatDate value="${today}" type="date" />
<fmt:formatDate value="${today}" dateStyle="full" />
<fmt:formatDate value="${today}" pattern="yyyy/MM/dd HH:mm:ss" />
<fmt:formatDate value="${today}" pattern="yyyy/MM/dd HH:mm:ss" var="d"/>
----------------------------------------------------------------------------
属性名     | 描述                          | 值                |结果
value         | 要格式化的日期值 | default           |2008-8-1
type          | 显现的日期格式      | date              |2008-8-1
                 |                                   | time              |14:47:59
                 |                                   | both              |2008-8-1 14:47:59
dateStyle   | 显现的日期格式      | short             |08-8-1
                 |                                  | medium            |2008-8-1
                 |                                    | long              |2008年8月1日
                 |                                     | full              |2008年8月1日 星期一
pattern       | 定义日期格式           |yyy/MM/dd HH:mm:ss |2008/08/01 14:47:59
var            | 保存值变量名            |                   |
scope        | 保存变量的scope       |                   |
-----------------------------------------------------------------------------
<fmt:formatNumber> 标记
<fmt:formatNumber value="${n}" pattern="###,###.##"/>
<fmt:formatNumber value="${n}" pattern="###,###.0000"/>
----------------------------------------------------------------------------
属性名      | 描述                          | 值                |结果
value          | 要格式化的日期值 | default           |123,456.123
type           | 显现的数据格式      | number(数字)      |123,456.123
                  |                                   | currency(货币)    |¥123,456.123
                  |                                   | percent(百分比)   |23.33%
groupingUsed| 是否分组显示       | true/false        |
pattern       | 定义数据格式           |###,###.##         |123,456.123
                  |                                    |###,###.0000       |123,456.1230
var             | 保存值变量名          |                   |
scope        | 保存变量的scope       |                   |
-----------------------------------------------------------------------------
<format>标记例子
1 建立resources.properties文件(英文)
  内容:guestbook.display.welcome=welcome to my website
2 建立resources.properties_zh_CN.properties文件(中文)
  方法:
  (1)在临时目录下建立一个临时文件resources_t.properties
     内容:guestbook.display.welcome=欢迎大家访问网站
  (2)在DOS下进行该临时目录,执行DOS命今
     c:\temp>native2ascii -encoding uft-8 resources_t.properties resources_zh_CN.properties
  (3)将转换好的文件复制到项目目录下
3 建立JSP页面
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"  %>
fmt:bundle basename="com.tags.resources">
    <fmt:message key="guestbook.display.welcome">
    </fmt:message>
</fmt:bundle>

-----------------------------------------------------------------------------------------------------------
<sql>标签
<setDatasource>
<update>
<query>
<param>
1 导入sql的jar包
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"  %>
<sql:setDataSource driver="" url="" user="" password="" var="" scope=""/>
<sql:update var="oerder" dataSource="${conn}">
 insert into BookOrder(username,zipcode,phone,creditcard,total)
 values(?,?,'88888833333','123432432423',50.00)
 <sql:param value="accp"/>
 <sql:param value="1111"/>
</sql:update>
<sql:query var="rs" dataSource="${conn}">
   select * from aa
</sql:query>
<C:forEach var="row" items="${rs.rows}">
   ${row.username}     ${row.password}
</c:forEach>

posted @ 2009-11-29 22:19 junly 阅读(318) | 评论 (0)编辑 收藏
jsp:include
<jsp:include page="/include.jsp"></jsp:include>动作
<%@ include file="/footer.html"%>//指今
jsp:forward
 1 <jsp:forward page="/include.jsp" />
 2 <%
    RequestDispatcher rd=request.getRequestDispatcher("/imclude.jsp");
    rd.forward(request,response);
   %>
 1和2结果相同
posted @ 2009-11-29 22:04 junly 阅读(195) | 评论 (0)编辑 收藏
javaBean
* 封装数据
* 封装业务方法
<jsp:useBean/>
<jsp:useBean id="" class="" scope=""/>
class属性必须打包,scope默认为page
<jsp:setProperty/>
<jsp:setProperty name="user" property="*"/>
多个form属性自动匹配
<jsp:getProperty/>
<jsp:forward/>
<jsp:forward page="b.jsp"/>//相当于request.getRequestDispatcher
<jsp:include/>
区分大小写
posted @ 2009-11-29 22:03 junly 阅读(184) | 评论 (0)编辑 收藏
EL

//EL  的基本用法
类型            | 示例                         | 对应的调用方法
javaBeans    | ${user.username}*    | user.getUsername()
                    | ${user["username"]}  |
                    | ${user['username']}   | sport[1]
数组            | ${sport[1]}*             |
                    | ${sport['1']}              |
                    | ${sport["1"]}             |
List              | ${address[2]}*          | address.get(2)
                    | ${address['2']}          |
                    | ${address["2"]}         |
Map             | ${phone["home"]}     | phone.get("home")
                    | ${phone['home']}      |
                    | ${phone.home}*       |
           
//EL的内置对象(与JSP有区加别,只能在EL中使用,不能用在JSP中,名称不同但指同一个内容)
pageContext      对应JSP中当前页面上下文的对象
pageScope        对应JSP中page对象
requestScope     对应JSP中request对象
sessionScope     对应JSP中session对象
applicationScope 对应JSP中application对象
param            对应页面传值的对象
paramValues      对应页面传来一组值的对象
header           对应页面头信息的值对象
headerValues     对应页面头信息的数组对象
<%= session.getAttribute("phone")%>
等价于:
${sessionScope.phone}
cookie对应cookie对象的值
initParam对应设定的初始参数的值

//设定JSP不使用JSP EL
当前面页不使用
<%@page isELIgnored="true"%>
整个WEB应用不使用JSP EL
修改web.xml
<web-app...>
  <jsp-config>
    <jsp-property-group>
      <url-pattern>*.jsp</url-pattern>
      <el-ignored>true</el-ignored>
    </jsp-property-group>
  </jsp-config>
</web-app>
----------------------------------------------------
pageContext.setAttribute("username",null)//false
pageContext.setAttribute("username","")//false

${empty username}//判断username是否为空
---------------------------------------------------
pageContext.setAttribute("username","janly")
request.setAttribute("username","janly")
session.setAttribute("username","janly")
application.setAttribute("username","janly")

${pageScope.username}
${requestScope.username}
${sessionScope.username}
${applicationScope.username}
${username}按作用域范围找查
-----------------------------------------
web.xml
<context-param>
<param-name>repeat</param-name>
<param-value>100</param-value>
</context-param>

${initParam.repeat}
${param.username}
---------------------------------

posted @ 2009-11-29 22:02 junly 阅读(179) | 评论 (0)编辑 收藏

一 导包
二 在WEB-INF下加配置文件persistence.xml
1 提供者
2 类
3 数据库
三 在实体类中加JPA注记

@Enttity
@Table(name="t_user")
public class Users{}

主键标在get方法前
@Id
@GeneratedValue(strategy=GenerationType.AUTO[IDENTITY])
@Column(name="d")
public int getId(){}

关系
@OneToOne(cascade="")

@OneToMany()
private Set users=new HashSet();

import javax.

@Test public void testMM(){
    EntityManagerFactory emf=Persistence.createEntityManagerFactory("配置文件中jpa名");
    EntityManager em=emf.createEntityManager();
    //Custems c=em.find(Custems.class,1);
    Query query=em.createQuery("");
    List<Custems> custems=query.getResultList();
    Custems custem=query.getSingleRusult();

 

    EntityTransaction  et=em.getTransaction();
    te.begin();
    em.persist(new Custems());//加
    em.setCname("aaa");
    em.merge(custems);//修改
    em.remove(custems);//删

    te.commit();
}

-------------------------------------------------------

JpaDaoSupport

<bean id="dao" class="org.my doa.CustemsDao">
<property name="entityManagerFactiory" ref=""/>
</bean>

posted @ 2009-11-29 21:58 junly 阅读(214) | 评论 (0)编辑 收藏

<script type=text/javascript>
<!--
function MyImageA()
{
document.all.MyPic.src="C:\Documents and Settings\All Users\Documents\My Pictures\示例图片\Sunset.jpg";
}

function MyImageB()
{
document.all.MyPic.src="C:\Documents and Settings\All Users\Documents\My Pictures\示例图片\Blue hills.jpg";
}
-->
</script>

<img name=MyPic id="MyPic " src="C:\Documents and Settings\All Users\Documents\My Pictures\示例图片\Sunset.jpg" width=300 height=200></img>

<script type=text/javascript>
document.all.MyPic.onmouseover=MyImageA;
document.all.MyPic.onmouseout=MyImageB;
</script>

posted @ 2009-11-29 21:55 junly 阅读(259) | 评论 (0)编辑 收藏

<script language="javascript">//arguments对象(参数对象)
///arguments对象(参数对象)
function testParams()
/*{
  var params="";
  for(var i=0;i<arguments.length;i++)
  {
    params+=" "+arguments[i];
  }
  alert(params);
}
testParams("abc",123);
testParams(123,456,"abc");*/
</script>

<script language="javascript">//创建动态函数
 ///创建动态函数
 //var square=new Function("x","y","var sum;sum=x*x+y*y;return sum;");
 //等同于
 /*function square(x,y)
 {
  return x*x+y*y;
 }
 alert(square(2,3));*/
 
 
 //encodeURI方法(url字符编号)
 /*var urlStr = encodeURI("http://www.it315.org/imdex.html?country=中国&name=z x");
 alert(urlStr);*/
 
 //decodeURI方法(对已编号的url进行解号)
 /*urlStr = decodeURI("http://www.it315.org/imdex.html?country=%E4%B8%AD%E5%9B%BD&name=z%20x");
 alert(urlStr);*/
 
 //parseInt方法
 //parseFloat方法
 //isNaN方法
 //escape方法(对一个字符进行Unicode编号)
 //unescape方法(解码)
 //eval方法(将其中的参数字符串作为一个javascript表达式执行,可以动态产生表达式)
</script>

<script language="javascript">//对象与对象实例
 ///对象与对象实例
 /*function Person()//Person对象的构造函数---构造函数
 {}
 var person1=new Person();//创建Person对象的实例---对象实例
 person1.age=18;//为对象实例添加成员,可以对其无限制的添中新的成员
 //person1.age也可以用person1["age"]访问,这样可以动态访问其成员
 person1.name="abb";//---属性
 //alert(person1.name+":"+person1.age);
 function sayFunc()
 {
  alert(person1.name+":"+person1.age);
  //alert(person1["name"]+":"+person1["age"]);
  
  //var x="name";
  //alert(person1[x]+":"+person1["age"]);
  //x="age";
  //alert(person1[x]+":"+person1["age"]);
  
  //eval("alert(person1.name);");与下面结果相同
  //alert(person1.name);
  
  //var x="age";
  //eval("alert(person1."+x+");");
 }
 person1.say=sayFunc;//---方法(函数指针)     不能为person1.say=sayFunc();
 person1.say();*/
</script>

<script language="javascript">//构造方法与this关键字
 ///构造方法与this关键字
 //为一个对象实例新增加属性和方法,不会增加到同一个对象所产生的其它对象实例上
 /*function Person(name,age)
 {
   this.age=age;
   this.name=name;
   this.say=sayFunc;
 }
 function sayFunc()
 {
  alert(this.name+":"+this.age);
  //alert(name+":"+this.age);//错误,this不能去掉
 }
 var person1=new Person("张三",18);
 person1.say();
 var person2=new Person("李四",20);
 person2.say();*/
</script>

<script language="javascript">//在函数中修改参数值的问题
 ///在函数中修改参数值的问题
 //值传寄
 /*function changeValue(x)
 {
  x=5;
 }
 var x=3;
 changeValue(x);
 alert(x);*/  //值仍为3,未修改,值传寄
 
 
 //对象传寄
 /*function Person(name,age)
 {
   this.age=age;
   this.name=name;
   this.say=sayFunc;
 }
 function sayFunc()
 {
  alert(this.name+":"+this.age);
 }
 function chage(p1)
 {
  p1.name="王五";
 }
 var p1=new Person("张三",18);
 chage(p1);
 p1.say();*/
</script>

<script language="javascript">//javascript内部对象
 ///javascript内部对象
 //动态对象 使用时new实例并用“实例名.成员”的格式访问--------------------动态对象
 
 //-String对象(属性length)---是动态地象也是一个特殊的数据类型
 //var myStrObj=new String("www.it315.orgit");
 //var myStrObj="www.it315.org";//结果同上
 //alert("www.it315.org".length);//结果同下
 //alert(myStrObj.length);
 
 //-big()方法--原字符两边加<big></big>标签对
 //alert(myStrObj.big());
 
 //-bold()方法--原字符两边加<b></b>标签对
 //alert(myStrObj.bold());
 
 //-fontcolor()方法--设置字符串的颜色
 //alert(myStrObj.fontcolor("red"));
 
 //-anchor()方法--添加超连接标记name属性
 //alert(myStrObj.anchor("re"));
 
 //-link()方法--添加超连接标记scr属性
 //alert(myStrObj.link("www.it315.org"));
 //其他方法如bold,italics,blink,small,fontsize
 
 //-charAt()方法--返回索引位的字符,以0开始,超出length-1返回空
 //alert(myStrObj.charAt(12));
 
 //-charCodeAt()方法--返回索引位的字符的unicode编号,以0开始,超出length-1返回空
 //alert(myStrObj.charCodeAt(12));
 
 //-lastIndexOf()方法--返回某子字符串第一次出现的索引位置,从右向左,没找到返回-1
 //alert(myStrObj.lastIndexOf("it"));
 
 //-indexOf()方法--返回某子字符串第一次出现的索引位置,左向右,没找到返回-1
 //alert(myStrObj.indexOf("it"));
 /*var p=myStrObj.indexOf("it")
 while(p != -1)
 {
  alert(p);
  p=myStrObj.indexOf("it",pos+1);
 }*/
 
 //-match()方法--使用正则表达式检证字符
 
 //-search()方法--使用正则表达式方法查子串,类似于indexOf
 
 //-replace()方法--替换子串,可用正则
 
 //-split()方法--分隔符取子串生成数组,可用正则
 
 //-slice()方法--返回指定位置之间的字符串,取前不取后
 //slice(4,6);slice(4);
 
 //substr(),substring()方法--取子串substring()类似于slice(),substr(开始位置,长度)
 
 //-toUpperCase()小写转大写
 
 //-toLowerCase()大写转小写
 
 //Date对象
 //-构造函数Date(),Date(dateVal),Date(year,month,date[,hours[,minutes[,seconds[,ms]]]])
 
 //-parse()方法--静态方法
 
 //-getYear(),getMonth(),getDate(),getDay(),getHours(),getMinutes(),getSeconds(),getMilisecons()
 
 //-getTime()返回1970-1-1起的毫秒数
 
 //-set方法与get方法对映
 
 //静态对象 用“对象名.成员”的格式访问   ----------------------------------静态对象
 //Object对象(提供创建自定义对象的简单方式,不需要程序员再定义构造函数)
 /*function getAttributeValue(attr)
 {
  alert(person[attr]);
 }
 var person=new Object();
 person.name="zs";
 person.age=18;
 getAttributeValue("name");
 getAttributeValue("age");*/
 
 //Math对象
 //-random()方法--返加0-1之间的随机数,abs()方法
 
 //toString()方法--所有对象都有
</script>

<script language="javascript">//对象专用语句
 ///对象专用语句
 //with语句子--可以一次引用对象实例的属性或方法
 /*var current_time=new Date();
 with(current_time)
 {
  var strDate=getYear()+"年";
  strDate+=getMonth()+"月";
  strDate+=getDate()+"日";
  strDate+=getHours()+":";
  strDate+=getMinutes()+":";
  strDate+=getSeconds();
  alert(strDate);
 }*/
 
 //for...in语句-对对象属性进行操作
 /*function Person(name,age)
 {
   this.age=age;
   this.name=name;
 }
 var p=new Person("lisi",19);
 var prep="";
 for(prep in p)
 {
  alert(p[prep]);
 }*/
</script>

<script language="javascript">//数组列表--有length属性能
 ///数组列表--有length属性能
 /*var arr=["as"+1,321,2.5,"abb",""];//可以是任意数据类型,可以为空或合法表达式
 for(var i=0;i<arr.length;i++)
 {
  alert(arr[i]);
 }*/
 
 ///用对象的方式实现数组
 /*function MyArray()
 {
  this.length=arguments.length;
  for(var i=0;i<this.length;i++)
  {
   this[i]=arguments[i];
  }
 }
 var str="";
 var arr=new MyArray(4,3.5,"abc");
 for(var i=0;i<arr.length;i++)
 {
  str+=i+":"+arr[i]+"\n";
 }
 alert(str);*/
</script>

<script language="javascript">//Array对象
 ///Array对象
 //-构造方法
 //-Array();Array(4);-长度Array(3.5,"abc",3);
 /*var arr=new Array();
 var x,str="";
 arr[0]="abc";
 arr[1]=23;
 arr[2]=3;
 arr.sort();
 for(x in arr)
 {
  str=str+x+":"+arr[x]+"\n";
 }
 alert(str);*/
</script>

posted @ 2009-11-29 21:52 junly 阅读(401) | 评论 (0)编辑 收藏
仅列出标题
共18页: First 上一页 5 6 7 8 9 10 11 12 13 下一页 Last