Rising Sun

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  148 随笔 :: 0 文章 :: 22 评论 :: 0 Trackbacks
使用<%! %>方式所声明的变量为全局变量,即表示:若同时n 个用户在执行此JSP网页时,
将会共享此变量。因此笔者强烈建议读者,千万别使用<%! %>来声明您的变量。
若要声明变量时,请直接在<% %>之中声明使用即可。
----------------------------------------------------------------------------------
有时候,我们想要让网页自己能自动更新,因此,须使用到Refresh 这个标头。举个例子,我
们告诉浏览器,每隔三分钟,就重新加载此网页:
response.setIntHeader("Refresh" , 180)
如果想要过十秒后,调用浏览器转到http://Server/Path 的网页时,可用如下代码:
response.setHeader("Refresh","10; URL=http://Server/Path" )
如果大家对HTML 语法还熟悉,则HTML 语法中也有类似的功能:
<META HTTP-EQUIV="Refresh" CONTENT=" 10; URL=http://Server/Path" >
上述两种方法皆可以做到自动重新加载。
----------------------------------------------------------------------------------

jsp隐式对象

输入输出对象 out request response
作用域通讯对象 session application pagecontext
servlet对象  page config
错误对象  exception
----------------------------------------------------------------------------------

servlet:
request.setAttribute("articleComment",articleCommentArrayList);
        RequestDispatcher dispatcher = request.getRequestDispatcher("pages/delcomment.jsp");

jsp:
ArrayList articletypeArrayList = (ArrayList)request.getAttribute("articleType");
----------------------------------------------------------------------------------
jsp标准动作

jsp:useBean
jsp:setProperty
jsp:getProperty
jsp:include
jsp:forword
jsp:parm
----------------------------------------------------------------------------------
<button name="but" onclick="document.form1.submit()">提交</button>
location.href="abc.htm";   跳到另一页 也可刷新本页
----------------------------------------------------------------------------------
Core 主要

表达式操作:out ,set ,remove,catch等;
流程控制:if choose when otherwise
迭代操作:forEach forTokens

前提条件是用taglib 引入核心标签库
--------------------------------------------------------------------------------------
表达式操作
-------------------------------------------
<c:out>不可以不带主体
<c:out value=需要显示的内容 default=如果value的值为空,则显示default的值 escapeXml是否转换特殊字符,如设定为真,默认会将<,>,、等字符转换成&lt等;
<c:out value ="<p>有特殊字符</p>">
<c:out value ="<p>有特殊字符</p> escapeXml="false" ">
<c:set>将变量存贮在JSP范围内或javabean中
-------------------------------------------

<c:set>
可以带主体也可以不带
<c:set value="要存在变量中的值" var scope=默认page/>
<c:set  var scope>主体中的内容存在变量中 </c:set>
<c:set  value ="要存在对象中的值" target="javabean的对象" property="属性名"/>
<c:set  target="javabean的对象" property="属性名">
主体中的内容存在对象中 </c:set>
<c:set var="num"> 1+1 </c:set>
-------------------------------------------
<c:remove var="要移出的变量名" scope可有可无>  如果不写scope就会按照page->request->session->application的范围顺序依次删除
-------------------------------------------
<c:catch>主要将可能发生的错误放在<c:catch>和</c:catch>之间
如果真的发生错误将把错误信息存贮在var中
<c:catch var="errorMessage">
<% String str="no number" ; int i=Integer.parseInt(str);%>
</catch>
${errorMessage}
-------------------------------------------


流程控制<c:if> <c:choose> <c:when> <c:otherwise>

--------------------------------------------------------------------------------------
<c:if test(必须有test属性)="测试条件" var="用来存储test后的结果">
当条件为真时,执行主体内容
</c:if>
<c:if test="{param.username}=='admin'" var="con" >
您好,admin
</c:if>
${con}
执行的时候在jsp的后面直接加上?username=admin
-------------------------------------------
<c:choose>本身只当作<c:when>和<c:otherwise>的父标签
<c:choose></c:choose>主体内容为
1.空白
2.1或多个<c:when>
3.0个或1个<c:otherwise>,<c:when>必须在<c:otherwise>之前
<c:when test="必须的测试条件">
-------------------------------------------
<c:forEach>为循环控制,它可以将集合(Collection)中的成员按循序浏览一遍,当条件符合时,就会继续;
var用于存放现在指到的成员;String
varstatus用来存放现在知道的相关成员的信息  String
例如:varstatus="a"
则a还有四个属性,index,count,first和last
index:number 现在指到的成员的索引
count:number 总共指到的成员的总数
first:boolean 现在指到的成员是否是第一个成员
last:boolean 现在指到的成员是否为最后一个成员
items 被迭代的集合对象,包括:Arrays Collection Iterator Enumeration Map String

begin开始的位置int
end结束的位置int
step每次迭代的间隔数int
限定begin如果有必须大于0,end必须大于begin
step必须大于等于1

<%
   String a[]= new String[3];
  a[0]="hello ";
  a[1]="this";
  a[2]=" is a test";
  request.setAttribute("att",a);
%>
<c:forEach items="${"att"}" var="items" varStatus="s">
  ${item}
  item有效范围在foreach中
  index:${s.index}
  count:${s.count}
  first:${s.first}
  last:${s.last}
</c:forEach>
不同的begin和end的设置输出不一样
-------------------------------------------
<c:forTokens>
</c:forTokens>用来浏览一字符串中所有的成员,其成员定义由定义符号来分隔
delims定义用来分隔字符串的字符
<c:forEach>也可以分隔字符串,但不能设定分隔符
<c:forEach items="a,b,c,d" var="item">
  ${item}
</c:forEach>
<c:forToken items="a,b,c,d" var="item" delims=",">
  ${item}
</c:forEach>
<c:forToken items="123-456-789" var="item" delims="-">
  ${item}
</c:forEach>
-------------------------------------------
此外,笔者还使用<c:set>来传递值给Core_import.jsp,这就是<c:param>无法做到的动作,
<c:param>只能从包含端抛给被包含端,但是在属性范围中,可以让包含端也能得到被包含端传来的
数据
-------------------------------------------
国际化与格式化标签库 I18N

重写客户端的区域设置
<fmt:setLocale value="语言与国家代码" variant="浏览器变量" scope="page|request|session|application"/>


区域代码  区域,语言
en        英文
en_US     英文(美国)
zh_TW     中文(台湾)
zh_CN     中文(中国)
de_CH      瑞士,德国样式

创建一个I18N本地化上下文,并将资源包加载到其中
<fmt:bundle basename="无扩展名的资源文件名">Body</fmt:bundle>

创建一个I18N本地化上下文,并存在范围变量里
<fmt:setBundle basename="无扩展名的资源文件名" var="指定导出的范围变量的名称" scope="page|request|session|application"/>

给出资源包的输出值
<fmt:message key="消息关键字"/>

格式化数字
<fmt:formatNumber value="要格式化的数字" type="格式类型" minFractionDigits="小数点后保留几位"/>

格式化时间
<fmt:formatDate value=""/>

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

JSTL中最重要的就是国际化格式(I18N)的支持,此功能可以对一个特定的语言请求作出合适的响应。
不同的国家有不同的数据显示格式。如数字356987.589,在法国为356 987,589
在德国356.987,589 在美国356,987.589

I18N格式符主要包含:国际化,消息,数字日期格式化。

详细分类:
国际化setLocale
      requestEncoding:用来设定字符串编码,功能和ServletRequest.setCharacterEncoding()相同

<fmt:setLocale value="一定要有value属性,设定地区代码。其中最少有两个字符的语言代码如zh ,en 然后再加上两个字母的国家和地区代码,用-或_连接"  varitant="浏览器或供应商,如WIN,Mac" >

<%Date n= new Date();
  request.setAttribute("d",n);
%>
<fmt:setLocale value="zh_CN"/><fmt:formatDate value=${d}/>

--消息     bundle     message      param     setBundle
      抓取系统设定的语系资源,作为国际化信息.通过建立存放国际化信息的数据来源.建立propertie文件,并存储在we-inf/classes目录下
      写的时候必须依照key=value
      MyResource.properties
      str1=hello
      str2=My name is Bunny
<fmt:bundle basename="basename" prefix="属性的前缀">
basename是设定要使用的数据源,千万不可有任何的文件类型即扩展名,如.class,或.properties
prefix是前置关键字,如当如下的propertites:
  requestinfo.label.method=Method;
  requestinfo.label.requesturi=URI;
  requestinfo.label.protocol=Protocol;
 我们就可以用以下方法打开
<fmt:bundle basename="MyResource" prefix="requestinfo.label.">
<fmt:message key="protocol"/>
<fmt:message key="method"/>
</fmt:bundle>

 

 <fmt:message>会从指定的资源中把特定的关键字的值抓取出来。
<fmt:setbundle>设定默认的数据源
<fmt:setbundle basename=""  var="存储资源的名称">

<fmt:setbundle>和<fmt:bundle>都可以和<fme:setLocale>搭配使用.多种语言源时,可以将文件名取成如书上例子所示的,当语言取成zh_TW时,它默认去找MyResource_zh_TW.properties作为数据源,如果设定的区域没有符合的文件名,将会使用MyResource.properties 来作为数据源。

如是中文的资源文件,它的内容大部分是Unicode的符号,他们都代表一些中文字,在执行jsp时,会出现乱码,无法正常显示中文;
--------------------------------------------------------------------------------------
SQL标签库
1.设置数据源
  <sql:setDataSource driver="驱动的名字'sun.jdbc.odbc.JdbcOdbcDriver'" url="jdbc:odbc:blog" var="conn"/>
2.用事务建表
  <sql:transaction dataSource="${conn}">
    <sql:update var="newTable">
      sql语句来见表
    </sql:update>
  </sql:transaction>
3.插入记录
  <sql:update var="newRow" dataSource="${conn}">
      insert into tablename values(?,?,?)
      <sql:param value=""/>
      <sql:param value=""/>
  </sql:update>
4.查询记录
  <sql:query var="rs" dataSource="${conn}">
      select * from tablename
  </sql:query>
5.用表格显示记录
  <table border="1">
   <tr>
    <c:forEach var="columnName" items="${rs.columnNames}">
     <th>
      <c:out value="${columnName}"/>
     </th>
    </c:forEach>
   </tr>
   <c:forEach var="row" items="${rs.rowsByIndex}">
    <tr>
      <c:forEach var="column" items="${row}">
    <td>
      <c:out value="${column}"/>
    </td>
   </c:forEach>
    </tr>
   </c:forEach>
  </table>
--------------------------------------------------------------------------------------

import java.util.Calendar;
import java.util.GregorianCalendar;

public class Test {
    public static void main(String[] argv) {
        //返回一个当前日期和时间的Calendar
        Calendar curDate = Calendar.getInstance();
        //返回今天夜里零时的Calendar(这里不明白看API)
        Calendar tommorowDate = new GregorianCalendar(curDate
                .get(Calendar.YEAR), curDate.get(Calendar.MONTH), curDate
                .get(Calendar.DATE) + 1, 0, 0, 0);
        //一天24小时当中,当前过了多少毫秒(用一天24小时的毫秒数减去一天剩余时间的毫秒数)
        System.out.println((60*60*24*1000-(tommorowDate.getTimeInMillis() - curDate
                .getTimeInMillis())));
    }
}

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

转换成时间
DateFormat format = new SimpleDateFormat("H:dd");
Date date = format.parse("8:00");

加上20分钟,如果是减去20分钟的话用-20
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MINUTE, 20);

--------------------------------------------------------------------------------------
11.JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE用jsp:include动作实现
它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面
--------------------------------------------------------------------------------------
int i=100;
String binStr=Integer.toBinaryString(i);
String otcStr=Integer.toOctalString(i);
String hexStr=Integer.toHexString(i);
System.out.println(binStr);
System.out.println(otcStr);
System.out.println(hexStr);
--------------------------------------------------------------------------------------
Calendar date=Calendar.getInstance();
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");

String name=format.format(date.getTime());
--------------------------------------------------------------------------------------

使用WEB容器捕获异常进行处理,在web.xml文件头部加上:
<error-page>
   <exception-type>java.lang.Exception</exception-type>
   <location>/system_error.jsp</location>-----出错后转向system_error.jsp页面
</error-page>
<error-page>
   <error-code>404</error-code>
   <location>/system_error.jsp</location>-----出错后转向system_error.jsp页面
</error-page>
<error-page>
   <error-code>400</error-code>
   <location>/system_error.jsp</location>-----出错后转向system_error.jsp页面
</error-page>
<error-page>
   <error-code>500</error-code>
   <location>/system_error.jsp</location>-----出错后转向system_error.jsp页面
</error-page>
--------------------------------------------------------------------------------------
Java 运行 记事本
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("notepad"); 



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1535545

posted on 2007-08-25 14:32 brock 阅读(1567) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: