<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,  comments - 11,  trackbacks - 0
     

    jsp文件

    1.index.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    ??? <title>Index Page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">???
    </head>

    <body>
    ??? <jsp:forward page="login.jsp"></jsp:forward>
    </body>
    </html>

    2.login.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    ??? <title>Index Page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">???
    </head>

    <body>
    <s:fielderror></s:fielderror>

    <s:form action="login">
    ??? <s:textfield name="user.username" label="用 戶"></s:textfield>
    ??? <s:password name="user.password" label="密 碼"></s:password>
    ??? <s:submit value="登錄"></s:submit>
    </s:form>

    </body>
    </html>

    3.login_success.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <%@ taglib prefix="c" uri="
    http://java.sun.com/jsp/jstl/core"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    ??? <title>Index Page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">???
    </head>

    <body>
    <c:choose>
    ?? <c:when test="${empty user}">您還沒有登錄哦。。。</c:when>
    ?? <c:otherwise>${user.username},歡迎登錄</c:otherwise>
    </c:choose>

    </body>
    </html>

    附圖

    注意:運行本項目需要jstl標簽庫的支持,如果你使用的是java ee 5的話就不需要另外引入了

    posted @ 2009-07-29 16:33 jadmin 閱讀(105) | 評論 (0)編輯 收藏

    1.準備工作

    建好一個Web項目,加入必要的jar包(見本文末的附圖),本文將演示一個用戶登錄的例子,使用的是struts2.1.6,java ee 5

    2.代碼

    User.java

    /*
    * @(#)User.java 2009-7-29
    *
    * Copyright (c) 2009 by jadmin. All Rights Reserved.
    */

    package com.jsoft.domain;

    /**
    * 用戶實體類
    *
    * @author <a href="
    mailto:jadmin@126.com">jadmin</a>
    * @version $Id: User.java 2009-7-29 下午12:47:16$
    * @see <a href="
    http://hi.baidu.com/jadmin">myblog</a>
    */
    public class User {

    private String username;

    private String password;

    public String getUsername() {
    ?? return username;
    }

    public void setUsername(String username) {
    ?? this.username = username;
    }

    public String getPassword() {
    ?? return password;
    }

    public void setPassword(String password) {
    ?? this.password = password;
    }

    @Override
    public String toString() {
    ?? return super.toString() + "[" + username + ", " + password + "]";
    }
    }

    UserAction.java

    /*
    * @(#)UserAction.java 2009-7-29
    *
    * Copyright (c) 2009 by jadmin. All Rights Reserved.
    */

    package com.jsoft.web.action;

    import org.apache.struts2.convention.annotation.Action;
    import org.apache.struts2.convention.annotation.Result;

    import com.jsoft.domain.User;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;

    /**
    * Action
    *
    * @author <a href="
    mailto:jadmin@126.com">jadmin</a>
    * @version $Id: UserAction.java 2009-7-29 下午12:24:33$
    * @see <a href="
    http://hi.baidu.com/jadmin">myblog</a>
    */
    public class UserAction extends ActionSupport {

    private static final long serialVersionUID = 6488865641880260892L;
    private User user;

    @Action(value = "login",
    ??? results = {
    ???? @Result(name = "success", location = "/login_success.jsp", type = "redirect"),
    ???? @Result(name = "input", location = "/login.jsp", type = "dispatcher")
    ??? })
    public String execute() throws Exception {
    ?? System.out.println(user);
    ?? ActionContext.getContext().getSession().put("user", user);
    ?? return SUCCESS;
    }

    @Override
    public void validate() {
    ?? if (!"admin".equals(user.getUsername())) {
    ??? addFieldError("user.username", "登錄名不正確!");
    ?? } else if (!"admin".equals(user.getPassword())) {
    ??? addFieldError("user.password", "密碼不正確!");
    ?? }
    }

    public User getUser() {
    ?? return user;
    }

    public void setUser(User user) {
    ?? this.user = user;
    }
    }

    web.xml文件

    <filter>
    ?? <filter-name>struts2</filter-name>
    ?? <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
    ?? <filter-name>struts2</filter-name>
    ?? <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
    ?? <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    posted @ 2009-07-29 16:25 jadmin 閱讀(81) | 評論 (0)編輯 收藏

    驗證Email地址是否合法

    <script language="javascript">
    function isEmail(email) {
    ??
    if (email.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1) {
    return true;
    }
    ???
    else {
    ?? return false;
    }

    }
    </script>

    驗證IP地址

    IPV4_PATTERN = "(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])";
    IPV6_PATTERN = "([0-9a-f]{1,4}:){7}([0-9a-f]){1,4}";

    待續。。。

    posted @ 2009-07-29 00:51 jadmin 閱讀(75) | 評論 (0)編輯 收藏

    1.準備工作

    除了必要spring的支持外,還需要引入兩個jar包,分別是activation.jar和mail.jar

    2.代碼

    SimpleHtmlMailSender.java

    /*
    * @(#)SimpleHtmlMailSender.java 2009-7-28
    *
    * Copyright (c) 2009 by jadmin. All Rights Reserved.
    */

    package com.jsoft.s2sh.util.mail;

    import javax.mail.MessagingException;
    import javax.mail.internet.MimeMessage;

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.mail.javamail.MimeMessageHelper;

    /**
    * 用于發送簡單的HTML文本郵件
    *
    * @author <a href="mailto:jadmin ON 126.com">jadmin</a>
    * @version $Id: SimpleHtmlMailSender.java 2009-7-28 上午01:15:35$
    * @see <a href="http://hi.baidu.com/jadmin">myblog</a>
    */
    public class SimpleHtmlMailSender {

    protected JavaMailSender sender;

    public void setSender(JavaMailSender sender) {
    ?? this.sender = sender;
    }

    public void sendMessage(String message,String to, String from, String subject, String encoding) throws MessagingException {
    ?? MimeMessage msg = sender.createMimeMessage();
    ?? MimeMessageHelper helper = new MimeMessageHelper(msg, true, encoding);
    ?? helper.setTo(to);
    ?? helper.setFrom(from);
    ?? helper.setSubject(subject);
    ?? helper.setText(message, true);

    ?? sender.send(msg);
    }

    public static void main(String[] args) throws MessagingException {
    ?? ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-mail.xml");
    ?? String to = "etxp on?? qq.com";
    ?? String from = "etxp on 163.com";
    ?? String subject = "感謝您對本站的關注,請激活您的帳號";
    ??
    ?? String message = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\"></head><body><h1><a href='#'>哈哈!"
    ??? + "</a></h1></body></html>";

    ?? SimpleHtmlMailSender sender = (SimpleHtmlMailSender) ctx.getBean("mailSender");
    ?? sender.sendMessage(message, to, from, subject, "GB2312");

    }

    }

    3.配置

    applicationContext.xml(將此文件之余classpath下)

    <?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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">


    <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    ?? <property name="host">
    ??? <value>smtp.163.com</value>
    ?? </property>
    ?? <property name="username">
    ??? <value>etxp</value>
    ?? </property>
    ?? <property name="password">
    ??? <value>**********</value>
    ?? </property>
    ?? <property name="javaMailProperties">
    ??? <props>
    ???? <prop key="mail.smtp.auth">true</prop>
    ??? </props>
    ?? </property>
    </bean>

    <bean id="mailSender" class="com.jsoft.s2sh.util.mail.SimpleHtmlMailSender">
    ?? <property name="sender">
    ??? <ref bean="javaMailSender" />
    ?? </property>
    </bean>

    </beans>

    4.運行

    posted @ 2009-07-28 04:29 jadmin 閱讀(89) | 評論 (0)編輯 收藏

    Spring在TransactionDefinition接口中7種類型的事務傳播行為,它們規定了事務方法和事務方法發生嵌套調用時事務如何進行傳播:

    1.PROPAGATION_REQUIRED
    如果當前沒有事務,就新建一個事務,如果已經存在一個事務中,加入到這個事務中。這是最常見的選擇。

    2.PROPAGATION_SUPPORTS
    支持當前事務,如果當前沒有事務,就以非事務方式執行。

    3.PROPAGATION_MANDATORY
    使用當前的事務,如果當前沒有事務,就拋出異常。

    4.PROPAGATION_REQUIRES_NEW
    新建事務,如果當前存在事務,把當前事務掛起。

    5.PROPAGATION_NOT_SUPPORTED
    以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。


    6.PROPAGATION_NEVER
    以非事務方式執行,如果當前存在事務,則拋出異常。


    7.PROPAGATION_NESTED
    如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則執行與PROPAGATION_REQUIRED類似的操作。

    posted @ 2009-07-27 18:33 jadmin 閱讀(73) | 評論 (0)編輯 收藏
    在web應用開發中,為了使視圖與數據邏輯分離,需要使用標簽,jstl就是其中之一。
    一、用法配置

    JSTL的版本和servlet規范的版本不同時,配置方式是不同的,以下以servlet2.4和jstl1.1為例。

    核心標簽c:
    1、web.xml中的配置如下(其實ide已經幫你配置好了)
    <web-app version="2.4"
    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-app_2_4.xsd">
    </web-app>
    2、在jsp頁面導入聲明
    <%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>
    二、常用標簽
    1、<c:out/>
    用于輸出內容
    例子:<c:out value="abc"/><c:out value="${va}" ></c:out>
    2、<c:set></c:set>
    用于設置作用域變量
    例子:<c:set value="Hello" var="sessionVar" scope="session"></c:set>
    3、<c:remove />
    用于清除作用域變量
    <c:remove var="maxUser" scope="application"/>
    4、<c:forEach/>
    用于循環輸出變量
    屬性:vars:循環體中可以引用的變量;begin:循環開始的下標;end:循環結束的下標;items:集合的名稱;
    例如:<c:forEach begin="0" end="5" items="array" var="s" />
    ${s}<br>
    </c:forEach>
    將輸出array集合中的6個元素,array是作用域變量,可以是request,session,application作用域內屬性變量(調用setAttribute方法設置的)。如果array中存放的是對象如User(包含name,id屬性),如果想輸出name屬性的話
    可以用${s.name},其等價于調用s.getName()方法。
    5、<c:if/>
    用于執行條件判斷
    例如:<c:if test="${empty sessionScope.name }">
    <c:redirect url="testJSTLlogin.jsp" />
    </c:if>
    個人覺得此功能不夠強大,還是腳本靈活
    6、<c:choose><c:when></c:when>......<c:other></c:other>
    用于執行條件判斷相當于if,else if,else if... else
    用法:c:choose標簽用來選擇執行語句
    當c:when的test中判斷結果為true時執行該標簽中的內容;
    如果所有c:when的test中判斷結果都為false,則執行c:otherwise中的內容;
    例子:

    <c:choose>
    <c:whentest="testCondition">
    Content1
    </c:when>
    <c:whentest="testCondition">
    Content2
    </c:when>
    <c:otherwise>
    Content3
    </c:otherwise>
    </c:choose>

    posted @ 2009-07-27 18:28 jadmin 閱讀(106) | 評論 (0)編輯 收藏

    3聲明式管理Hibernate分布式事務

    通過Spring,還可以很方便地切換至另一種事務管理策略。比如需要提供分布式事務管理策略時,只要替換一下配置即可,如代碼10.29所示。

    代碼10.29 appContext-jta.xml

    <beans>

    <bean id="transactionManager"

    class="org.springframework.transaction.jta.JtaTransactionManager">

    ??? <property name="sessionFactory" >

    ????? <ref bean="sessionFactory" />

    ??? </property>

    </bean>

    <bean id="myDataSource1"

    class="org.springframework.jndi.JndiObjectFactoryBean">

    ????? <property name="jndiName">

    ????????? <value>java:comp/env/jdbc/myds1</value>

    ????? </property>

    </bean>

    <bean id="myDataSource2"

    class="org.springframework.jndi.JndiObjectFactoryBean">

    ????? <property name="jndiName">

    ????????? <value>java:comp/env/jdbc/myds2</value>

    ????? </property>

    </bean>

    <bean id="sessionFactory1"

    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

    ??? <property name="dataSource" ref="myDataSource1"/>

    ??? <property name="configLocations">

    ????? <value>hibernate.cfg1.xml</value>

    ??? </property>

    </bean>

    <bean id="sessionFactory2"

    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

    ??? <property name="dataSource" ref="myDataSource2"/>

    ??? <property name="configLocations">

    ????? <value>hibernate.cfg2.xml</value>

    ??? </property>

    </bean>

    <bean id="dao1"

    class="daopackage1.DaoImpl">

    ??? <property name="sessionFactory" ref="sessionFactory"/>

    </bean>

    <bean id="dao2"

    class="daopackage2.DaoImp2">

    ??? <property name="sessionFactory" ref="sessionFactory"/>

    </bean>

    </beans>

    <bean id="business" class="businesspackage.BusinessFacadeImpl">

    ??? <property name="dao1">

    ????? <ref bean="dao1"/>

    ??? </property>

    ??? <property name="dao2">

    ????? <ref bean="dao2"/>

    ??? </property>

    </bean>

    <bean id="businessProxy"

    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

    ??? <property name="transactionManager">

    ????? <ref bean="transactionManager" />

    ??? </property>

    ??? <property name="target">

    ????? <ref bean="business" />

    ??? </property>

    ??? <property name="transactionAttributes">

    ????? <props>

    ??????? <prop key="business*">PROPAGATION_REQUIRED</prop>

    ??????? <prop key="someOtherBusiness*">PROPAGATION_MANDATORY</prop>

    ????? </props>

    ??? </property>

    </bean>

    </beans>

    可以看到,對于橫跨多個Hibernate SessionFacotry的分布式事務,只需簡單地將JtaTransactionManagerLocalSessionFactoryBean的定義結合起來就可以了,其中每個DAO通過bean屬性得到各自的SessionFactory引用。

    說明:如果所有底層數據源都是支持事務的容器,那么只需要對一個業務對象應用JtaTransactionManager策略,該對象就可以橫跨多個DAO和多個Session Factory來劃分事務了。使用Spring的最大好處就是,可通過配置來聲明式地管理事務,無需對應用代碼作任何改動。

    posted @ 2009-07-27 01:52 jadmin 閱讀(105) | 評論 (0)編輯 收藏

    2聲明式管理Hibernate本地事務

    Spring提供了一種統一的IoC方式來管理Hibernate事務(本地或者分布式事務)。從Spring接手hibernate.cfg.xmlHibernate的基本配置文件)起,Hibernate事務便輕易交由Spring拖管了。

    說明:在上一章介紹IBatisDAO的時候,曾經針對事務和DAO的關系簡單的進行了探討。通常DAO的粒度應該都是比較細的,即它們只是一些單步的CRUD操作,所以就需要引入一個業務對象來包裹DAO,這樣,就可以在業務對象的基礎上,提供更粗粒度的事務劃分了(比如跨越多個DAO的方法調用進行事務管理)。

    為了能對DAO進行更粗粒度的事務控制,需要為其增加一個業務對象。下面給出了該業務對象的接口和實現,如代碼10.25~10.26所示。

    代碼10.25 StockFacade.java

    package chapter10.spring.hibernate;

    import chapter10.hibernate.domain.Category;

    public interface StockFacade {

    public void business1(Category category);

    public void someOtherBusiness();

    }

    代碼10.26 BusinessFacadeImpl.java

    public class BusinessFacadeImpl implements StockFacade {

    private StockDao stockDao;

    public void setStockDao(StockDao stockDao) {

    ??? this.stockDao = stockDao;

    }

    public void business1(Category category) {

    ??? stockDao.createCategoryCascade(category);

    ??? stockDao.retrieveProductBy(category);

    ??? stockDao.deleteCategoryCascade(category);

    }

    public void someOtherBusiness() {

    ??? //other implemention

    }

    }

    接著給出關于事務策略的配置,其中使用了Spring針對Hibernate3給出的HibernateTransactionManager,它提供了Hibernate的本地事務管理策略,如代碼10.27所示。

    代碼10.27 transaction-context.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

    "http://www.springframework.org/dtd/spring-beans.dtd">

    <beans>

    <bean id="transactionManager"

    class="org.springframework.orm.hibernate3.HibernateTransactionManager">

    ??? <property name="sessionFactory" >

    ????? <ref bean="sessionFactory" />

    ??? </property>

    </bean>

    <bean id="business"

    class="chapter10.spring.hibernate.BusinessFacadeImpl">

    ??? <property name="stockDao">

    ????? <ref bean="stockDao"/>

    ??? </property>

    </bean>

    <bean id="businessProxy"

    ??? class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

    ??? <property name="transactionManager">

    ????? <ref bean="transactionManager" />

    ??? </property>

    ??? <property name="target">

    ??? ?? <ref bean="business" />

    ??? </property>

    ??? <property name="transactionAttributes">

    ????? <props>

    ??????? <!--運行在當前事務范圍內,如果當前沒有啟動事務,那么創建一個新的事務-->

    ??????? <prop key="business*">PROPAGATION_REQUIRED</prop>

    ??????? <!--運行在當前事務范圍內,如果當前沒有啟動事務,那么拋出異常-->

    ??? ???? <prop key="someOtherBusiness*">PROPAGATION_MANDATORY</prop>

    ????? </props>

    ??? </property>

    </bean>

    </beans>

    代碼10.28 HibernateTransactionUsageTest.java

    package chapter10.spring.hibernate;

    import org.springframework.context.ApplicationContext;

    import org.springframework.context.support.ClassPathXmlApplicationContext;

    import chapter10.hibernate.domain.Category;

    import junit.framework.TestCase;

    public class HibernateTransactionUsageTest extends TestCase {

    private StockFacade stockBusiness;

    protected void setUp() throws Exception {

    ??? String path = "ch10/spring/hibernate/";

    ??? ApplicationContext ctx = new ClassPathXmlApplicationContext(

    ???????? new String[]{path+"dataAccessContext-support-local.xml",

    ???????????? path+"transaction-context.xml"});

    ??? stockBusiness = (StockFacade)ctx.getBean("businessProxy");

    }

    public void testTransctionUsage() {

    ??? Category category = new Category("RABBIT");

    ??? category.setName("Rabbit");

    ??? category.setDescn("Desciption of Rabbit");

    ??? stockBusiness.business1(category);

    }

    }

    posted @ 2009-07-27 01:51 jadmin 閱讀(74) | 評論 (0)編輯 收藏

    1Spring上下文中配置SessionFactory

    通過上文的描述,可以知道,Spring使用JdbcTemplate時必須和特定的數據源進行綁定。而在Hibernate中,數據源是對用戶屏蔽的,它使用一個稱為“Session”的強勁武器。

    Session具有建立或取消對象的持久關聯、同步對象狀態和數據庫以及事務管理等等復雜功能。SessionHibernate的核心概念,就如同SqlMap與之IBatis一樣。Session的創建依賴于HibernateSessionFactorySessionFactorySession一樣,也是Hibernate的核心組件。

    IBatis的整合方式一樣,Spring會將Hibernate基本配置文件中的數據源屬性抽離到Spring自身的配置文件中,以提供統一的數據源管理和注射。

    首先,給出Hibernate的配置文件,如代碼10.19所示。

    代碼10.19 hibernate.cfg.xml

    <?xml version='1.0' encoding='utf-8'?>

    <!DOCTYPE hibernate-configuration PUBLIC

    ??????? "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

    ??????? "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

    <hibernate-configuration>

    <session-factory>

    <!-- Database connection settings -->

    <!--??? <property name="connection.driver_class">-->

    <!--????? org.postgresql.Driver-->

    <!--??? </property>-->

    <!--??? <property name="connection.url">-->

    <!--????? jdbc:postgresql://1210.0.0.1:5432/hibernate-->

    <!--??? </property>-->

    <!--??? <property name="connection.username">postgres</property>-->

    <!--??? <property name="connection.password">1111</property>-->

    ??? <!-- SQL dialect -->

    ??? <property name="dialect">

    ????? org.hibernate.dialect.PostgreSQLDialect

    ?? </property>

    ??? <!-- Echo all executed SQL to stdout -->

    ??? <property name="show_sql">true</property>

    ??? <!-- Drop and re-create the database schema on startup -->

    ??? <property name="hbm2ddl.auto">create</property>

    ??? <mapping resource="chapter7/hibernate/domain/Category.hbm.xml" />

    ??? <mapping resource="chapter7/hibernate/domain/Product.hbm.xml" />

    </session-factory>

    </hibernate-configuration>

    注意,代碼10.19中被注釋掉的部分,它將被抽離到了Spring的上下文配置文件,而其余部分則暫時保持不變。

    下面給出Spring的配置文件,如代碼10.20所示。

    代碼10.20 dataAccessContext-local.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

    "http://www.springframework.org/dtd/spring-beans.dtd">

    <beans>

    <bean id="propertyConfigurer"

    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

    ??? <property name="locations">

    ????? <list>

    ??????? <value>classpath:jdbc.properties</value>

    ????? </list>

    ??? </property>

    </bean>

    <bean id="dataSource"

    class="org.apache.commons.dbcp.BasicDataSource"

    destroy-method="close">

    ??? <property name="driverClassName" value="${jdbc.driverClassName}"/>

    ??? <property name="url"

    ??? value="jdbc:postgresql://127.0.0.1:5432/hibernate"/>

    ??? <property name="username" value="${jdbc.username}"/>

    ??? <property name="password" value="${jdbc.password}"/>

    </bean>

    <bean id="sessionFactory"

    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

    ??? <property name="dataSource" ref="dataSource"/>

    ??? <property name="configLocations">

    ????? <value>chapter7/spring/hibernate/hibernate.cfg.xml</value>

    ??? </property>

    <!--??? <property name="mappingResources">-->

    <!--????? <list>-->

    <!--??????? <value>chapter7/hibernate/domain/Category.hbm.xml</value>-->

    <!--??????? <value>chapter7/hibernate/domain/Product.hbm.xml</value>-->

    <!--????? </list>-->

    <!--??? </property>-->

    <!--??? <property name="hibernateProperties">-->

    <!--????? <props>-->

    <!--??????? <prop key="hibernate.dialect">

    ???????????????? org.hibernate.dialect.PostgreSQLDialect

    ?????????????? </prop>-->

    <!--??????? <prop key="show_sql">true</prop>-->

    <!--??????? <prop key="hbm2ddl.auto">create</prop>-->

    <!--????? </props>-->

    <!--??? </property>-->

    </bean>

    </beans>

    可以發現,從代碼10.19抽離出的數據源,現在換成了ApacheDBCP連接池。當然,也可以換作其他實現,比如從一個JNDI上獲取的數據源:

    <bean id="dataSource"

    class="org.springframework.jndi.JndiObjectFactoryBean">

    ??? <property name="jndiName" value="java:comp/env/jdbc/myds"/>

    </bean>

    Spring提供了LocalSessionFactoryBean來創建本地的Hibernate SessionFactory,這就類似于上節中介紹的SqlMapClientFactoryBean(它用以創建IBatisSqlMap)。當然也可以創建綁定在JNDI上的SessionFactory,不過這通常只在EJB環境下使用。

    注意:代碼10.20中被注釋掉的部分,如果不使用LocalSessionFactoryBeanconfigLocations屬性讀取Hibernate的原生配置文件,可由SpringLocalSessionFactoryBean負責配置Hibernate,它和hibernate.cfg.xml的作用完全一致,這時候就不需要Hibernate的原生配置了。

    posted @ 2009-07-27 01:50 jadmin 閱讀(90) | 評論 (0)編輯 收藏

    Spring提供了一個很實用的工具,可以讓Web應用靈活配置log4j,這個工具類是:

    org.springframework.web.util.Log4jConfigListener

    org.springframework.web.util.Log4jConfigServlet

    由于:

    Note that this class has been deprecated for containers implementing
    Servlet API 2.4 or higher, in favor of
    {@linkLog4jConfigListener}.</i><br>
    According to Servlet 2.4, listeners must be initialized before load-on-startup
    servlets. Many Servlet 2.3 containers already enforce this behavior
    (see ContextLoaderServlet javadocs for details). If you use such a container,
    this servlet can be replaced with Log4jConfigListener.

    建議使用org.springframework.web.util.Log4jConfigListener,而非org.springframework.web.util.Log4jConfigServlet,下面來說下Log4jConfigListener的用法:

    其實很簡單,只要在web.xml文件中配置相關參數和注冊此監聽器即可,下面是相應的配置片段:

    <!-- 配置log4j配置文件的路徑,可以是xml或 properties文件(此參數必須配)-->
    <context-param>
    ?? <param-name>log4jConfigLocation</param-name>
    ?? <param-value>WEB-INF/log4j.properties</param-value>
    </context-param>

    <!-- 每隔多少毫秒掃描一下配置文件的變化(此參數可選配) -->
    <context-param>
    ?? <param-name>log4jRefreshInterval</param-name>
    ?? <param-value>60000</param-value>
    </context-param>

    <!-- spring框架默認定義webAppRootKey的值為webapp.root,若不配此參數默認值就是webapp.root(因此,此參數可選配) -->
    <context-param>
    ?? <param-name>webAppRootKey</param-name>
    ?? <param-value>home</param-value>
    </context-param>

    <listener>
    ?? <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

    這樣就可以在log4j的配置中如下進行了:

    log4j.appender.DailyLog=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.DailyLog.File=${home}/WEB-INF/logs/log4j.log
    log4j.appender.DailyLog.Append=false
    log4j.appender.DailyLog.DatePattern='.'yyyy-MM-dd
    log4j.appender.DailyLog.layout=org.apache.log4j.PatternLayout
    log4j.appender.DailyLog.layout.ConversionPattern=%p %d [%l]%n??? - %m%n

    posted @ 2009-07-25 03:34 jadmin 閱讀(164) | 評論 (0)編輯 收藏
    僅列出標題
    共50頁: First 上一頁 9 10 11 12 13 14 15 16 17 下一頁 Last 
    主站蜘蛛池模板: 亚洲国产一区二区三区| 亚洲色偷偷偷网站色偷一区| 你好老叔电影观看免费| 1区1区3区4区产品亚洲| 四虎成人免费网站在线| 大地资源在线资源免费观看| 亚洲午夜精品在线| 免费在线看片网站| 在线观看免费中文视频| 精品亚洲成A人在线观看青青| 国产AV无码专区亚洲AV男同| 女人张腿给男人桶视频免费版| 国产在线播放线91免费 | 亚洲日产2021三区在线| 四虎国产精品免费视| 久久国产精品成人片免费| 女bbbbxxxx另类亚洲| 亚洲日本在线观看网址| 国产精品亚洲美女久久久| 亚洲天堂免费在线| 国产免费久久久久久无码| 最新亚洲精品国偷自产在线| 国产成人亚洲综合色影视| 免费一级肉体全黄毛片| 1000部拍拍拍18勿入免费视频下载| 搜日本一区二区三区免费高清视频 | 亚洲精品国产第一综合99久久| 国产亚洲精品国产| www亚洲精品少妇裸乳一区二区| 国产免费不卡视频| 免费看男人j放进女人j免费看| 婷婷国产偷v国产偷v亚洲| 亚洲午夜精品一区二区公牛电影院 | 69式国产真人免费视频| 精品四虎免费观看国产高清午夜| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲AV无码专区亚洲AV伊甸园| 免费一级黄色毛片| 热99re久久精品精品免费| 中文字幕无码成人免费视频| 香蕉免费一区二区三区|