posts - 11, comments - 0, trackbacks - 0, articles - 3

2006年11月9日

第一种:
    <script language="javascript" type="text/javascript">
           window.location.href=
"login.jsp?backurl="+window.location.href;
    </script>

第二种:
    <script language=
"javascript">
alert(
"返回");
window.history.back(-1);
   </script>

第三种:
   <script language=
"javascript">
window.navigate(
"top.jsp");
  </script>

第四种:
   <script language=
"JavaScript">
          self.location='top.htm';
   </script>

第五种:
   <script language=
"javascript">
          alert(
"非法访问!");
          top.location='xx.jsp';
   </script>

posted @ 2007-03-28 01:16 团队精神 阅读(299) | 评论 (0)编辑 收藏

关于 Servlet 中的事件监听

Servlet2.3 规范中添加了一些监听 web 应用中重要事件的能力。这项功能可以让我们根据事件的状态更有效的对资源进行管理和自动化进行。这部分描述了 servlet 的事件监听,包含以下部分:

1.   事件的分类和 Listener 接口

2.   典型的事件监听过程

3.   事件监听的声明和调用

4.   事件监听编码和发布向导

5.   事件监听的方法和相关的类

事件的分类和 Listener 接口

Servlet 事件有两个级别:

1.   Application 级别事件

包含着运行应用程序的虚拟机级别的相关资源和状态,即和 servlet Context 对象相关。

2.   Session 级别的事件

包含着一个单一用户的 session 的一系列请求的相关资源和状态,即 Http Session 对象。

在上面两个级别的事件,又可分别分为两种:

1.   生命周期的改变

2.   属性的改变

你可以为上面四种事件创建一个或多个监听类。一个单一的监听类可以监视多种事件。

创建一个事件类可以从 javax.servlet 包或 javax.servlet.http 包中实现合适的接口。下表中列出了四种事件相关的接口。

事件种类

事件描述

接口

Context 生命周期的改变

context 的建立和即将关闭 context

Javax.servlet.ServletContextListener

Context 属性值的改变

添加,删除,修改 context 的属性值

Javax..servlet.ServletContextAttributeListener

Session 生命周期的改变

Session 的创建,注销,超时

Javax.servlet.http.HttpSessionListener

Session 属性值的改变

添加,删除,修改 session 的属性值

Javax.servlet.htpp.HttpSessionAttributeListener

典型的事件监听过程

考虑一个 web 应用是由一组访问数据库的 servlet 组成的。一个典型的事件监听机制是这样的,创建一个 context 生命周期的事件来管理数据库连接,这个监听器可以有如下的功能:

1.   这个监听器监视着应用程序的启动

2.   这个应用程序写入日志到数据库中并且把连接对象存储在 context

3.   Servelt 使用连接对象来执行 SQL

4.   监听器监听应用程序的即将关闭

5.   在关闭应用程序之前,先关闭连接对象

事件监听的声明和调用

事件监听的声明在应用程序的 web.xml 里,用 <listener> 元素,该元素是 <web-app> 的子元素。每个监听器都对应一个 <listener> ,有一个 <listener-class> 子元素用来指定对应的类名。在每种事件中,你需要指定你想调用的顺序。

在应用程序启动之后,并且在第一次请求之前, servlet 容器会创建并注册每个监听类的实例。每种事件,监听器是按照他们声明的顺序来注册的。然后,当应用程序开始运行,每种事件监听器安装他们的顺序调用。在最后一次请求之前,所有的监听器都保持活动状态。

一旦应用程序关闭, session 事件首先发生,以他们声明的顺序相反。然后 context 事件发生也是以声明的顺序相反。

下面是一个例子:

<web-app>

   <display-name>MyListeningApplication</display-name>

   <listener>

      <listener-class>com.acme.MyConnectionManager</listenerclass>

   </listener>

   <listener>

      <listener-class>com.acme.MyLoggingModule</listener-class>

   </listener>

   <servlet>

      <display-name>RegistrationServlet</display-name>

      ...

   </servlet>

</web-app>

假设 MyConnectionMnanager MyLoggingModule 都是实现 ServletContextListener 接口, MyLoggingModule 也是实现了 HttpSessionListener 接口。

当应用程序运行,两个监听器都会监听 context 生命周期事件, MyLoggingModule 监听器还会监听 session 生命周期。在 context 生命周期中, MyConnectionMananger 会首先开始监听,因为它声明在前面。

事件监听器的编码和发布指南

请注意事件监听器类的以下规则和指南:

l          在多线程的应用程序中,属性可能同时改变。这是不需要 Servlet 容器来同步结果――在这种情况下监听类本身负责保持数据的完整性。

l          每个监听类都必须有一个 public 的零参数的构造函数。

l          每个监听类文件必须打包到 WAR 文件,也可以是在 /WEB-INF/classes 或是包含在 /WEB-INF/lib 下的 JAR 文件中。

注意:在分布式的环境中,事件监听类的作用域是包含这个部署描述文件的虚拟机。不需要分布式的 Web 容器来传递 servlet context 事件或是 session 事件到其他的虚拟机。这个在 Sun Microsystem Java Servlet 规范, 2.3 版本。

事件监听器的方法和相关的类

这部分列出了事件监听器的方法,当 servlet context 事件或是 servlet session 事件发生时,容器将会调用他们。这些方法的输入的事件对象的类型不一样,因此一下讨论事件类和他们的方法。

ServletContextListener 方法, ServletContextEvent

ServletContextListener 接口规范以下的方法:

       void contextInitialized(ServletContextEvent sce)

              servlet 容器调用这个方法来通知监听器, servlet context 已经建立并且应用程序准备处理请求。

       void contextDestory(ServletContextEvent sce)

              servlet 容器调用这个方法来通知监听器应用程序即将关闭。

Servlet 容器创建一个 java.servlet.ServletContextEvent 对象作为调用 ServletContextListener 方法的输入。 ServletContextEvent 类包含以下方法,你的监听器可以调用

ServletContext getServletContext()

用这个方法返回已创建的或是将要销毁的 servlet context 对象,从中你可以得到你想要的信息

posted @ 2007-03-28 01:14 团队精神 阅读(281) | 评论 (0)编辑 收藏

事务:是单个的原子的操作的集合,由独立的操作组成,又一种一致的状态转化为另一种一致的状态。

  • 事物的四个属性ACID:

    •   原子性:事务是一个不可分割的工作单元。要么全部执行、要么全部不执行。

    • 一致性:总体上不能破坏业务规则,使一种一致状态转化为另一种一致状态。

    • 隔离性:每个事务必须独立于其他事务执行,并且事务中的操作同时发生。

    • 持久性:确保事务提交后,其输入是永久性的。

事务的开始:标准SQL-99:START TRANSACTION

                         MYSQL:用START TRANSACTION和BEGIN来启动事物

                         ORACLE:不支持START TRANSACTION ,它是自动启动的

在提交事务(COMMIT)之前可以用ROLLBACK回滚事务。

ORACLE事务保存点的设置(MYSQL不支持):SAVEPOINT 保存点名称;

ORACLE中设置事务提交模式的方法:SET AUTOCOMMIT ON/OFF

MYSQL中的方法是:SET AUTOCOMMIT=0/1   

 

高级事务:

  •     ORACLE中支持的事务隔离级别有:1)只读事务  2)提交读(默认)3)可串行读

设置语法为(ORACLE):

             SET TRANSACTION

               {{READ ONLY|READ WRITE}

                  |ISOLATION LEVEL

                     { READ COMMIT|SERIALIZABLE}};   

posted @ 2006-11-10 22:24 团队精神 阅读(260) | 评论 (0)编辑 收藏

  1. CURSOR-ALREADY-OPEN:如果打开一个已经打开的游标时的异常。

  2. DUP-VAL-ON-INDEX:如果试图添加行带有重复主键值或者唯一索引值时产生的异常。

  3.  INVALID-NUMBER:将不包含数字的字符串转换成数字时产生。

  4. NO-DATA-FOUND: 使用select into语句将一个值存入一个变量,但是select语句没有返回行十产生

  5. TOO-MANY-ROWS:使用select into语句给变量负值,但返回了多个行。

  6. OTHERS:其他异常。

posted @ 2006-11-10 21:50 团队精神 阅读(273) | 评论 (0)编辑 收藏

  • 我的理解,存储过程就相当于JAVA中的方法;它可以

    • 输入参数和输出参数的形式将多个值返回至调用过程或批处理。

    • 包含数据库执行操作(包括调用其他过程)的编程语句。

    • 向调用过程或批处理返回状态值,以表明成功或失败(以及失败原因)。

  • 储存过程的优点:

    • 允许模块化程序设计。只需要创建一次并储存在数据库中,以后可以在程序中调用该程序任意次。

    • 允许更快执行。大量的SQL代码需要执行的时候,存储过程要比SQL代码的执行过程快。

    • 减少网络流量:多行SQL代码可以由一行执行存储过程的单独语句实现,而不需发送多条SQL代码。

    • 可以作为安全机制使用。对没有权限直接使用存储过程中代码的用户,给予他们使用储存过程的权限。

  • 创建储存过程: create or replace procedure 储存名 AS begin 储存过程主体 end; /  ----   oracle(支持IS代替AS)

  • 使用存储过程:call 存储过程名(program);

  • 删除和更改存储过程名:drop procedure 存储过程名; alter procedure procName;

  • 定义变量:declare 变量名 变量类型(长度);

  • 游标是代表一个结果集的一种方式,他允许循环遍历一个行集合,每次一行。

  • 声明游标:declare 游标名 cursor is sql查询;

posted @ 2006-11-09 22:46 团队精神 阅读(262) | 评论 (0)编辑 收藏

  • 视图,是用户查看数据表中数据的一种方式,用户可以通过它浏览数据表中部分或者全部数据.视图就像是一个表一样,但是实际上是引用的其基表中的的数据。同时如果想视图的基表中添加列,试图中是不会出现新的列的,除非删除或重新创建视图。此外视图不能加参数。

  • 视图的优点:

    • 将用户的注意力集中到特定的数据上,保护数据的安全。

    • 简化了数据的查询和处理操作。

    • 有利于简化数据交换的操作。

    • 有利于简化对用户权限的管理

  • 创建视图:create view 视图名 AS  query(任何SQL查询);

  • 更改视图:alter view 视图名 as newquery;   ---(mysql中用)    create or replace view 视图名 as newquery;  ---(oracle中用)

  • 查看视图:show create view 视图名;  ---(mysql)

  • 删除视图: drop view 视图名;

posted @ 2006-11-09 21:40 团队精神 阅读(226) | 评论 (0)编辑 收藏