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

2007年3月28日

第一种:
    <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)编辑 收藏

2006年11月10日

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

  • 事物的四个属性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)编辑 收藏

2006年11月9日

  • 我的理解,存储过程就相当于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)编辑 收藏

2006年11月7日

  1. 使用两表相等连接(标准形式): select table1.column1, table1.column2,table2.column3 from table1 join table2 on  table1.column1= table2.column2;(使用别名在列后(如table1.column1后)加   as 别名)

  2. 事业多表相等连接:select * from table1 join table2 on  table1.column1= table2.column2 join table3 on table1.column3= table3.column4;\

  3. 内连接: 内连接是使用比较运算符根据每个表共有的列的值匹配两个表中的行.: select table1.column1,table2.column2 from table1 inner join table2 on table1.column1 = table2.column;

  4. 外连接:是考虑到源表有些不匹配的情况分为三种:左外连接(以左表为准,右表中没有匹配的指就显示空),右外连接(以右表为准,左表中没有匹配的指就显示空),全外连接(左,右外连接都要执行) 即关键语法为left outer join,right outer join,full outer join

posted @ 2006-11-07 23:09 团队精神 阅读(266) | 评论 (0)编辑 收藏

2006年11月2日

      1)实体完整性:实体的存在是独立于数据库的,一个表如果与它所代表的实体完全一致,我们就说该表具有试题完整性。实体完整性强制表的表示符列或主键的完整性(通过索引、唯一约束、主键或标示列(自动增长的列)属性)。
      2)域完整性:指给定列的输入有效性。强制域有效性的方法有:限制类型(通过数据类型)、格式(通过检查约束和规则)或可能值的范围(通过外键约束、检查约束、默认值定义、非空约束和规则)。
      3)引用完整性:保持表之间已定义的关系,确保键值在所有表中的一致性。
      4)用户自定义完整性:可以定义不属于其他任何完整性的特定业务规则。

posted @ 2006-11-02 23:03 团队精神 阅读(252) | 评论 (0)编辑 收藏

2006年11月1日

      今天学习了关系型数据库设计,昨天的模糊开始有点点头绪了。因为有点实际的东西做了。
      重要概念: 规范化数据,指数据被组织成一种结构,既可以保持数据的完整性,同时最小化数据的冗余。

      最基本的规则——范式
      第一范式:1、一个行的每一列必须是原子性的。即只能有一个值。
                        2、表中每一行必须包含相同数量的列。
           3、一个表中的所有行必须是不同的。

      第二范式:1、必须遵循第一范式。
                         2、非主键列必须依赖于主键列。
    第三范式:1、必须遵循第二范式。
                         2、非主键列必须依赖于主键列,且必须彼此相互独立。

      关系:一对一、一对多、多对多
      外键:表中的一到多个列与另一个表中的一到多个列相匹配。
      实体:一个代表一系列相关数据的对象。

      创建数据模型:
      识别实体,规范化数据,识别关系,改进数据模型。

posted @ 2006-11-01 22:36 团队精神 阅读(287) | 评论 (0)编辑 收藏

 数据库,就是以某种方式相关的数据的集合。主要的模型有:层次模型,网状模型,关系模型(用最多的),对象模型。第一种模型的缺点就是更改复杂,费时,便利麻烦且易丢失数据。第二种是层次模型的增强,但是仍然有很多层次模型的缺点,一个更改可能导致更复杂的更改。关系模型是独立于应用程序的,使更改数据库设计,而不会影响应用程序成为可能,在表之间定义复杂的关系。
      SQL是结构化查询语言(Structured Quer Language)的英文缩写,是一种用于管理关系型数据库并且与数据库中的数据进行通信的计算机语言。SQL与RDBMS协同工作来定义数据库的结构、储存数据、操作数据、获取数据、控制对数据的访问以及确保数据的完整性。SQL是数据库语言的标准
      SQL语句主要有三种:
      1、DDL语句:用于创建、修改和删除数据库内的数据结构。
      2、DML:  主要用于储存在数据库中的数据本身的插入、更改、删除和查询(SELECT)。
      3、DCL:  主要是控制对数据库的访问权限。

      ORACLE体系结构:
  主要分为两层:一是ORACLE实例(ORACLE INSTANCE) ,二是ORACLE9I的数据文件。
        其中ORACLE INSTANCE又包括系统全局区(SGA)和后台处理程序
         SGA又包裹以下几个重要的区域:
      1、块缓冲区高速缓存,用于存放读取自数据文件的数据块副本,或者用户曾经处理过的数据。对应于DBMR(数据写进程)。
      2、重做日志缓冲区:对数据的修改被顺序的记录在该缓冲区,以便必要时候的恢复工作。主要对应于LGWR(日志写进程)。
      3、共享池: 重要用于存放解析过的SQL语句的结果,下次写入同样的SQL语句时就直接调用该结果,节省了时间,是特地为数据字典提供的一块缓冲池。

posted @ 2006-11-01 17:17 团队精神 阅读(517) | 评论 (0)编辑 收藏