亚洲a∨无码男人的天堂,国产AV旡码专区亚洲AV苍井空,亚洲欧洲自拍拍偷精品 美利坚http://www.tkk7.com/lzj520/category/15621.htmlzh-cnWed, 19 Mar 2008 05:37:37 GMTWed, 19 Mar 2008 05:37:37 GMT60spring中連接池的配置http://www.tkk7.com/lzj520/archive/2008/03/19/187211.htmllzj520lzj520Wed, 19 Mar 2008 04:09:00 GMThttp://www.tkk7.com/lzj520/archive/2008/03/19/187211.htmlhttp://www.tkk7.com/lzj520/comments/187211.htmlhttp://www.tkk7.com/lzj520/archive/2008/03/19/187211.html#Feedback0http://www.tkk7.com/lzj520/comments/commentRss/187211.htmlhttp://www.tkk7.com/lzj520/services/trackbacks/187211.html在默認通過myeclipse生成的配置里,spring使用的是apache的dbcp連接池

<bean id="dataSource"
  class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName"
   value="com.mysql.jdbc.Driver">
  </property>
  <property name="url"
   value="jdbc:mysql://localhost:3306/mysql">
  </property>
  <property name="username" value="root"></property>
  <property name="password" value="root"></property>
 </bean>

如果改為C3P0則為:

<bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location">
            <value>classpath:jdbc.properties</value>
        </property>
    </bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUrl" value="${jdbc.url}" />
        <property name="user" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="autoCommitOnClose" value="true"/>
        <property name="checkoutTimeout" value="${cpool.checkoutTimeout}"/>
        <property name="initialPoolSize" value="${cpool.minPoolSize}"/>
        <property name="minPoolSize" value="${cpool.minPoolSize}"/>
        <property name="maxPoolSize" value="${cpool.maxPoolSize}"/>
        <property name="maxIdleTime" value="${cpool.maxIdleTime}"/>
        <property name="acquireIncrement" value="${cpool.acquireIncrement}"/>
        <property name="maxIdleTimeExcessConnections" value="${cpool.maxIdleTimeExcessConnections}"/>
    </bean>
jdbc.properties:

# Database URL
jdbc.url=jdbc:mysql://192.168.0.25"3306/db

# Database login information
jdbc.username=root
jdbc.password=

# Time to wait for an open connection before timing out
# (in milliseconds)
cpool.checkoutTimeout=5000

# Connection pool size
cpool.minPoolSize=5
cpool.maxPoolSize=40

# How long to keep unused connections around(in seconds)
# Note: MySQL times out idle connections after 8 hours(28,800 seconds)
# so ensure this value is below MySQL idle timeout
cpool.maxIdleTime=25200

# How long to hang on to excess unused connections after traffic spike
# (in seconds)
cpool.maxIdleTimeExcessConnections=1800

# Acquiring new connections is slow, so eagerly retrieve extra connections
# when current pool size is reached
cpool.acquireIncrement=5

或者將上面的3部分寫成一個:
<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
      <property name="driverClass">
        <value>${jdbc.driverClassName}</value>
      </property>
      <property name="jdbcUrl">
        <value>${jdbc.url}</value>
      </property>
      <property name="user">
       <value>${jdbc.username}</value>
      </property>
      <property name="password">
       <value>${jdbc.password}</value>
      </property>
      <property name="initialPoolSize"><value>10</value></property>
      <property name="minPoolSize"><value>5</value></property>
      <property name="maxPoolSize"><value>30</value></property>
      <property name="acquireIncrement"><value>5</value></property>
      <property name="maxIdleTime"><value>10</value></property>
      <property name="maxStatements"><value>0</value></property>
    </bean>

如果使用的是受管理的J2EE服務器,則在spring中配置為JNDI連接:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jndi/xxx</value>
</property>
</bean>

如果在應用里有獨自使用hibernate,則在spring中配置hibernate連接池,使用C3P0如下:
<bean   id="DataSource"  
  class="org.apache.commons.dbcp.BasicDataSource">  
  <property   name="driverClassName">  
  <value>oracle.jdbc.driver.OracleDriver</value>  
  </property>  
  <property   name="url">  
  <value>jdbc:oracle:thin:@172.16.20.241:1521:dbsvr</value>  
  </property>  
  <property   name="username">  
  <value>hl3000</value>  
  </property>  
  <property   name="password">  
  <value>hldw3101</value>  
  </property>  
  </bean>  
  <bean   id="SessionFactory"  
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  <property   name="dataSource">  
  <ref   bean="DataSource"   />  
  </property>  
  <property   name="hibernateProperties">  
  <props>  
  <prop   key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>  
  <prop   key="hibernate.show_sql">true</prop>  
   
  <!--   C3P0連接池配置   -->  
  <prop   key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>  
  <prop   key="hibernate.c3p0.max_size">20</prop>  
  <prop   key="hibernate.c3p0.min_size">5</prop>  
  <prop   key="hibernate.c3p0.timeout">120</prop>  
  <prop   key="hibernate.c3p0.max_statements">100</prop>  
  <prop   key="hibernate.c3p0.idle_test_period">120</prop>  
  <prop   key="hibernate.c3p0.acquire_increment">2</prop>  
  <prop   key="myeclipse.connection.profile">hl3000</prop>  
  </props>  
  </property>  
  <property   name="mappingResources">  
  <list>  
  <value>com/hl3000/DBLogic/POJO/PermUserAccount.hbm.xml</value>  
  </list>  
  </property>  
  </bean> 

spring中配置獨立使用hibernate時使用jndi的配置:

hibernate.dialect = net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.datasource=java:comp/env/jdbc/SAMPLEDB
hibernate.show_sql=true

如果是使用不受管理的Servlet容器如Tomcat,也可以使用jndi的方式配置,需要在tomcat中配置數據源,在server.xml中增改大致如下:

     <Resource name="jdbc/testDb" auth="Container"
                    type="javax.sql.DataSource"/>
          <ResourceParams name="jdbc/testDB">\\數據源的名稱
            <parameter><name>username</name><value>root</value></parameter>數據庫的名稱
            <parameter><name>password</name><value>password</value></parameter>數據庫密碼
            <parameter><name>driverClassName</name>
              <value>org.gjt.mm.mysql.Driver</value></parameter>\\要加載的驅動
            <parameter><name>url</name>
              <value>jdbc:mysql://172.20.0.73/rk?</value></parameter>\\要連接的URL
          </ResourceParams>



lzj520 2008-03-19 12:09 發表評論
]]>
acegi step by step 2http://www.tkk7.com/lzj520/archive/2008/03/05/184017.htmllzj520lzj520Wed, 05 Mar 2008 07:52:00 GMThttp://www.tkk7.com/lzj520/archive/2008/03/05/184017.htmlhttp://www.tkk7.com/lzj520/comments/184017.htmlhttp://www.tkk7.com/lzj520/archive/2008/03/05/184017.html#Feedback0http://www.tkk7.com/lzj520/comments/commentRss/184017.htmlhttp://www.tkk7.com/lzj520/services/trackbacks/184017.html在配置好acegi的那些filter之類什么的之后,建立index.jsp、login.jsp、order/authorizeOrder.jsp、order/createOrder.jsp文件,按照之前的配置,權限分配是:
    /index.jsp=ROLE_ADMIN,ROLE_TECHNICIAN
    /order/createOrder.jsp=ROLE_TECHNICIAN
    /order/authorizeOrder.jsp=ROLE_ADMIN
    /login.jsp=ROLE_ANONYMOUS,ROLE_TECHNICIAN,ROLE_ADMIN

login.jsp的form:

<form action="<c:url value='j_acegi_security_check'/>" method="POST">
<table width=50% border=0 align="center">
 <tr>
  <td>User:</td>
  <td><input type='text' name='j_username'
   </td>
 </tr>
 <tr>
  <td>Password:</td>
  <td><input type='password' name='j_password'></td>
 </tr>

 <tr>
  <td colspan='2'><input name="submit" type="submit">&nbsp;
  <input name="reset" type="reset" value="Clear"></td>
 </tr>
</table>
</div>
</div>
</form>


使用相應的用戶名登錄后即可有相應的權限,否則重新轉到登錄頁面。



lzj520 2008-03-05 15:52 發表評論
]]>
acegi step by step 1http://www.tkk7.com/lzj520/archive/2008/02/28/182761.htmllzj520lzj520Thu, 28 Feb 2008 09:54:00 GMThttp://www.tkk7.com/lzj520/archive/2008/02/28/182761.htmlhttp://www.tkk7.com/lzj520/comments/182761.htmlhttp://www.tkk7.com/lzj520/archive/2008/02/28/182761.html#Feedback0http://www.tkk7.com/lzj520/comments/commentRss/182761.htmlhttp://www.tkk7.com/lzj520/services/trackbacks/182761.html一、環境設定:

相關jar:

acegi-security-1.0.5.jar - Main classes of the Acegi Security system
cglib-2.1.3.jar - Code-generation library used by Spring
commons-codec-1.3.jar - Encoders and decoders such as Base64, Hex, Phonetic, and URLs
commons-lang-2.1.jar - Helper utilities for java.lang APIs
ehcache-1.2.3.jar - Used for basic caching purposes
freemarker-2.3.8.jar - Used by the Struts implementation
jstl.jar, standard.jar - JavaServer Pages Standard Tag Library (JSTL) tag library
log4j-1.2.13.jar - For logging
ognl-2.6.11.jar - OGNL library used by the Struts implementation
sitemesh-2.3.jar - SiteMesh JAR
spring.jar - Spring Framework JAR
struts2-core-2.0.8.jar - Struts 2 core JAR
xwork-2.0.3.jar - Used by Struts

修改web.xml:

作用是利用spring AOP將filter Proxy到web.xml里去,并攔截相關的request

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
  version="2.4">
  <display-name>AcegiTraining</display-name>
  <context-param>

    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext*.xml</param-value>
  </context-param>
  <filter>
    <filter-name>Acegi Filter Chain Proxy</filter-name>

    <filter-class>
      org.acegisecurity.util.FilterToBeanProxy
    </filter-class>
    <init-param>
      <param-name>targetClass</param-name>
      <param-value>

        org.acegisecurity.util.FilterChainProxy
      </param-value>
    </init-param>
  </filter>
  ...
  ...
  <filter-mapping>
    <filter-name>Acegi Filter Chain Proxy</filter-name>

    <url-pattern>/j_acegi_security_check</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>Acegi Filter Chain Proxy</filter-name>
    <url-pattern>/j_acegi_logout</url-pattern>

  </filter-mapping>
  <filter-mapping>
    <filter-name>Acegi Filter Chain Proxy</filter-name>
    <url-pattern>*.action</url-pattern>
  </filter-mapping>

  <filter-mapping>
    <filter-name>Acegi Filter Chain Proxy</filter-name>
    <url-pattern>*.jsp</url-pattern>
  </filter-mapping>
  ...

</web-app>


二、身份驗證

WEB-INF下增加applicationContext-acegi-security.xml文件,并增加驗證服務所需要的filter:

web.xml中的FilterToBeanProxy將攔截的內容:

<bean id="filterChainProxy"
    class="org.acegisecurity.util.FilterChainProxy">

    <property name="filterInvocationDefinitionSource">
      <value>
        CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
        PATTERN_TYPE_APACHE_ANT
        /j_acegi_security_check*=httpSessionContextIntegrationFilter,authenticationProcessingFilter
        /**/*=httpSessionContextIntegrationFilter,logoutFilter,
authenticationProcessingFilter,securityContextHolderAwareRequestFilter,
anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
      </value>
    </property>

  </bean>

如果未經過允許的請求,將會由exceptionTranslationFilter處理,將頁面轉到注冊頁面處去處理,authenticationProcessingFilterEntryPoint,是身份驗證的入口:

                       
<bean id="exceptionTranslationFilter"
  class="org.acegisecurity.ui.ExceptionTranslationFilter">
  <property name="authenticationEntryPoint">
    <ref local="authenticationProcessingFilterEntryPoint" />
  </property>

  ...
</bean>

<bean id="authenticationProcessingFilterEntryPoint"
  class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
  <property name="loginFormUrl">
    <value>/login.jsp</value>
  </property>

  <property name="forceHttps">
    <value>false</value>
</bean>


authenticationProcessingFilter就是進行身份驗證所用到的的filter,其主要是依靠authenticationManager來進行數據庫或文本文件上存放的注冊信息來進行核對:

<bean id="authenticationProcessingFilter"
  class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
  <property name="authenticationManager">
    <ref bean="authenticationManager" />
  </property>

  <property name="authenticationFailureUrl">
    <value>/login.jsp?login_error=1</value>
  </property>
  <property name="defaultTargetUrl">
    <value>/</value>

  </property>
  <property name="filterProcessesUrl">
     <value>/j_acegi_security_check</value>
  </property>
</bean>


<bean id="authenticationManager"
  class="org.acegisecurity.providers.ProviderManager">
  <property name="providers">

    <list>
      <ref local="daoAuthenticationProvider" />
      <ref local="anonymousAuthenticationProvider" />
    </list>
  </property>
</bean>


<bean id="daoAuthenticationProvider"
    class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
    <property name="userDetailsService"/><ref local="userDetailsService"/></property>
    <property name="userCache">

    ...
    </property>
  </bean>
 
  <bean id="userDetailsService"
    class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
    <property name="userProperties">
      <bean
        class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="location"
          value="/WEB-INF/users.properties" />

      </bean>
    </property>
  </bean>


users.properties:
james=tom@1231,ROLE_TECHNICIAN
krishna=krish2341,ROLE_TECHNICIAN
smith=pravah@001,ROLE_ADMIN

三、權限驗證

在身份驗證后,通過權限驗證來決定哪些資源由擁有哪些權限的用戶使用,httpRequestAccessDecisionManager控制投票方式,exceptionTranslationFilter增加了如果權限驗證失敗后所轉到的處理頁面,logoutFilter定義登出后轉到首頁:

<bean id="filterInvocationInterceptor"
  class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
  <property name="authenticationManager">
    <ref bean="authenticationManager" />
  </property>
  <property name="accessDecisionManager">

    <ref local="httpRequestAccessDecisionManager" />
  </property>
  <property name="objectDefinitionSource">
    <value>
      PATTERN_TYPE_APACHE_ANT
    /index.jsp=ROLE_ADMIN,ROLE_TECHNICIAN
    /order/createOrder.jsp=ROLE_TECHNICIAN
    /order/authorizeOrder.jsp=ROLE_ADMIN
    /login.jsp=ROLE_ANONYMOUS,ROLE_TECHNICIAN,ROLE_ADMIN
    </value>
  </property>

</bean>

<bean id="exceptionTranslationFilter"
    class="org.acegisecurity.ui.ExceptionTranslationFilter">
    <property name="authenticationEntryPoint">
      <ref local="authenticationProcessingFilterEntryPoint" />
    </property>

    <property name="accessDeniedHandler">
      <bean
        class="org.acegisecurity.ui.AccessDeniedHandlerImpl">
        <property name="errorPage" value="/accessDenied.jsp" />
      </bean>
    </property>
  </bean>


<bean id="httpRequestAccessDecisionManager"
    class="org.acegisecurity.vote.AffirmativeBased">
    <property name="allowIfAllAbstainDecisions">
      <value>false</value>

    </property>
    <property name="decisionVoters">
      <list>
        <ref bean="roleVoter" />
      </list>
    </property>

  </bean>
  <bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter" />

<bean id="logoutFilter"
  class="org.acegisecurity.ui.logout.LogoutFilter">
  <constructor-arg value="/index.jsp" />
  <!-- URL redirected to after logout -->
  <constructor-arg>

    <list>
      <bean
        class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler" />
    </list>
  </constructor-arg>
</bean>


至此,acegi配置部分完成,剩下相關頁面設計部分。

lzj520 2008-02-28 17:54 發表評論
]]>
SSH集成Fckeditorhttp://www.tkk7.com/lzj520/archive/2008/01/31/178672.htmllzj520lzj520Thu, 31 Jan 2008 06:24:00 GMThttp://www.tkk7.com/lzj520/archive/2008/01/31/178672.htmlhttp://www.tkk7.com/lzj520/comments/178672.htmlhttp://www.tkk7.com/lzj520/archive/2008/01/31/178672.html#Feedback0http://www.tkk7.com/lzj520/comments/commentRss/178672.htmlhttp://www.tkk7.com/lzj520/services/trackbacks/178672.html
去下載了FCKeditor_2.5.1.zip和FCKeditor-2.3.zip,一個是JAVA版本的文件,一個是FCK原本的文件。擺放的方式大概如下圖:


web.xml加入代碼:

 <!-- fckeditor -->

  <servlet>

        <servlet-name>Connector</servlet-name>
        <servlet-class>com.fredck.FCKeditor.connector.ConnectorServlet</servlet-class>
        <init-param>
            <param-name>baseDir</param-name>
            <!-- 此為文件瀏覽路徑 -->
            <param-value>/UserFiles/</param-value>
        </init-param>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>SimpleUploader</servlet-name>
        <servlet-class>com.fredck.FCKeditor.uploader.SimpleUploaderServlet</servlet-class>
        <init-param>
            <param-name>baseDir</param-name>
            <!-- 此為文件上傳路徑,需要在WebRoot 目錄下新建 UserFiles 文件夾 -->
            <!-- 根據文件的類型還需要新建相關的文件夾 Image、 Flash -->
            <param-value>/UserFiles/</param-value>
        </init-param>

        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>

            <!-- 此參數為是否開啟上傳功能 -->
            <param-name>enabled</param-name>
            <param-value>false</param-value>
        </init-param>

        <init-param>
            <param-name>AllowedExtensionsFile</param-name>
            <param-value></param-value>
        </init-param>

        <init-param>
            <!-- 此參數為文件過濾,以下的文件類型都不可以上傳 -->
            <param-name>DeniedExtensionsFile</param-name>
            <param-value>php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi</param-value>
        </init-param>

        <init-param>
            <param-name>AllowedExtensionsImage</param-name>
            <param-value>jpg|gif|jpeg|png|bmp</param-value>
        </init-param>

        <init-param>
            <param-name>DeniedExtensionsImage</param-name>
            <param-value></param-value>
        </init-param>

        <init-param>
            <param-name>AllowedExtensionsFlash</param-name>
            <param-value>swf|fla</param-value>
        </init-param>

        <init-param>
            <param-name>DeniedExtensionsFlash</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>  

  <servlet-mapping>
    <servlet-name>Connector</servlet-name>
    <url-pattern>/FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>SimpleUploader</servlet-name>
    <url-pattern>/FCKeditor/editor/filemanager/upload/simpleuploader</url-pattern>
  </servlet-mapping>

輸入的jsp文件類似如下:

  <html:form action="/fck" method="post">
    <fck:editor id = "fcktext" basePath = "/new1/FCKeditor/"
    height = "100%"
    skinPath = "/new1/FCKeditor/editor/skins/default/"
    toolbarSet = "Default"
        imageBrowserURL = "/new1/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector"
        linkBrowserURL = "/new1/FCKeditor/editor/filemanager/browser/default/browser.html?Connector=connectors/jsp/connector"
        flashBrowserURL = "/new1/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/jsp/connector"
    imageUploadURL = "/new1/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Image"
       linkUploadURL = "/new1/FCKeditor/editor/filemanager/upload/simpleuploader?Type=File"
       flashUploadURL = "/new1/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Flash" >
    </fck:editor>
    <html:submit/><html:cancel/>
    </html:form>

其中的id是對應于ActionForm與validationv.xml里的property。分別類似如下:

  String strfcktext = fckForm.getString("fcktext");

<form name="fckForm">
        <field property="fcktext" depends="required">
       <arg key="fckForm.fcktext"/>    
       </field>  
   </form>

另外需要注意的是,如果顯示找不到頁面的錯誤,應該是form里FCK相關的路徑設置不正確。數據庫段的字段也需要設置足夠大。如果傳輸過程里出現亂碼,可以所有jsp頁面加入:<%@ page language="java" contentType="text/html; charset=UTF-8"%>,在web.xml里加入u-f8 filter:

<!-- u-f8 filter -->
  <filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
 </filter>

 <filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>*.do</url-pattern>
 </filter-mapping>

 <filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>*.jsp</url-pattern>
 </filter-mapping>



lzj520 2008-01-31 14:24 發表評論
]]>
Struts+spring使用隨機驗證碼http://www.tkk7.com/lzj520/archive/2008/01/18/176261.htmllzj520lzj520Fri, 18 Jan 2008 08:09:00 GMThttp://www.tkk7.com/lzj520/archive/2008/01/18/176261.htmlhttp://www.tkk7.com/lzj520/comments/176261.htmlhttp://www.tkk7.com/lzj520/archive/2008/01/18/176261.html#Feedback0http://www.tkk7.com/lzj520/comments/commentRss/176261.htmlhttp://www.tkk7.com/lzj520/services/trackbacks/176261.htmlstruts-config.xml

    <form-bean name="checkForm" type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="rand" type="java.lang.String" />
    </form-bean>
    <action
      attribute="checkForm"
      input="/check/check.jsp"
      name="checkForm"
      path="/check"
      scope="request"
      validate="true"
      type="com.yourcompany.struts.action.CheckAction">
      <forward name="ok" path="/check/checkok.jsp" />
    </action>

validation.xml

   <form name="checkForm">
        <field property="rand" depends="required">
       <arg key="checkForm.rand"/>    
       </field>  
   </form>

spring config

<bean name="/check" class="com.yourcompany.struts.action.CheckAction"/>

checkAction.java

public class CheckAction extends Action {
 /*
  * Generated Methods
  */

 /**
  * Method execute
  * @param mapping
  * @param form
  * @param request
  * @param response
  * @return ActionForward
  */
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  DynaValidatorForm checkForm = (DynaValidatorForm) form;// TODO Auto-generated method stub
        /*HttpSession session=request.getSession();
        String strrand = (String)session.getAttribute("rand");
        session.setAttribute("rand", strrand);*/
  return mapping.findForward("ok");
 }
}

check.jsp

<%@ page language="java" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
 
<html>
 <head>
  <title>JSP for DynaValidatorForm form</title>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
  <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
  <META HTTP-EQUIV="Expires" CONTENT="0">
 </head>
 <body>
  <html:form action="/check">
  <td><img border=0 src="check/image.jsp"></td>
  <html:text property="rand"/><html:errors property="rand"/><br/>
   <html:submit/><html:cancel/>
  </html:form>
 </body>
</html>

 

checkok.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>  
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  </head>
  <body>
<%
 String rand = (String)session.getAttribute("rand");
 String input = request.getParameter("rand");
  if (rand.equals(input)) {
%>
<font color=green>OK</font>
<%
  } else {
%>
<font color=red>FAIL</font>
<%
  }
%>
  </body>
</html>

image.jsp

<%@ page language="java" import="java.util.*" %>
<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,javax.imageio.*" %>
<%@ page import="java.io.OutputStream" %>
<%!
Color getRandColor(int fc,int bc){
        Random random = new Random();
        if(fc>255) fc=255;
        if(bc>255) bc=255;
        int r=fc+random.nextInt(bc-fc);
        int g=fc+random.nextInt(bc-fc);
        int b=fc+random.nextInt(bc-fc);
        return new Color(r,g,b);
        }
%>
<%
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);

int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
OutputStream os=response.getOutputStream();
Graphics g = image.getGraphics();

Random random = new Random();


g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);

g.setFont(new Font("Times New Roman",Font.PLAIN,18));

g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
 int x = random.nextInt(width);
 int y = random.nextInt(height);
        int xl = random.nextInt(12);
        int yl = random.nextInt(12);
 g.drawLine(x,y,x+xl,y+yl);
}

String sRand="";
for (int i=0;i<4;i++){
    String rand=String.valueOf(random.nextInt(10));
    sRand+=rand;

    g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
    g.drawString(rand,13*i+6,16);
}

session.setAttribute("rand",sRand);

g.dispose();

ImageIO.write(image, "JPEG",os);
os.flush();
os.close();
os=null;
response.flushBuffer();
out.clear();
out = pageContext.pushBody();
%>



lzj520 2008-01-18 16:09 發表評論
]]>
ssh上傳并顯示圖片http://www.tkk7.com/lzj520/archive/2008/01/17/176020.htmllzj520lzj520Thu, 17 Jan 2008 09:44:00 GMThttp://www.tkk7.com/lzj520/archive/2008/01/17/176020.htmlhttp://www.tkk7.com/lzj520/comments/176020.htmlhttp://www.tkk7.com/lzj520/archive/2008/01/17/176020.html#Feedback0http://www.tkk7.com/lzj520/comments/commentRss/176020.htmlhttp://www.tkk7.com/lzj520/services/trackbacks/176020.html
struts部分:

 <form-bean name="upfileForm" type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="filename" type="java.lang.String" />
      <form-property name="filedata" type="org.apache.struts.upload.FormFile" />
    </form-bean>

    <action
      attribute="upfileForm"
      input="/upload/uploadfile.jsp"
      name="upfileForm"
      path="/upfile"
      scope="request"
      validate="true"
      type="com.yourcompany.struts.action.UpfileAction">
      <forward name="ok" path="/upload/ok.jsp" />
    </action>

    <action path="/displayimg" type="com.yourcompany.struts.action.DisplayimgAction">
      <forward name="ok" path="/upload/displayimg.jsp" />
    </action>

 

public class UpfileAction extends Action {
 /*
  * Generated Methods
  */

 /**
  * Method execute
  * @param mapping
  * @param form
  * @param request
  * @param response
  * @return ActionForward
  */
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  DynaActionForm upfileForm = (DynaActionForm) form;// TODO Auto-generated method stub  
   Image image = new Image();

   String strimgname = upfileForm.getString("filename");
   image.setImgname(strimgname);
   imageDAO.save(image); 
  FormFile filedata = (FormFile)upfileForm.get("filedata");
   ServletContext servletContext = this.getServlet().getServletContext();
   String filePath = servletContext.getRealPath("/");
   try {
    InputStream stream = filedata.getInputStream();
    OutputStream bos = new FileOutputStream(filePath + "/image/" + filedata.getFileName());
     int bytesRead = 0;
             byte[] buffer = new byte[8192];
             while ( (bytesRead = stream.read(buffer, 0, 8192)) != -1) {
             bos.write(buffer, 0, bytesRead);
             }
             bos.close();
             stream.close();
   }catch (FileNotFoundException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         return mapping.findForward("ok");
 }
 
 private ImageDAO imageDAO;
 public void setImageDAO(ImageDAO dao){
  this.imageDAO = dao;  
 }
 
}


 

public class DisplayimgAction extends Action {
 /*
  * Generated Methods
  */

 /**
  * Method execute
  * @param mapping
  * @param form
  * @param request
  * @param response
  * @return ActionForward
  */
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  // TODO Auto-generated method stub
  List results = imageDAO.findAll();
  if(results!=null){
   HttpSession session=request.getSession();
            session.setAttribute("results",results);
            return mapping.findForward("ok");
  }return mapping.findForward("fail");
 }
 
 private ImageDAO imageDAO;
 public void setImageDAO(ImageDAO dao){
  this.imageDAO = dao;  
 }
 
}


ImageDAO.java

 public void save(Image transientInstance) {
     Session session =this.getSession();
     Transaction tx = null;
     tx = session.beginTransaction();
     session.save(transientInstance);
     tx.commit();
     session.evict(transientInstance);
 }

 public List findAll() {
  Session session =this.getSession();
  Query query = session.createQuery("from Image");
  return query.list();
 }

displayimg.jsp

<logic:iterate id="element" name="results">
    <tr>
   <td width="100"><bean:write name="element" property="id"/> </td>
   <td width="100"><img  src="image/<bean:write  name='element' property='imgname'/>"/></td>
   </tr>
</logic:iterate>

uploadfile.jsp

<html:form action="/upfile" enctype = "multipart/form-data">
   filename : <html:text  property="filename"/><html:errors property="filename"/><br/>
   filedata : <html:file property="filedata"/><html:errors property="filedata"/><br/>
   <html:submit/><html:cancel/>
  </html:form>

<!-- u-f8 filter -->
  <filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
 </filter>

 <filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>*.do</url-pattern>
 </filter-mapping>

 <filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>*.jsp</url-pattern>
 </filter-mapping>



lzj520 2008-01-17 17:44 發表評論
]]>
CharacterEncodingFilterhttp://www.tkk7.com/lzj520/archive/2008/01/15/175360.htmllzj520lzj520Tue, 15 Jan 2008 01:36:00 GMThttp://www.tkk7.com/lzj520/archive/2008/01/15/175360.htmlhttp://www.tkk7.com/lzj520/comments/175360.htmlhttp://www.tkk7.com/lzj520/archive/2008/01/15/175360.html#Feedback0http://www.tkk7.com/lzj520/comments/commentRss/175360.htmlhttp://www.tkk7.com/lzj520/services/trackbacks/175360.html <filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
 </filter>

 <filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>*.do</url-pattern>
 </filter-mapping>

 <filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>*.jsp</url-pattern>
 </filter-mapping>



lzj520 2008-01-15 09:36 發表評論
]]>
SSH發送郵件的代碼http://www.tkk7.com/lzj520/archive/2008/01/14/175271.htmllzj520lzj520Mon, 14 Jan 2008 10:10:00 GMThttp://www.tkk7.com/lzj520/archive/2008/01/14/175271.htmlhttp://www.tkk7.com/lzj520/comments/175271.htmlhttp://www.tkk7.com/lzj520/archive/2008/01/14/175271.html#Feedback0http://www.tkk7.com/lzj520/comments/commentRss/175271.htmlhttp://www.tkk7.com/lzj520/services/trackbacks/175271.html
serviceContext-moudle_sendmail.xml:

<beans>
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
      <property name="host" >
     <value>smtp.gmail.com</value>
    </property>
  <property name="javaMailProperties">
 <props>
 <prop key="mail.smtp.auth">true</prop>
   <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
    <prop key="mail.smtp.socketFactory.fallback">false</prop>
 <prop key="mail.smtp.timeout">25000</prop>
 </props>
 </property>
 <property name="port">
        <value>465</value>
        </property>
 <property name="username">
 <value>your_name@gmail.com</value>
 </property>
 <property name="password">
  <value>your_password</value>
 </property>  
 </bean>
   
    <bean id ="enrollmentMailMessage" class="org.springframework.mail.SimpleMailMessage">
    <property name="to">
     <value>abc@21cn.com</value>
    </property>
    <property name="from">
     <value>your_name@gmail.com</value>
    </property>
    <property name="subject">
     <value>spring mail test</value>
    </property>
    </bean>
   
 <bean id="SendMail" class="com.yourcompany.service.SendMailImpl">
 <property name="mailMessage">
     <ref bean="enrollmentMailMessage"/>
    </property>
 <property name="mailSender">
     <ref bean="mailSender"/>
    </property>   
 </bean>
</beans>

SendMailAction.java

public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  DynaActionForm sendMailForm = (DynaActionForm) form;// TODO Auto-generated method stub
  String strcontent = sendMailForm.getString("content");
  sendMail.sendmail(strcontent);
  return mapping.findForward("ok");
 }
 private SendMail sendMail;
 public void setSendMail(SendMail dao){
  this.sendMail = dao;  
 }

SendMail.java

public interface SendMail {
 public void sendmail(String content);
}

SendMailImpl.java

public class SendMailImpl implements SendMail {
private MailSender mailSender;
public void setMailSender(MailSender mailSender){
 this.mailSender = mailSender;
}
 private SimpleMailMessage mailMessage;
 public void setMailMessage(SimpleMailMessage mailMessage){
  this.mailMessage = mailMessage;
 }

 public void sendmail(String content){
  SimpleMailMessage message = new SimpleMailMessage(this.mailMessage);
  StringBuffer messageText = new StringBuffer();
  messageText.append(content);
  message.setText(messageText.toString());
  mailSender.send(message);
 }
}


struts-config.xml

    <form-bean name="sendMailForm" type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="content" type="java.lang.String" />
    </form-bean>

    <action
      attribute="sendMailForm"
      input="/sendmail/SendMail.jsp"
      name="sendMailForm"
      path="/sendMail"
      scope="request"
      validate="true"
      type="com.yourcompany.struts.action.SendMailAction" >
      <forward name="ok" path="/sendmail/SendMailOk.jsp" />
    </action>

SendMail.jsp

  <html:form action="/sendMail">
   content : <html:text property="content"/><html:errors property="content"/><br/>
   <html:submit/><html:cancel/>
  </html:form>

validation.xml

   </form>
     <form name="sendMailForm">
     <field property="content" depends="required">
       <arg key="sendMailForm.content"/>    
       </field>      
   </form>

lzj520 2008-01-14 18:10 發表評論
]]>
自己寫了一個ssh分頁http://www.tkk7.com/lzj520/archive/2008/01/10/174373.htmllzj520lzj520Thu, 10 Jan 2008 10:55:00 GMThttp://www.tkk7.com/lzj520/archive/2008/01/10/174373.htmlhttp://www.tkk7.com/lzj520/comments/174373.htmlhttp://www.tkk7.com/lzj520/archive/2008/01/10/174373.html#Feedback2http://www.tkk7.com/lzj520/comments/commentRss/174373.htmlhttp://www.tkk7.com/lzj520/services/trackbacks/174373.html
首先,先創建一個顯示每一頁(有若干條數據)的方法(如下面的hfindAll方法),決定好每一頁接收一個頁碼參數,然后顯示該頁碼里的數據。比如有100條數據,那么分10頁,那第幾頁顯示第幾條至第幾條數據。然后再創建一個方法是用于在view層顯示頁數(如下面的amountPage方法),最后是在view層上為每一頁數的數字加上超鏈接。

以下是主要代碼:
public class LoginDAO extends HibernateDaoSupport {
private int PageSize =5;
/*設置每頁的數據條數*/

 public Integer amountPage(){
     Session session =this.getSession();
  Query query = session.createQuery("from Login");
  query.setCacheable(true);
  int a = query.list().size()%PageSize;
/*總記錄數/每頁數據數,判斷是否能整除*/
  Integer amount;
  if(a!=0){
   amount = query.list().size()/PageSize+1;
/*如果整除有余數,則頁數加1*/
  }else{
   amount = query.list().size()/PageSize;
/*如果整除沒余數,則直接總記錄數/每頁數據數*/
  }
  return amount;
 }

 public List hfindAll(String pagenum) {
     Session session =this.getSession();
  Query query = session.createQuery("from Login");
  if (pagenum == null){
/*如果pagenum是空,則數據從第一條開始*/
  query.setFirstResult(0);
/*設置查詢開始的第幾條數據,這里是從第1條開始*/
  query.setMaxResults(PageSize);
/*設置查詢數據條數,這里是5條*/
  query.setCacheable(true);
/*設置一級緩存*/
  }else{
   Integer p = (Integer.valueOf(pagenum)-1) * PageSize;
   query.setFirstResult(p);
   query.setMaxResults(PageSize);
   query.setCacheable(true);
  }
  return query.list();
 }
}

然后需要解決的是一些數據傳遞,類型轉換和在view層顯示的問題,主要代碼如下:

在ACTION里:
String strpagenum = request.getParameter("pagenum");
  List results= loginManage.hfind(strpagenum);
  Integer amountPage = loginManage.amountPage();
    if(results!=null){
             HttpSession session=request.getSession();
             session.setAttribute("results",results);
             session.setAttribute("amountPage",amountPage);
             return mapping.findForward("ok");
         }
    return mapping.findForward("fail");

在view視圖里:
顯示每頁數據的代碼:

 <logic:iterate id="element" name="results">    <tr>
   <td width="100"><input type="checkbox" name="select" value="<bean:write name="element" property="id"/>"><bean:write name="element" property="id"/></td>
   <td width="100"><bean:write name="element" property="name"/> </td>
   <td width="100"><bean:write name="element" property="password"/></td>
   </tr></logic:iterate>

顯示頁碼的代碼:
<%
   int i;
  int a=Integer.parseInt(session.getAttribute("amountPage").toString());
   for (i=1;i<=a;i++){
   out.println("<tr>");  
          out.println("<td><a href='display.do?pagenum="+ i +"'>"+ i +"</a></td>");    
          out.println("</tr>");    
   }
    %>




lzj520 2008-01-10 18:55 發表評論
]]>
spring+hibernate里session的管理http://www.tkk7.com/lzj520/archive/2008/01/10/174392.htmllzj520lzj520Thu, 10 Jan 2008 10:41:00 GMThttp://www.tkk7.com/lzj520/archive/2008/01/10/174392.htmlhttp://www.tkk7.com/lzj520/comments/174392.htmlhttp://www.tkk7.com/lzj520/archive/2008/01/10/174392.html#Feedback0http://www.tkk7.com/lzj520/comments/commentRss/174392.htmlhttp://www.tkk7.com/lzj520/services/trackbacks/174392.html 或者是[org.hibernate.jdbc.ConnectionManager] - <finalizing with closed connection>
那是因為有可能是你自己手動創建了session,比如:

private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
然后調用:

Session session = sessionFactory.openSession();
Query query = session.createQuery("from Login");

類似這樣的單獨使用hibernate時的用法,是需要手工去關閉session的。沒有關閉的話就會收到那樣的警告。

所以最好是使用spring管理的session,和OpenSessionInViewFilter,比如:
Session session =this.getSession();
然后在web.xml里加入
  <filter>
  <filter-name>OpenSessionInViewFilter</filter-name>
  <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
  </filter>
  <filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

其中在spring里注冊的sessionfactory必須是id="sessionFactory",如果是id="SessionFactory"或者其他,會提示sessionFactory沒有注冊的錯誤,因為OpenSessionInViewFilter里注冊的名必須為sessionFactory。



lzj520 2008-01-10 18:41 發表評論
]]>
070921 繼續acegihttp://www.tkk7.com/lzj520/archive/2007/09/21/146962.htmllzj520lzj520Fri, 21 Sep 2007 01:11:00 GMThttp://www.tkk7.com/lzj520/archive/2007/09/21/146962.htmlhttp://www.tkk7.com/lzj520/comments/146962.htmlhttp://www.tkk7.com/lzj520/archive/2007/09/21/146962.html#Feedback0http://www.tkk7.com/lzj520/comments/commentRss/146962.htmlhttp://www.tkk7.com/lzj520/services/trackbacks/146962.html
<filter>
    <filter-name>Acegi Filter Chain Proxy</filter-name>
    <filter-class>net.sf.acegisecurity.util.FilterToBeanProxy</filter-class>
    <init-param>
      <param-name>targetClass</param-name>
      <param-value>net.sf.acegisecurity.util.FilterChainProxy</param-value>
    </init-param>
  </filter>
 
   <filter-mapping>
         <filter-name>Acegi Filter Chain Proxy</filter-name>
               <url-pattern>*.do</url-pattern>
   </filter-mapping>
  
   <filter-mapping>
   <filter-name>Acegi Filter Chain Proxy</filter-name>
   <url-pattern>*.jsp</url-pattern>
   </filter-mapping>
  
   <filter-mapping>
   <filter-name>Acegi Filter Chain Proxy</filter-name>
   <url-pattern>/j_acegi_security_check</url-pattern>
   </filter-mapping>

就是acegi保護并認識這3類的url,但是再次發出頁面請求的時候,tomcat沒有報錯。不過頁面一直在讀取進度,沒有顯示,郁悶喇

lzj520 2007-09-21 09:11 發表評論
]]>
070920 acegi實踐http://www.tkk7.com/lzj520/archive/2007/09/20/146691.htmllzj520lzj520Thu, 20 Sep 2007 02:08:00 GMThttp://www.tkk7.com/lzj520/archive/2007/09/20/146691.htmlhttp://www.tkk7.com/lzj520/comments/146691.htmlhttp://www.tkk7.com/lzj520/archive/2007/09/20/146691.html#Feedback0http://www.tkk7.com/lzj520/comments/commentRss/146691.htmlhttp://www.tkk7.com/lzj520/services/trackbacks/146691.html

lzj520 2007-09-20 10:08 發表評論
]]>
070807 HibernateTemplate刪除數據小結http://www.tkk7.com/lzj520/archive/2007/08/07/134891.htmllzj520lzj520Tue, 07 Aug 2007 02:57:00 GMThttp://www.tkk7.com/lzj520/archive/2007/08/07/134891.htmlhttp://www.tkk7.com/lzj520/comments/134891.htmlhttp://www.tkk7.com/lzj520/archive/2007/08/07/134891.html#Feedback0http://www.tkk7.com/lzj520/comments/commentRss/134891.htmlhttp://www.tkk7.com/lzj520/services/trackbacks/134891.htmlDAO代碼:
 public void delete(Integer lid) {
        log.debug("deleting Login instance");
        try {
         Login login=(Login)this.getHibernateTemplate().load(Login.class,lid);
            getHibernateTemplate().delete(login);
            log.debug("delete successful");
        } catch (RuntimeException re) {
            log.error("delete failed", re);
            throw re;
        }
    }

調用DAO:
Integer selid = Integer.valueOf(request.getParameter("select"));
loginDAO.delete(selid);

批量刪除
需要注意的是in后面跟的是字符串,如果不是會提示org.hibernate.QueryException: unexpected char: ';'的出錯
DAO代碼:
public void delete(String[] lid) {
    String[] ids = lid;
         String str="";
         for(int i=0;i<ids.length;i++){
             str+="'"+ids[i]+"'";
             if(i!=(ids.length-1))
                 str+=",";
             }
  List list   =   this.getHibernateTemplate().find("from Login where id in ("+str+")");
  if(list.size()>0){  
     this.getHibernateTemplate().deleteAll(list);
     }
 }

調用DAO:
String[] lid = request.getParameterValues("select");
loginDAO.delete(lid);

lzj520 2007-08-07 10:57 發表評論
]]>
070621 SSH一些出錯小結(不斷更新)http://www.tkk7.com/lzj520/archive/2007/06/21/125513.htmllzj520lzj520Thu, 21 Jun 2007 04:01:00 GMThttp://www.tkk7.com/lzj520/archive/2007/06/21/125513.htmlhttp://www.tkk7.com/lzj520/comments/125513.htmlhttp://www.tkk7.com/lzj520/archive/2007/06/21/125513.html#Feedback0http://www.tkk7.com/lzj520/comments/commentRss/125513.htmlhttp://www.tkk7.com/lzj520/services/trackbacks/125513.htmlSpring Hibernate在AOP方面的配置沖突
Spring2.0 Hibernate3.1.x/Hibernate3.2

在使用Spring的AOP編程時,會用到這幾個lib:
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar

Hibernate如果使用lib:
asm.jar
asm-attrs.jar

其中asm-2.2.2.jar與asm.jar存在類上的沖突!!!
使用其中之一或兩者都使用,可能會出現如下錯誤:
java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit。。。。。。

解決辦法是:
1).去掉類路徑上的關于Hibernate的3個lib
asm.jar
asm-attrs.jar
cglib-2.1.3.jar
2).加入Spring中的以下4個lib
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar
cglib-nodep-2.1_3.jar

如果再不行,都試試刪刪看。


java.lang.SecurityException: class "javax.xml.bind.JAXBContext"'s signer information does not match signer information of other classes in the same package
這個錯誤是因為載入的包里面有兩個相同路徑的類,就是在一個包里面有兩個同名的類
有可能是將相同的包載入兩次或者把包解開后,先將jar文件載入了,后又將解開的類載入了


Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
試試自己去下一個spring的包,把包里的spring.jar加到項目里去。eclipse生成的時候可能會有些包沒有放進去。


Error creating bean with name 'datasource' defined in file
Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
試試將commons-dbcp.jar,commons-pool.jar和commons- collections.jar加入CLASSPATH中


hibernate 3.1 中的hibernateTemplate ,class應該為org.springframework.orm.hibernate3.HibernateTemplate,而非org.springframework.orm.hibernate.HibernateTemplate,因為某些原因我現在還用3.1,早前在玩springside的時候感覺hibernate 3.2 的Hibernate Annotations方便多了。

找不到action或報錯的另一少有原因,一些版本hibernate版本會有些沖突方面的問題,可換一版本的hibernate試試,個人感覺hibernate的版本對應用會比較敏感


org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in resource [/WEB-INF/dataAccessContext-hibernate.xml] of ServletContext: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/transaction/TransactionManager
java.lang.NoClassDefFoundError: javax/transaction/TransactionManager


原因:缺少jta.jar 或者是找不到hbm.xml文件導致sessionfactory出錯,檢查hbm文件路徑是否正確,文件是否存在
<property name="mappingResources">
  <list>
  <value>com/yourcompany/model/Login.hbm.xml
  </value>
  </list>
  </property>


2007-06-26 18:38:13,671 ERROR [com.yourcompany.model.dao.LoginDAO] - <save failed>
org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: could not insert: [com.yourcompany.model.Login]; bad SQL grammar [insert into mysql__login (name, password) values (?, ?)]; nested exception is java.sql.SQLException: Table 'mysql.mysql__login' doesn't exist
java.sql.SQLException: Table 'mysql.mysql__login' doesn't exist

把hbm文件里面的catalog="'mysql"去掉即可!
另注意的一點是eclipse生成的DAO文件應該是:
    public void save(Login transientInstance) {
        log.debug("saving Login instance");
        try {
            getHibernateTemplate().save(transientInstance);
            log.debug("save successful");
        } catch (RuntimeException re) {
            log.error("save failed", re);
            throw re;
        }
    }
而不是原來的    public void save(LoginDAO transientInstance)

只要在applicationContext.xml中加上
<property name="mappingResources">
<list>
<value>com/yourcompany/hibernate/Users.hbm.xml</value>
</list>
</property>
加這段代碼就會找不到action
換一個版本的hibernate應該就ok


Invalid path /addcustomer was requested
輸入的路徑不正確,檢查spring中注冊的action的路徑和輸入的路徑是否一致,留意大小寫是否一致



lzj520 2007-06-21 12:01 發表評論
]]>
070615 struts中spring載入小結http://www.tkk7.com/lzj520/archive/2007/06/15/124458.htmllzj520lzj520Fri, 15 Jun 2007 04:16:00 GMThttp://www.tkk7.com/lzj520/archive/2007/06/15/124458.htmlhttp://www.tkk7.com/lzj520/comments/124458.htmlhttp://www.tkk7.com/lzj520/archive/2007/06/15/124458.html#Feedback0http://www.tkk7.com/lzj520/comments/commentRss/124458.htmlhttp://www.tkk7.com/lzj520/services/trackbacks/124458.html另外service的配置和applicationContext.xml或sping相關的數據庫文件,可自己建立一個目錄,然后在web.xml中加載    <context-param>
        <param-name>contextConfigLocation</param-name> 
        <param-value>classpath*:spring/*.xml</param-value>
    </context-param>  
這樣將web層和service層的配置分開擺放,看起來比較清晰。具體可參考springside的example

另一方法是struts-config中直接寫 <plug-in  className="org.springframework.web.struts.ContextLoaderPlugIn"> 
<set-property property="contextConfigLocation"  value="classpath*:spring/*.xml"/> 
</plug-in>
這樣將所有的配置文件直接放在spring目錄下

或小型應用可簡單寫成最直接的<plug-in className= "org.springframework.web.struts.ContextLoaderPlugIn"> <set-property property= "contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>


不過多句提醒下記得不要漏了web.xml中還應有    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
 </listener> 

struts-config.xml中還應有:
 <controller>
  <set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/>
 </controller>

lzj520 2007-06-15 12:16 發表評論
]]>
(轉)spring中配置log4jhttp://www.tkk7.com/lzj520/archive/2006/09/26/71918.htmllzj520lzj520Tue, 26 Sep 2006 02:54:00 GMThttp://www.tkk7.com/lzj520/archive/2006/09/26/71918.htmlhttp://www.tkk7.com/lzj520/comments/71918.htmlhttp://www.tkk7.com/lzj520/archive/2006/09/26/71918.html#Feedback0http://www.tkk7.com/lzj520/comments/commentRss/71918.htmlhttp://www.tkk7.com/lzj520/services/trackbacks/71918.html利用Spring框架編程,console打印出log4j:WARN Please initialize the log4j system properly?
說明你的log4j.properties沒有配置。請把log4j.properties放到工程的classpath中,eclipse的classpath為bin目錄,由于編譯后src目錄下的文件會拷貝到bin目錄下,所以你可以把log4j.properties放到src目錄下。
這里給出一個log4j.properties的例子:

log4j.rootLogger=DEBUG,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %5p (%F:%L) - %m%n


在spring中如何配置的log4j
在web.xml中加入以下代碼即可。
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>



lzj520 2006-09-26 10:54 發表評論
]]>
主站蜘蛛池模板: 91亚洲国产成人精品下载| 久久精品亚洲日本波多野结衣| 成人黄色免费网站| 亚洲熟妇av午夜无码不卡| 免费在线视频一区| 国产免费一区二区三区不卡| 亚洲av午夜精品无码专区| 亚洲精品国产福利一二区| 99久久免费精品视频| 亚洲乱理伦片在线观看中字| 亚洲精品自产拍在线观看| 国产一卡2卡3卡4卡无卡免费视频 国产一卡二卡3卡四卡免费 | 99久久99这里只有免费的精品| 亚洲精品在线电影| 亚洲精品无码激情AV| 亚洲三级高清免费| 国产V片在线播放免费无码| 精品亚洲AV无码一区二区| 国产午夜亚洲精品午夜鲁丝片| 欧洲精品成人免费视频在线观看 | 久久久久国产精品免费看| 亚洲精品美女久久7777777| 亚洲天堂男人天堂| 国产又大又粗又硬又长免费| 一区二区三区观看免费中文视频在线播放| 亚洲乱人伦中文字幕无码| 亚洲天天在线日亚洲洲精| 亚洲?v女人的天堂在线观看| 污视频在线观看免费| 大片免费观看92在线视频线视频| 亚洲av永久无码精品天堂久久| 亚洲人成色77777| 免费看国产一级特黄aa大片| 成人免费观看一区二区| 日本免费在线观看| 一区免费在线观看| 国产亚洲视频在线观看| 日韩亚洲人成在线| 亚洲高清视频在线播放| 亚洲色欲久久久综合网东京热| 免费在线黄色网址|