2017-02-10 10:46:02    10    0    1

create tablespace test datafile 'D:\test.ora' size 1000m ---test为空间名,'D:\test.ora'存放路径
create user test identified by test default tablespace test quota 500m on users ---这里第一个test为用户名,第二个test为密码,第三个test为表空间名。
grant all privileges to test ---执行该语句给test用户授权

2017-02-09 13:49:32    109    0    1

1. 说明

搭建SpringMVC+spring+hibernate的框架,项目结构如图1所示 
图1 项目结构图 
引用的jar包为Spring3.2.6和Hibernate4,如图2所示 
图2 引用的所有jar包

2. 配置文件

2.1 spring-mvc.xml

注意看其中的注释内容,写的比较详细

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.2.xsd  
    http://www.springframework.org/schema/mvc  
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"
    default-autowire="byName">

    <!-- 开启注解,java文件里的@ -->
    <mvc:annotation-driven />

    <!-- 注解扫描包,注意换成自己的路径 -->
    <context:component-scan base-package="com.lq.controller">
        <!-- 只扫描@Controller的部分 -->
 
2017-02-07 14:11:45    132    0    0

1 新建 properties格式文件 设置 key=value格式的值
2 在配置文件中注入 bean
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:configfilename.properties</value>
</list>
</property>
</bean>



3 用private final String key = ResourceBundle.getBundle("configfilename").getString("key");获取相应的值

2017-02-07 14:01:58    139    0    0

在写程序时,想要获取某个资源文件,或想访问某个Servlet,如果路径写不对,就找不到该文件,或访问失败。由此可见,路径很重要。下面我们就来一一分析如何正确找到资源文件及访问Servlet。

1.Servlet访问路径

Servlet的访问路径是在web.xml文件中配置的,如下所示:

<url-pattern>Servlet访问路径</url-pattern>

Servlet访问路径有如下两种书写方式:

l路径以“/”开头

l路径以“*“开头

Servlet的访问路径要么以“/”开头,要么以“*”开头,但是在Servlet中,现在很少使用“*”开头,在后面将要学习的过滤器中会使用它来匹配要过滤的资源。

2.请求转发和请求包含路径

请求转发和请求包含需要给出即将转发和包含资源的路径,例如:

request.getRequestDispatcher(“/BServlet”).forward(request,response),表示要转发到BServlet。request对象的getRequestDispatcher(Stringpath)方法的参数有如下两种书写方式:

l以“/”开头:

相对当前项目路径,即:http://localhost:8080/项目名,例如:request.getRequestDispatcher(“/BServlet”)表示转发或包含路径为http://localhost:8080/项目名/BServlet的Servlet。

l不以“/”开头:

相对当前Servlet的路径,例如:当前Servlet是AServlet,访问它的路径为http://localhost:8080/项目名/servlet/AServlet,那么request.getRequestDispatcher(“BServlet”)就相当于,转发或包含路径为http://localhost:8080/项目名/servlet/BServlet的Servlet。

以上两种书写方式中,以“/”开头的路径是绝对路径,不以“/”开头的路径是相对路径。为了以后的开发简便,建议大家采用第一种方式,即以“/”开头的路径。

3.重定向路径

进行重定向时,需要给出将要重定向的资源的路径,例如:

response.sendRedirect(“/Example/B

2017-02-07 11:50:43    178    0    0

事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的一致性。
spring支持编程式事务管理和声明式事务管理两种方式。
编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。

声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。

显然声明式事务管理要优于编程式事务管理,这正是spring倡导的非侵入式的开发方式。声明式事务管理使业务代码不受污染,一个普通的POJO对象,只要加上注解就可以获得完全的事务支持。和编程式事务相比,声明式事务唯一不足地方是,后者的最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的方法,比如,可以将需要进行事务管理的代码块独立为方法等等。

声明式事务管理也有两种常用的方式,一种是基于tx和aop名字空间的xml配置文件,另一种就是基于@Transactional注解。显然基于注解的方式更简单易用,更清爽。

spring事务特性
spring所有的事务管理策略类都继承自org.springframework.transaction.PlatformTransactionManager接口
其中TransactionDefinition接口定义以下特性:

事务隔离级别

隔离级别是指若干个并发的事务之间的隔离程度。TransactionDefinition 接口中定义了五个表示隔离级别的常量:

TransactionDefinition.ISOLATION_DEFAULT:这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是TransactionDefinition.ISOLATION_READ_COMMITTED。
TransactionDefinition.ISOLATION_REA

blue    2017-02-07 09:49:00    199    0    1
// 抽象角色:
abstract public class Subject {
    abstract public void  request();
}

// 真实角色:实现了Subject的request()方法
public class  RealSubject  extends  Subject  {
  public  RealSubject()  { }

  public void  request()  {
     System.out.println( " From real subject. " );
    }
}

// 代理角色:
public class  ProxySubject  extends  Subject  {
  // 以真实角色作为代理角色的属性
  private  Subject realSubject;

  public  ProxySubject(Subject realSubject)  {this.realSubject = realSubject }

  // 该方法封装了真实对象的request方法
  public void  request()  {
     preRequest();
     realSubject.request();  // 此处执行真实对象的request方法
     postRequest();
  }
  ...
}

// 客户端调用:
RealSubject real = new RealSubject();
Subject sub = new ProxySubject(real);
Sub.request();