﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-just do it-随笔分类-Spring</title><link>http://www.blogjava.net/lzj520/category/15621.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 19 Mar 2008 05:37:37 GMT</lastBuildDate><pubDate>Wed, 19 Mar 2008 05:37:37 GMT</pubDate><ttl>60</ttl><item><title>spring中连接池的配置</title><link>http://www.blogjava.net/lzj520/archive/2008/03/19/187211.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Wed, 19 Mar 2008 04:09:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/03/19/187211.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/187211.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/03/19/187211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/187211.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/187211.html</trackback:ping><description><![CDATA[<strong>在默认通过myeclipse生成的配置里，spring使用的是apache的dbcp连接池</strong><br />
<br />
&lt;bean id="dataSource"<br />
&nbsp;&nbsp;class="org.apache.commons.dbcp.BasicDataSource"&gt;<br />
&nbsp;&nbsp;&lt;property name="driverClassName"<br />
&nbsp;&nbsp;&nbsp;value="com.mysql.jdbc.Driver"&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="url"<br />
&nbsp;&nbsp;&nbsp;value="jdbc:mysql://localhost:3306/mysql"&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="username" value="root"&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="password" value="root"&gt;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;<br />
<br />
<strong>如果改为C3P0则为：<br />
</strong><br />
&lt;bean id="propertyConfigurer"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="location"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;classpath:jdbc.properties&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&lt;bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="driverClass" value="com.mysql.jdbc.Driver" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="jdbcUrl" value="${jdbc.url}" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="user" value="${jdbc.username}" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="password" value="${jdbc.password}" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="autoCommitOnClose" value="true"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="checkoutTimeout" value="${cpool.checkoutTimeout}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="initialPoolSize" value="${cpool.minPoolSize}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="minPoolSize" value="${cpool.minPoolSize}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="maxPoolSize" value="${cpool.maxPoolSize}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="maxIdleTime" value="${cpool.maxIdleTime}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="acquireIncrement" value="${cpool.acquireIncrement}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="maxIdleTimeExcessConnections" value="${cpool.maxIdleTimeExcessConnections}"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
jdbc.properties：<br />
<p># Database URL<br />
jdbc.url=jdbc:mysql://192.168.0.25"3306/db</p>
<p># Database login information<br />
jdbc.username=root<br />
jdbc.password=</p>
<p># Time to wait for an open connection before timing out<br />
# (in milliseconds)<br />
cpool.checkoutTimeout=5000</p>
<p># Connection pool size<br />
cpool.minPoolSize=5<br />
cpool.maxPoolSize=40</p>
<p># How long to keep unused connections around(in seconds)<br />
# Note: MySQL times out idle connections after 8 hours(28,800 seconds)<br />
# so ensure this value is below MySQL idle timeout<br />
cpool.maxIdleTime=25200</p>
<p># How long to hang on to excess unused connections after traffic spike<br />
# (in seconds)<br />
cpool.maxIdleTimeExcessConnections=1800</p>
<p># Acquiring new connections is slow, so eagerly retrieve extra connections<br />
# when current pool size is reached<br />
cpool.acquireIncrement=5<br />
<br />
或者将上面的3部分写成一个：<br />
&lt;bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="driverClass"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;${jdbc.driverClassName}&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="jdbcUrl"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;${jdbc.url}&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="user"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;${jdbc.username}&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="password"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;${jdbc.password}&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="initialPoolSize"&gt;&lt;value&gt;10&lt;/value&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="minPoolSize"&gt;&lt;value&gt;5&lt;/value&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="maxPoolSize"&gt;&lt;value&gt;30&lt;/value&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="acquireIncrement"&gt;&lt;value&gt;5&lt;/value&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="maxIdleTime"&gt;&lt;value&gt;10&lt;/value&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="maxStatements"&gt;&lt;value&gt;0&lt;/value&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
<br />
<strong>如果使用的是受管理的J2EE服务器，则在spring中配置为JNDI连接：<br />
</strong>&lt;bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"&gt;<br />
&lt;property name="jndiName"&gt;<br />
&lt;value&gt;java:comp/env/jndi/xxx&lt;/value&gt;<br />
&lt;/property&gt;<br />
&lt;/bean&gt;<br />
<br />
<strong>如果在应用里有独自使用hibernate，则在spring中配置hibernate连接池，使用C3P0如下：<br />
</strong>&lt;bean&nbsp;&nbsp; id="DataSource"&nbsp;&nbsp; <br />
&nbsp; class="org.apache.commons.dbcp.BasicDataSource"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property&nbsp;&nbsp; name="driverClassName"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;value&gt;oracle.jdbc.driver.OracleDriver&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property&nbsp;&nbsp; name="url"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;value&gt;jdbc:oracle:thin:@172.16.20.241:1521:dbsvr&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property&nbsp;&nbsp; name="username"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;value&gt;hl3000&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property&nbsp;&nbsp; name="password"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;value&gt;hldw3101&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/bean&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;bean&nbsp;&nbsp; id="SessionFactory"&nbsp;&nbsp; <br />
&nbsp; class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property&nbsp;&nbsp; name="dataSource"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;ref&nbsp;&nbsp; bean="DataSource"&nbsp;&nbsp; /&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property&nbsp;&nbsp; name="hibernateProperties"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;props&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;prop&nbsp;&nbsp; key="hibernate.dialect"&gt;org.hibernate.dialect.OracleDialect&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;prop&nbsp;&nbsp; key="hibernate.show_sql"&gt;true&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; &lt;!--&nbsp;&nbsp; C3P0连接池配置&nbsp;&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;prop&nbsp;&nbsp; key="hibernate.connection.provider_class"&gt;org.hibernate.connection.C3P0ConnectionProvider&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;prop&nbsp;&nbsp; key="hibernate.c3p0.max_size"&gt;20&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;prop&nbsp;&nbsp; key="hibernate.c3p0.min_size"&gt;5&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;prop&nbsp;&nbsp; key="hibernate.c3p0.timeout"&gt;120&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;prop&nbsp;&nbsp; key="hibernate.c3p0.max_statements"&gt;100&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;prop&nbsp;&nbsp; key="hibernate.c3p0.idle_test_period"&gt;120&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;prop&nbsp;&nbsp; key="hibernate.c3p0.acquire_increment"&gt;2&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;prop&nbsp;&nbsp; key="myeclipse.connection.profile"&gt;hl3000&lt;/prop&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/props&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;property&nbsp;&nbsp; name="mappingResources"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;list&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;value&gt;com/hl3000/DBLogic/POJO/PermUserAccount.hbm.xml&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/list&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/bean&gt;&nbsp; <br />
<br />
<strong>spring中配置独立使用hibernate时使用jndi的配置：<br />
</strong><br />
hibernate.dialect = net.sf.hibernate.dialect.MySQLDialect<br />
hibernate.connection.datasource=java:comp/env/jdbc/SAMPLEDB<br />
hibernate.show_sql=true<br />
<br />
<strong>如果是使用不受管理的Servlet容器如Tomcat，也可以使用jndi的方式配置，需要在tomcat中配置数据源，在server.xml中增改大致如下：<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;Resource name="jdbc/testDb" auth="Container"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="javax.sql.DataSource"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ResourceParams name="jdbc/testDB"&gt;\\数据源的名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;&lt;name&gt;username&lt;/name&gt;&lt;value&gt;root&lt;/value&gt;&lt;/parameter&gt;数据库的名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;&lt;name&gt;password&lt;/name&gt;&lt;value&gt;password&lt;/value&gt;&lt;/parameter&gt;数据库密码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;&lt;name&gt;driverClassName&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;org.gjt.mm.mysql.Driver&lt;/value&gt;&lt;/parameter&gt;\\要加载的驱动<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;&lt;name&gt;url&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;jdbc:mysql://172.20.0.73/rk?&lt;/value&gt;&lt;/parameter&gt;\\要连接的URL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ResourceParams&gt;<br />
<br />
</p>
<img src ="http://www.blogjava.net/lzj520/aggbug/187211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-03-19 12:09 <a href="http://www.blogjava.net/lzj520/archive/2008/03/19/187211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>acegi step by step 2</title><link>http://www.blogjava.net/lzj520/archive/2008/03/05/184017.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Wed, 05 Mar 2008 07:52:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/03/05/184017.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/184017.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/03/05/184017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/184017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/184017.html</trackback:ping><description><![CDATA[<p>在配置好acegi的那些filter之类什么的之后，建立index.jsp、login.jsp、order/authorizeOrder.jsp、order/createOrder.jsp文件，按照之前的配置，权限分配是：<br />
&nbsp;&nbsp;&nbsp;&nbsp;/index.jsp=ROLE_ADMIN,ROLE_TECHNICIAN<br />
&nbsp;&nbsp;&nbsp;&nbsp;/order/createOrder.jsp=ROLE_TECHNICIAN<br />
&nbsp;&nbsp;&nbsp;&nbsp;/order/authorizeOrder.jsp=ROLE_ADMIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;/login.jsp=ROLE_ANONYMOUS,ROLE_TECHNICIAN,ROLE_ADMIN<br />
<br />
login.jsp的form：<br />
</p>
<p>&lt;form action="&lt;c:url value='j_acegi_security_check'/&gt;" method="POST"&gt;<br />
&lt;table width=50% border=0 align="center"&gt;<br />
&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&lt;td&gt;User:&lt;/td&gt;<br />
&nbsp;&nbsp;&lt;td&gt;&lt;input type='text' name='j_username'<br />
&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br />
&nbsp;&lt;/tr&gt;<br />
&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&lt;td&gt;Password:&lt;/td&gt;<br />
&nbsp;&nbsp;&lt;td&gt;&lt;input type='password' name='j_password'&gt;&lt;/td&gt;<br />
&nbsp;&lt;/tr&gt;</p>
<p>&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&lt;td colspan='2'&gt;&lt;input name="submit" type="submit"&gt;&amp;nbsp;<br />
&nbsp;&nbsp;&lt;input name="reset" type="reset" value="Clear"&gt;&lt;/td&gt;<br />
&nbsp;&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;/form&gt;</p>
<p><br />
使用相应的用户名登录后即可有相应的权限，否则重新转到登录页面。</p>
<img src ="http://www.blogjava.net/lzj520/aggbug/184017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-03-05 15:52 <a href="http://www.blogjava.net/lzj520/archive/2008/03/05/184017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>acegi step by step 1</title><link>http://www.blogjava.net/lzj520/archive/2008/02/28/182761.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Thu, 28 Feb 2008 09:54:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/02/28/182761.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/182761.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/02/28/182761.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/182761.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/182761.html</trackback:ping><description><![CDATA[<p align="left"><strong>一、环境设定：<br />
</strong><br />
<strong>相关jar：<br />
</strong><br />
acegi-security-1.0.5.jar - Main classes of the Acegi Security system <br />
cglib-2.1.3.jar - Code-generation library used by Spring <br />
commons-codec-1.3.jar - Encoders and decoders such as Base64, Hex, Phonetic, and URLs <br />
commons-lang-2.1.jar - Helper utilities for java.lang APIs <br />
ehcache-1.2.3.jar - Used for basic caching purposes <br />
freemarker-2.3.8.jar - Used by the Struts implementation <br />
jstl.jar, standard.jar - JavaServer Pages Standard Tag Library (JSTL) tag library <br />
log4j-1.2.13.jar - For logging <br />
ognl-2.6.11.jar - OGNL library used by the Struts implementation <br />
sitemesh-2.3.jar - SiteMesh JAR <br />
spring.jar - Spring Framework JAR <br />
struts2-core-2.0.8.jar - Struts 2 core JAR <br />
xwork-2.0.3.jar - Used by Struts<br />
<br />
<strong>修改web.xml：<br />
<br />
作用是利用spring AOP将filter Proxy到web.xml里去，并拦截相关的request</strong><br />
</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee"<br />
&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp; xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"<br />
&nbsp; version="2.4"&gt;<br />
&nbsp; &lt;display-name&gt;AcegiTraining&lt;/display-name&gt;<br />
&nbsp; &lt;context-param&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/applicationContext*.xml&lt;/param-value&gt;<br />
&nbsp; &lt;/context-param&gt;<br />
&nbsp; &lt;filter&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;Acegi Filter Chain Proxy&lt;/filter-name&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.acegisecurity.util.FilterToBeanProxy<br />
&nbsp;&nbsp;&nbsp; &lt;/filter-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;targetClass&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.acegisecurity.util.FilterChainProxy<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp; &lt;/filter&gt;<br />
&nbsp; ...<br />
&nbsp; ...<br />
&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;Acegi Filter Chain Proxy&lt;/filter-name&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/j_acegi_security_check&lt;/url-pattern&gt;<br />
&nbsp; &lt;/filter-mapping&gt;<br />
&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;Acegi Filter Chain Proxy&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/j_acegi_logout&lt;/url-pattern&gt;</p>
<p>&nbsp; &lt;/filter-mapping&gt;<br />
&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;Acegi Filter Chain Proxy&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;*.action&lt;/url-pattern&gt;<br />
&nbsp; &lt;/filter-mapping&gt;</p>
<p>&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;Acegi Filter Chain Proxy&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt;<br />
&nbsp; &lt;/filter-mapping&gt;<br />
&nbsp; ...</p>
<p>&lt;/web-app&gt;</p>
<br />
<strong>二、身份验证<br />
<br />
WEB-INF下增加applicationContext-acegi-security.xml文件，并增加验证服务所需要的filter：<br />
</strong><br />
web.xml中的FilterToBeanProxy将拦截的内容：<br />
<br />
<p>&lt;bean id="filterChainProxy"<br />
&nbsp;&nbsp;&nbsp; class="org.acegisecurity.util.FilterChainProxy"&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;property name="filterInvocationDefinitionSource"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PATTERN_TYPE_APACHE_ANT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /j_acegi_security_check*=httpSessionContextIntegrationFilter,authenticationProcessingFilter <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**/*=httpSessionContextIntegrationFilter,logoutFilter,<br />
authenticationProcessingFilter,securityContextHolderAwareRequestFilter,<br />
anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;</p>
<p>&nbsp; &lt;/bean&gt;<br />
<br />
</p>
<strong>如果未经过允许的请求，将会由exceptionTranslationFilter处理，将页面转到注册页面处去处理，authenticationProcessingFilterEntryPoint，是身份验证的入口：<br />
</strong>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&lt;bean id="exceptionTranslationFilter"<br />
&nbsp; class="org.acegisecurity.ui.ExceptionTranslationFilter"&gt;<br />
&nbsp; &lt;property name="authenticationEntryPoint"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;ref local="authenticationProcessingFilterEntryPoint" /&gt;<br />
&nbsp; &lt;/property&gt;</p>
<p>&nbsp; ...<br />
&lt;/bean&gt;</p>
<p>&lt;bean id="authenticationProcessingFilterEntryPoint"<br />
&nbsp; class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint"&gt;<br />
&nbsp; &lt;property name="loginFormUrl"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;value&gt;/login.jsp&lt;/value&gt;<br />
&nbsp; &lt;/property&gt;</p>
<p>&nbsp; &lt;property name="forceHttps"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;value&gt;false&lt;/value&gt;<br />
&lt;/bean&gt;</p>
<br />
<strong>authenticationProcessingFilter就是进行身份验证所用到的的filter，其主要是依靠authenticationManager来进行数据库或文本文件上存放的注册信息来进行核对：</strong><br />
<br />
<p>&lt;bean id="authenticationProcessingFilter"<br />
&nbsp; class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"&gt;<br />
&nbsp; &lt;property name="authenticationManager"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;ref bean="authenticationManager" /&gt;<br />
&nbsp; &lt;/property&gt;</p>
<p>&nbsp; &lt;property name="authenticationFailureUrl"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;value&gt;/login.jsp?login_error=1&lt;/value&gt;<br />
&nbsp; &lt;/property&gt;<br />
&nbsp; &lt;property name="defaultTargetUrl"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;value&gt;/&lt;/value&gt;</p>
<p>&nbsp; &lt;/property&gt;<br />
&nbsp; &lt;property name="filterProcessesUrl"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;/j_acegi_security_check&lt;/value&gt;<br />
&nbsp; &lt;/property&gt;<br />
&lt;/bean&gt;</p>
<br />
<p>&lt;bean id="authenticationManager"<br />
&nbsp; class="org.acegisecurity.providers.ProviderManager"&gt;<br />
&nbsp; &lt;property name="providers"&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref local="daoAuthenticationProvider" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref local="anonymousAuthenticationProvider" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/list&gt;<br />
&nbsp; &lt;/property&gt;<br />
&lt;/bean&gt;<br />
</p>
<br />
<p>&lt;bean id="daoAuthenticationProvider"<br />
&nbsp;&nbsp;&nbsp; class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="userDetailsService"/&gt;&lt;ref local="userDetailsService"/&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="userCache"&gt;</p>
<p>&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; <br />
&nbsp; &lt;bean id="userDetailsService"<br />
&nbsp;&nbsp;&nbsp; class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="userProperties"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.springframework.beans.factory.config.PropertiesFactoryBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="location"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value="/WEB-INF/users.properties" /&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp; &lt;/bean&gt;</p>
<br />
users.properties：<br />
james=tom@1231,ROLE_TECHNICIAN<br />
krishna=krish2341,ROLE_TECHNICIAN<br />
smith=pravah@001,ROLE_ADMIN<br />
<br />
<strong>三、权限验证</strong><br />
<br />
<strong>在身份验证后，通过权限验证来决定哪些资源由拥有哪些权限的用户使用，httpRequestAccessDecisionManager控制投票方式，exceptionTranslationFilter增加了如果权限验证失败后所转到的处理页面，logoutFilter定义登出后转到首页:<br />
<br />
</strong>
<p>&lt;bean id="filterInvocationInterceptor"<br />
&nbsp; class="org.acegisecurity.intercept.web.FilterSecurityInterceptor"&gt;<br />
&nbsp; &lt;property name="authenticationManager"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;ref bean="authenticationManager" /&gt;<br />
&nbsp; &lt;/property&gt;<br />
&nbsp; &lt;property name="accessDecisionManager"&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;ref local="httpRequestAccessDecisionManager" /&gt;<br />
&nbsp; &lt;/property&gt;<br />
&nbsp; &lt;property name="objectDefinitionSource"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PATTERN_TYPE_APACHE_ANT <br />
&nbsp;&nbsp;&nbsp; /index.jsp=ROLE_ADMIN,ROLE_TECHNICIAN<br />
&nbsp;&nbsp;&nbsp; /order/createOrder.jsp=ROLE_TECHNICIAN<br />
&nbsp;&nbsp;&nbsp; /order/authorizeOrder.jsp=ROLE_ADMIN<br />
&nbsp;&nbsp;&nbsp; /login.jsp=ROLE_ANONYMOUS,ROLE_TECHNICIAN,ROLE_ADMIN <br />
&nbsp;&nbsp;&nbsp; &lt;/value&gt;<br />
&nbsp; &lt;/property&gt;</p>
<p>&lt;/bean&gt;<br />
<br />
</p>
<p>&lt;bean id="exceptionTranslationFilter"<br />
&nbsp;&nbsp;&nbsp; class="org.acegisecurity.ui.ExceptionTranslationFilter"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="authenticationEntryPoint"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref local="authenticationProcessingFilterEntryPoint" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;property name="accessDeniedHandler"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.acegisecurity.ui.AccessDeniedHandlerImpl"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="errorPage" value="/accessDenied.jsp" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp; &lt;/bean&gt;</p>
<br />
<p>&lt;bean id="httpRequestAccessDecisionManager"<br />
&nbsp;&nbsp;&nbsp; class="org.acegisecurity.vote.AffirmativeBased"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="allowIfAllAbstainDecisions"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;false&lt;/value&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="decisionVoters"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="roleVoter" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;</p>
<p>&nbsp; &lt;/bean&gt;<br />
&nbsp; &lt;bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter" /&gt;<br />
<br />
</p>
<p>&lt;bean id="logoutFilter"<br />
&nbsp; class="org.acegisecurity.ui.logout.LogoutFilter"&gt;<br />
&nbsp; &lt;constructor-arg value="/index.jsp" /&gt;<br />
&nbsp; &lt;!-- URL redirected to after logout --&gt;<br />
&nbsp; &lt;constructor-arg&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/list&gt;<br />
&nbsp; &lt;/constructor-arg&gt;<br />
&lt;/bean&gt;</p>
<br />
<strong>至此，acegi配置部分完成，剩下相关页面设计部分。</strong>
<img src ="http://www.blogjava.net/lzj520/aggbug/182761.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-02-28 17:54 <a href="http://www.blogjava.net/lzj520/archive/2008/02/28/182761.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SSH集成Fckeditor</title><link>http://www.blogjava.net/lzj520/archive/2008/01/31/178672.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Thu, 31 Jan 2008 06:24:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/01/31/178672.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/178672.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/01/31/178672.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/178672.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/178672.html</trackback:ping><description><![CDATA[使用Fckeditor的话，如果文本内容过长，可以自己去设计一个分页的方法。我想了一个方法，是另外建立2个表，为一对多关系：文章表——页面表。输入方式是用一个大的表单，里面可以有一个ADD的按钮来自行使用DOM来增加TEXT输入框数目，一个TEXT输入框为一个页。提交之后批量添加到页面表里，一个页面是一条记录。显示的时候按照平时做分页的方法来做。下面先贴上正常使用FCKeditor的方法：<br />
<br />
去下载了FCKeditor_2.5.1.zip和FCKeditor-2.3.zip，一个是JAVA版本的文件，一个是FCK原本的文件。摆放的方式大概如下图：<br />
<img height="525" alt="" src="http://www.blogjava.net/images/blogjava_net/lzj520/080131.jpg" width="414" border="0" /><br />
<br />
<strong>web.xml</strong>加入代码：<br />
<br />
<p>&nbsp;&lt;!-- fckeditor --&gt;</p>
<p>&nbsp; &lt;servlet&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;Connector&lt;/servlet-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;com.fredck.FCKeditor.connector.ConnectorServlet&lt;/servlet-class&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;baseDir&lt;/param-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 此为文件浏览路径 --&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/UserFiles/&lt;/param-value&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;debug&lt;/param-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;true&lt;/param-value&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;/servlet&gt; </p>
<p>&nbsp;&nbsp;&nbsp; &lt;servlet&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;SimpleUploader&lt;/servlet-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;com.fredck.FCKeditor.uploader.SimpleUploaderServlet&lt;/servlet-class&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;baseDir&lt;/param-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 此为文件上传路径，需要在WebRoot 目录下新建 UserFiles 文件夹 --&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 根据文件的类型还需要新建相关的文件夹 Image、 Flash --&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/UserFiles/&lt;/param-value&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;debug&lt;/param-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;true&lt;/param-value&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 此参数为是否开启上传功能 --&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;enabled&lt;/param-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;false&lt;/param-value&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;AllowedExtensionsFile&lt;/param-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;&lt;/param-value&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 此参数为文件过滤，以下的文件类型都不可以上传 --&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;DeniedExtensionsFile&lt;/param-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi&lt;/param-value&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;AllowedExtensionsImage&lt;/param-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;jpg|gif|jpeg|png|bmp&lt;/param-value&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;DeniedExtensionsImage&lt;/param-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;&lt;/param-value&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;AllowedExtensionsFlash&lt;/param-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;swf|fla&lt;/param-value&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;DeniedExtensionsFlash&lt;/param-name&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;&lt;/param-value&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;/servlet&gt;&nbsp;&nbsp; </p>
<p>&nbsp; &lt;servlet-mapping&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;Connector&lt;/servlet-name&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector&lt;/url-pattern&gt; <br />
&nbsp; &lt;/servlet-mapping&gt; </p>
<p>&nbsp; &lt;servlet-mapping&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;SimpleUploader&lt;/servlet-name&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/FCKeditor/editor/filemanager/upload/simpleuploader&lt;/url-pattern&gt; <br />
&nbsp; &lt;/servlet-mapping&gt;<br />
<br />
输入的jsp文件类似如下：<br />
<br />
&nbsp; &lt;html:form action="/fck" method="post"&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;fck:editor id = "fcktext" basePath = "/new1/FCKeditor/" <br />
&nbsp;&nbsp;&nbsp; height = "100%" <br />
&nbsp;&nbsp;&nbsp; skinPath = "/new1/FCKeditor/editor/skins/default/" <br />
&nbsp;&nbsp;&nbsp; toolbarSet = "Default" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imageBrowserURL = "/new1/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&amp;Connector=connectors/jsp/connector" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; linkBrowserURL = "/new1/FCKeditor/editor/filemanager/browser/default/browser.html?Connector=connectors/jsp/connector" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flashBrowserURL = "/new1/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Flash&amp;Connector=connectors/jsp/connector" <br />
&nbsp;&nbsp;&nbsp; imageUploadURL = "/new1/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Image" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; linkUploadURL = "/new1/FCKeditor/editor/filemanager/upload/simpleuploader?Type=File" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flashUploadURL = "/new1/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Flash" &gt; <br />
&nbsp;&nbsp;&nbsp; &lt;/fck:editor&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;html:submit/&gt;&lt;html:cancel/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/html:form&gt; <br />
<br />
其中的id是对应于ActionForm与validationv.xml里的property。分别类似如下：<br />
<br />
&nbsp;&nbsp;String strfcktext = fckForm.getString("fcktext");<br />
<br />
&lt;form name="fckForm"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field property="fcktext" depends="required"&gt; <br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;arg key="fckForm.fcktext"/&gt;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;/field&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;/form&gt;<br />
<br />
另外需要注意的是，如果显示找不到页面的错误，应该是form里FCK相关的路径设置不正确。数据库段的字段也需要设置足够大。如果传输过程里出现乱码，可以所有jsp页面加入：&lt;%@ page language="java" contentType="text/html; charset=UTF-8"%&gt;，在web.xml里加入u-f8 filter：<br />
<br />
&lt;!-- u-f8 filter --&gt;<br />
&nbsp; &lt;filter&gt;<br />
&nbsp; &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;<br />
&nbsp; &lt;filter-class&gt;org.springframework.web.filter.CharacterEncodingFilter&lt;/filter-class&gt;<br />
&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp; &lt;param-name&gt;encoding&lt;/param-name&gt;<br />
&nbsp;&nbsp; &lt;param-value&gt;UTF-8&lt;/param-value&gt;<br />
&nbsp; &lt;/init-param&gt;<br />
&nbsp;&lt;/filter&gt;</p>
<p>&nbsp;&lt;filter-mapping&gt;<br />
&nbsp; &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;<br />
&nbsp; &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;<br />
&nbsp;&lt;/filter-mapping&gt;</p>
<p>&nbsp;&lt;filter-mapping&gt;<br />
&nbsp; &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;<br />
&nbsp; &lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt;<br />
&nbsp;&lt;/filter-mapping&gt;</p>
<img src ="http://www.blogjava.net/lzj520/aggbug/178672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-01-31 14:24 <a href="http://www.blogjava.net/lzj520/archive/2008/01/31/178672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts+spring使用随机验证码</title><link>http://www.blogjava.net/lzj520/archive/2008/01/18/176261.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Fri, 18 Jan 2008 08:09:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/01/18/176261.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/176261.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/01/18/176261.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/176261.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/176261.html</trackback:ping><description><![CDATA[<p><strong>struts-config.xml</strong><br />
<br />
&nbsp;&nbsp;&nbsp; &lt;form-bean name="checkForm" type="org.apache.struts.validator.DynaValidatorForm"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="rand" type="java.lang.String" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/form-bean&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;action<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; attribute="checkForm"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input="/check/check.jsp"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="checkForm"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path="/check"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scope="request"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; validate="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="com.yourcompany.struts.action.CheckAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="ok" path="/check/checkok.jsp" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
<br />
<strong>validation.xml</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&lt;form name="checkForm"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field property="rand" depends="required"&gt; <br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;arg key="checkForm.rand"/&gt;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;/field&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;/form&gt;<br />
<br />
<strong>spring config<br />
<br />
</strong>&lt;bean name="/check" class="com.yourcompany.struts.action.CheckAction"/&gt; <br />
<br />
<strong>checkAction.java</strong><br />
<br />
public class CheckAction extends Action {<br />
&nbsp;/*<br />
&nbsp; * Generated Methods<br />
&nbsp; */</p>
<p>&nbsp;/** <br />
&nbsp; * Method execute<br />
&nbsp; * @param mapping<br />
&nbsp; * @param form<br />
&nbsp; * @param request<br />
&nbsp; * @param response<br />
&nbsp; * @return ActionForward<br />
&nbsp; */<br />
&nbsp;public ActionForward execute(ActionMapping mapping, ActionForm form,<br />
&nbsp;&nbsp;&nbsp;HttpServletRequest request, HttpServletResponse response) {<br />
&nbsp;&nbsp;DynaValidatorForm checkForm = (DynaValidatorForm) form;// TODO Auto-generated method stub<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*HttpSession session=request.getSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String strrand = (String)session.getAttribute("rand");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.setAttribute("rand", strrand);*/<br />
&nbsp;&nbsp;return mapping.findForward("ok");<br />
&nbsp;}<br />
}<br />
<br />
<strong>check.jsp</strong></p>
<p>&lt;%@ page language="java" pageEncoding="ISO-8859-1"%&gt;<br />
&lt;%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%&gt; <br />
&lt;%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%&gt;<br />
&nbsp;<br />
&lt;html&gt; <br />
&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp;&lt;title&gt;JSP for DynaValidatorForm form&lt;/title&gt;<br />
&nbsp;&nbsp;&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />
&nbsp;&nbsp;&lt;META HTTP-EQUIV="Pragma" CONTENT="no-cache"&gt; <br />
&nbsp;&nbsp;&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"&gt; <br />
&nbsp;&nbsp;&lt;META HTTP-EQUIV="Expires" CONTENT="0"&gt;<br />
&nbsp;&lt;/head&gt;<br />
&nbsp;&lt;body&gt;<br />
&nbsp;&nbsp;&lt;html:form action="/check"&gt;<br />
&nbsp;&nbsp;&lt;td&gt;&lt;img border=0 src="check/image.jsp"&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&lt;html:text property="rand"/&gt;&lt;html:errors property="rand"/&gt;&lt;br/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;html:submit/&gt;&lt;html:cancel/&gt;<br />
&nbsp;&nbsp;&lt;/html:form&gt;<br />
&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>&nbsp;</p>
<p><strong>checkok.jsp</strong></p>
<p>&lt;%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%&gt;<br />
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />
&lt;html&gt;<br />
&nbsp; &lt;head&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;meta http-equiv="pragma" content="no-cache"&gt;<br />
&nbsp;&lt;meta http-equiv="cache-control" content="no-cache"&gt;<br />
&nbsp;&lt;meta http-equiv="expires" content="0"&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&gt;<br />
&nbsp;&lt;meta http-equiv="description" content="This is my page"&gt;<br />
&nbsp;&lt;!--<br />
&nbsp;&lt;link rel="stylesheet" type="text/css" href="styles.css"&gt;<br />
&nbsp;--&gt;<br />
&nbsp; &lt;/head&gt;<br />
&nbsp; &lt;body&gt;<br />
&lt;% <br />
&nbsp;String rand = (String)session.getAttribute("rand");<br />
&nbsp;String input = request.getParameter("rand");<br />
&nbsp; if (rand.equals(input)) {<br />
%&gt;<br />
&lt;font color=green&gt;OK&lt;/font&gt;<br />
&lt;%<br />
&nbsp; } else {<br />
%&gt;<br />
&lt;font color=red&gt;FAIL&lt;/font&gt;<br />
&lt;%<br />
&nbsp; }<br />
%&gt;<br />
&nbsp; &lt;/body&gt;<br />
&lt;/html&gt;<br />
<br />
<strong>image.jsp</strong><br />
</p>
<p>&lt;%@ page language="java" import="java.util.*" %&gt;<br />
&lt;%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,javax.imageio.*" %&gt;<br />
&lt;%@ page import="java.io.OutputStream" %&gt;<br />
&lt;%!<br />
Color getRandColor(int fc,int bc){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Random random = new Random();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(fc&gt;255) fc=255;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(bc&gt;255) bc=255;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int r=fc+random.nextInt(bc-fc);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int g=fc+random.nextInt(bc-fc);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int b=fc+random.nextInt(bc-fc);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new Color(r,g,b);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
%&gt;<br />
&lt;%<br />
response.setHeader("Pragma","No-cache");<br />
response.setHeader("Cache-Control","no-cache");<br />
response.setDateHeader("Expires", 0);</p>
<p>int width=60, height=20;<br />
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);<br />
OutputStream os=response.getOutputStream();<br />
Graphics g = image.getGraphics();</p>
<p>Random random = new Random();</p>
<p><br />
g.setColor(getRandColor(200,250));<br />
g.fillRect(0, 0, width, height);</p>
<p>g.setFont(new Font("Times New Roman",Font.PLAIN,18));</p>
<p>g.setColor(getRandColor(160,200));<br />
for (int i=0;i&lt;155;i++)<br />
{<br />
&nbsp;int x = random.nextInt(width);<br />
&nbsp;int y = random.nextInt(height);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int xl = random.nextInt(12);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int yl = random.nextInt(12);<br />
&nbsp;g.drawLine(x,y,x+xl,y+yl);<br />
}</p>
<p>String sRand="";<br />
for (int i=0;i&lt;4;i++){<br />
&nbsp;&nbsp;&nbsp; String rand=String.valueOf(random.nextInt(10));<br />
&nbsp;&nbsp;&nbsp; sRand+=rand;</p>
<p>&nbsp;&nbsp;&nbsp; g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));<br />
&nbsp;&nbsp;&nbsp; g.drawString(rand,13*i+6,16);<br />
}</p>
<p>session.setAttribute("rand",sRand);</p>
<p>g.dispose();</p>
<p>ImageIO.write(image, "JPEG",os);<br />
os.flush();<br />
os.close();<br />
os=null;<br />
response.flushBuffer();<br />
out.clear();<br />
out = pageContext.pushBody();<br />
%&gt;</p>
<img src ="http://www.blogjava.net/lzj520/aggbug/176261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-01-18 16:09 <a href="http://www.blogjava.net/lzj520/archive/2008/01/18/176261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ssh上传并显示图片</title><link>http://www.blogjava.net/lzj520/archive/2008/01/17/176020.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Thu, 17 Jan 2008 09:44:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/01/17/176020.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/176020.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/01/17/176020.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/176020.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/176020.html</trackback:ping><description><![CDATA[使用的是将图片保存到服务器，并记录路径名的方式，代码如下：<br />
<br />
<strong>struts部分：<br />
</strong><br />
&nbsp;&lt;form-bean name="upfileForm" type="org.apache.struts.validator.DynaValidatorForm"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="filename" type="java.lang.String" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="filedata" type="org.apache.struts.upload.FormFile" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/form-bean&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;action<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; attribute="upfileForm"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input="/upload/uploadfile.jsp"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="upfileForm"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path="/upfile"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scope="request"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; validate="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="com.yourcompany.struts.action.UpfileAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="ok" path="/upload/ok.jsp" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;action path="/displayimg" type="com.yourcompany.struts.action.DisplayimgAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="ok" path="/upload/displayimg.jsp" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
<br />
<p>&nbsp;</p>
<p>public class UpfileAction extends Action {<br />
&nbsp;/*<br />
&nbsp; * Generated Methods<br />
&nbsp; */</p>
<p>&nbsp;/** <br />
&nbsp; * Method execute<br />
&nbsp; * @param mapping<br />
&nbsp; * @param form<br />
&nbsp; * @param request<br />
&nbsp; * @param response<br />
&nbsp; * @return ActionForward<br />
&nbsp; */<br />
&nbsp;public ActionForward execute(ActionMapping mapping, ActionForm form,<br />
&nbsp;&nbsp;&nbsp;HttpServletRequest request, HttpServletResponse response) {<br />
&nbsp;&nbsp;DynaActionForm upfileForm = (DynaActionForm) form;// TODO Auto-generated method stub&nbsp;&nbsp; <br />
&nbsp;&nbsp; Image image = new Image();</p>
<p>&nbsp;&nbsp; String strimgname = upfileForm.getString("filename");<br />
&nbsp;&nbsp; image.setImgname(strimgname);<br />
&nbsp;&nbsp; imageDAO.save(image);&nbsp;<br />
&nbsp;&nbsp;FormFile filedata = (FormFile)upfileForm.get("filedata");<br />
&nbsp;&nbsp; ServletContext servletContext = this.getServlet().getServletContext();<br />
&nbsp;&nbsp; String filePath = servletContext.getRealPath("/");<br />
&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; InputStream stream = filedata.getInputStream();<br />
&nbsp;&nbsp;&nbsp; OutputStream bos = new FileOutputStream(filePath + "/image/" + filedata.getFileName());<br />
&nbsp;&nbsp;&nbsp;&nbsp; int bytesRead = 0; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] buffer = new byte[8192]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ( (bytesRead = stream.read(buffer, 0, 8192)) != -1) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bos.write(buffer, 0, bytesRead); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bos.close(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stream.close();<br />
&nbsp;&nbsp; }catch (FileNotFoundException e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO Auto-generated catch block <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO Auto-generated catch block <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return mapping.findForward("ok");<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;private ImageDAO imageDAO;<br />
&nbsp;public void setImageDAO(ImageDAO dao){<br />
&nbsp;&nbsp;this.imageDAO = dao;&nbsp;&nbsp;<br />
&nbsp;}<br />
&nbsp;<br />
}</p>
<p><br />
&nbsp;</p>
<p>public class DisplayimgAction extends Action {<br />
&nbsp;/*<br />
&nbsp; * Generated Methods<br />
&nbsp; */</p>
<p>&nbsp;/** <br />
&nbsp; * Method execute<br />
&nbsp; * @param mapping<br />
&nbsp; * @param form<br />
&nbsp; * @param request<br />
&nbsp; * @param response<br />
&nbsp; * @return ActionForward<br />
&nbsp; */<br />
&nbsp;public ActionForward execute(ActionMapping mapping, ActionForm form,<br />
&nbsp;&nbsp;&nbsp;HttpServletRequest request, HttpServletResponse response) {<br />
&nbsp;&nbsp;// TODO Auto-generated method stub<br />
&nbsp;&nbsp;List results = imageDAO.findAll();<br />
&nbsp;&nbsp;if(results!=null){<br />
&nbsp;&nbsp;&nbsp;HttpSession session=request.getSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.setAttribute("results",results);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return mapping.findForward("ok");<br />
&nbsp;&nbsp;}return mapping.findForward("fail");<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;private ImageDAO imageDAO;<br />
&nbsp;public void setImageDAO(ImageDAO dao){<br />
&nbsp;&nbsp;this.imageDAO = dao;&nbsp;&nbsp;<br />
&nbsp;}<br />
&nbsp;<br />
}</p>
<p><br />
ImageDAO.java<br />
<br />
&nbsp;public void save(Image transientInstance) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; Session session =this.getSession(); <br />
&nbsp;&nbsp;&nbsp;&nbsp; Transaction tx = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp; tx = session.beginTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp; session.save(transientInstance);<br />
&nbsp;&nbsp;&nbsp;&nbsp; tx.commit();<br />
&nbsp;&nbsp;&nbsp;&nbsp; session.evict(transientInstance);<br />
&nbsp;}<br />
<br />
&nbsp;public List findAll() {<br />
&nbsp;&nbsp;Session session =this.getSession(); <br />
&nbsp;&nbsp;Query query = session.createQuery("from Image");<br />
&nbsp;&nbsp;return query.list();<br />
&nbsp;}<br />
<br />
displayimg.jsp<br />
<br />
&lt;logic:iterate id="element" name="results"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp; &lt;td width="100"&gt;&lt;bean:write name="element" property="id"/&gt; &lt;/td&gt;<br />
&nbsp;&nbsp; &lt;td width="100"&gt;&lt;img&nbsp; src="image/&lt;bean:write&nbsp; name='element' property='imgname'/&gt;"/&gt;&lt;/td&gt;<br />
&nbsp;&nbsp; &lt;/tr&gt;<br />
&lt;/logic:iterate&gt;<br />
<br />
uploadfile.jsp<br />
<br />
&lt;html:form action="/upfile" enctype = "multipart/form-data"&gt;<br />
&nbsp;&nbsp;&nbsp;filename : &lt;html:text&nbsp; property="filename"/&gt;&lt;html:errors property="filename"/&gt;&lt;br/&gt;<br />
&nbsp;&nbsp;&nbsp;filedata : &lt;html:file property="filedata"/&gt;&lt;html:errors property="filedata"/&gt;&lt;br/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;html:submit/&gt;&lt;html:cancel/&gt;<br />
&nbsp;&nbsp;&lt;/html:form&gt;<br />
<br />
</p>
<p>&lt;!-- u-f8 filter --&gt;<br />
&nbsp; &lt;filter&gt;<br />
&nbsp; &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;<br />
&nbsp; &lt;filter-class&gt;org.springframework.web.filter.CharacterEncodingFilter&lt;/filter-class&gt;<br />
&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp; &lt;param-name&gt;encoding&lt;/param-name&gt;<br />
&nbsp;&nbsp; &lt;param-value&gt;UTF-8&lt;/param-value&gt;<br />
&nbsp; &lt;/init-param&gt;<br />
&nbsp;&lt;/filter&gt;</p>
<p>&nbsp;&lt;filter-mapping&gt;<br />
&nbsp; &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;<br />
&nbsp; &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;<br />
&nbsp;&lt;/filter-mapping&gt;</p>
<p>&nbsp;&lt;filter-mapping&gt;<br />
&nbsp; &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;<br />
&nbsp; &lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt;<br />
&nbsp;&lt;/filter-mapping&gt;</p>
<img src ="http://www.blogjava.net/lzj520/aggbug/176020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-01-17 17:44 <a href="http://www.blogjava.net/lzj520/archive/2008/01/17/176020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CharacterEncodingFilter</title><link>http://www.blogjava.net/lzj520/archive/2008/01/15/175360.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Tue, 15 Jan 2008 01:36:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/01/15/175360.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/175360.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/01/15/175360.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/175360.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/175360.html</trackback:ping><description><![CDATA[<p>&nbsp;&lt;filter&gt;<br />
&nbsp;&nbsp;&lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&lt;filter-class&gt;org.springframework.web.filter.CharacterEncodingFilter&lt;/filter-class&gt;<br />
&nbsp;&nbsp;&lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;param-name&gt;encoding&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;param-value&gt;UTF-8&lt;/param-value&gt;<br />
&nbsp;&nbsp;&lt;/init-param&gt;<br />
&nbsp;&lt;/filter&gt;</p>
<p>&nbsp;&lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&lt;url-pattern&gt;*.do&lt;/url-pattern&gt;<br />
&nbsp;&lt;/filter-mapping&gt;</p>
<p>&nbsp;&lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt;<br />
&nbsp;&lt;/filter-mapping&gt;</p>
<img src ="http://www.blogjava.net/lzj520/aggbug/175360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-01-15 09:36 <a href="http://www.blogjava.net/lzj520/archive/2008/01/15/175360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SSH发送邮件的代码</title><link>http://www.blogjava.net/lzj520/archive/2008/01/14/175271.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Mon, 14 Jan 2008 10:10:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/01/14/175271.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/175271.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/01/14/175271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/175271.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/175271.html</trackback:ping><description><![CDATA[直接放代码上来，经过测试成功。使用gmail来作为测试，因为gmail不是使用25端口，并且需要ssl支持，所以需要声明这些部分。<br />
<br />
<strong>serviceContext-moudle_sendmail.xml：<br />
</strong><br />
&lt;beans&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="host" &gt; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;value&gt;smtp.gmail.com&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="javaMailProperties"&gt;<br />
&nbsp;&lt;props&gt;<br />
&nbsp;&lt;prop key="mail.smtp.auth"&gt;true&lt;/prop&gt; <br />
&nbsp;&nbsp; &lt;prop key="mail.smtp.socketFactory.class"&gt;javax.net.ssl.SSLSocketFactory&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;prop key="mail.smtp.socketFactory.fallback"&gt;false&lt;/prop&gt;<br />
&nbsp;&lt;prop key="mail.smtp.timeout"&gt;25000&lt;/prop&gt;<br />
&nbsp;&lt;/props&gt;<br />
&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;property name="port"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;465&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&lt;property name="username"&gt;<br />
&nbsp;&lt;value&gt;your_name@gmail.com&lt;/value&gt;<br />
&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;property name="password"&gt;<br />
&nbsp; &lt;value&gt;your_password&lt;/value&gt;<br />
&nbsp;&lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/bean&gt; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;bean id ="enrollmentMailMessage" class="org.springframework.mail.SimpleMailMessage"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="to"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;value&gt;abc@21cn.com&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="from"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;value&gt;your_name@gmail.com&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="subject"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;value&gt;spring mail test&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&lt;bean id="SendMail" class="com.yourcompany.service.SendMailImpl"&gt;<br />
&nbsp;&lt;property name="mailMessage"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;ref bean="enrollmentMailMessage"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&lt;property name="mailSender"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;ref bean="mailSender"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&lt;/bean&gt;<br />
&lt;/beans&gt;<br />
<br />
<strong>SendMailAction.java</strong><br />
<br />
public ActionForward execute(ActionMapping mapping, ActionForm form,<br />
&nbsp;&nbsp;&nbsp;HttpServletRequest request, HttpServletResponse response) {<br />
&nbsp;&nbsp;DynaActionForm sendMailForm = (DynaActionForm) form;// TODO Auto-generated method stub<br />
&nbsp;&nbsp;String strcontent = sendMailForm.getString("content");<br />
&nbsp;&nbsp;sendMail.sendmail(strcontent);<br />
&nbsp;&nbsp;return mapping.findForward("ok");<br />
&nbsp;}<br />
&nbsp;private SendMail sendMail;<br />
&nbsp;public void setSendMail(SendMail dao){<br />
&nbsp;&nbsp;this.sendMail = dao;&nbsp;&nbsp;<br />
&nbsp;}<br />
<br />
<strong>SendMail.java</strong><br />
<br />
public interface SendMail {<br />
&nbsp;public void sendmail(String content);<br />
}<br />
<br />
<strong>SendMailImpl.java</strong><br />
<p>public class SendMailImpl implements SendMail {<br />
private MailSender mailSender;<br />
public void setMailSender(MailSender mailSender){<br />
&nbsp;this.mailSender = mailSender;<br />
}<br />
&nbsp;private SimpleMailMessage mailMessage;<br />
&nbsp;public void setMailMessage(SimpleMailMessage mailMessage){<br />
&nbsp;&nbsp;this.mailMessage = mailMessage;<br />
&nbsp;}</p>
<p>&nbsp;public void sendmail(String content){<br />
&nbsp;&nbsp;SimpleMailMessage message = new SimpleMailMessage(this.mailMessage);<br />
&nbsp;&nbsp;StringBuffer messageText = new StringBuffer();<br />
&nbsp;&nbsp;messageText.append(content);<br />
&nbsp;&nbsp;message.setText(messageText.toString());<br />
&nbsp;&nbsp;mailSender.send(message);<br />
&nbsp;}<br />
}</p>
<br />
<strong>struts-config.xml</strong><br />
<br />
&nbsp;&nbsp;&nbsp; &lt;form-bean name="sendMailForm" type="org.apache.struts.validator.DynaValidatorForm"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="content" type="java.lang.String" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/form-bean&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;action<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; attribute="sendMailForm"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input="/sendmail/SendMail.jsp"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="sendMailForm"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path="/sendMail"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scope="request"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; validate="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="com.yourcompany.struts.action.SendMailAction" &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="ok" path="/sendmail/SendMailOk.jsp" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
<br />
<strong>SendMail.jsp</strong><br />
<br />
&nbsp;&nbsp;&lt;html:form action="/sendMail"&gt;<br />
&nbsp;&nbsp;&nbsp;content : &lt;html:text property="content"/&gt;&lt;html:errors property="content"/&gt;&lt;br/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;html:submit/&gt;&lt;html:cancel/&gt;<br />
&nbsp;&nbsp;&lt;/html:form&gt;<br />
<br />
<strong>validation.xml</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&lt;/form&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form name="sendMailForm"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;field property="content" depends="required"&gt; <br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;arg key="sendMailForm.content"/&gt;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;/field&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;/form&gt;
 <img src ="http://www.blogjava.net/lzj520/aggbug/175271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-01-14 18:10 <a href="http://www.blogjava.net/lzj520/archive/2008/01/14/175271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自己写了一个ssh分页</title><link>http://www.blogjava.net/lzj520/archive/2008/01/10/174373.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Thu, 10 Jan 2008 10:55:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/01/10/174373.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/174373.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/01/10/174373.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/174373.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/174373.html</trackback:ping><description><![CDATA[关于分页经验不是很多，让我来做分页，我习惯用这样的一种方法，以前用ASP和PHP的时候也是这样来处理的。也没怎么认真去检查是否科学，不过先做出来再说，交出一个不怎么好的作品总比交不出作品好。不好的话还可以去完善和优化嘛。<br />
<br />
首先，先创建一个显示每一页（有若干条数据）的方法（如下面的hfindAll方法），决定好每一页接收一个页码参数，然后显示该页码里的数据。比如有100条数据，那么分10页，那第几页显示第几条至第几条数据。然后再创建一个方法是用于在view层显示页数（如下面的amountPage方法），最后是在view层上为每一页数的数字加上超链接。 <br />
<br />
以下是主要代码：<br />
public class LoginDAO extends HibernateDaoSupport {<br />
private int PageSize =5;<br />
/*设置每页的数据条数*/<br />
<br />
&nbsp;public Integer amountPage(){<br />
&nbsp;&nbsp;&nbsp;&nbsp; Session session =this.getSession(); <br />
&nbsp;&nbsp;Query query = session.createQuery("from Login");<br />
&nbsp;&nbsp;query.setCacheable(true);<br />
&nbsp;&nbsp;int a = query.list().size()%PageSize;<br />
/*总记录数/每页数据数,判断是否能整除*/<br />
&nbsp;&nbsp;Integer&nbsp;amount;<br />
&nbsp;&nbsp;if(a!=0){<br />
&nbsp;&nbsp;&nbsp;amount = query.list().size()/PageSize+1;<br />
/*如果整除有余数，则页数加1*/<br />
&nbsp;&nbsp;}else{<br />
&nbsp;&nbsp;&nbsp;amount = query.list().size()/PageSize;<br />
/*如果整除没余数，则直接总记录数/每页数据数*/<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return amount;<br />
&nbsp;}<br />
<br />
&nbsp;public List hfindAll(String pagenum) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; Session session =this.getSession(); <br />
&nbsp;&nbsp;Query query = session.createQuery("from Login");<br />
&nbsp;&nbsp;if (pagenum == null){<br />
/*如果pagenum是空，则数据从第一条开始*/<br />
&nbsp;&nbsp;query.setFirstResult(0);<br />
/*设置查询开始的第几条数据，这里是从第1条开始*/<br />
&nbsp;&nbsp;query.setMaxResults(PageSize);<br />
/*设置查询数据条数，这里是5条*/<br />
&nbsp;&nbsp;query.setCacheable(true);<br />
/*设置一级缓存*/<br />
&nbsp;&nbsp;}else{<br />
&nbsp;&nbsp;&nbsp;Integer p = (Integer.valueOf(pagenum)-1) * PageSize;<br />
&nbsp;&nbsp;&nbsp;query.setFirstResult(p);<br />
&nbsp;&nbsp;&nbsp;query.setMaxResults(PageSize);<br />
&nbsp;&nbsp;&nbsp;query.setCacheable(true);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return query.list();<br />
&nbsp;}<br />
}<br />
<br />
然后需要解决的是一些数据传递，类型转换和在view层显示的问题，主要代码如下：<br />
<br />
在ACTION里：<br />
String strpagenum = request.getParameter("pagenum");<br />
&nbsp;&nbsp;List results= loginManage.hfind(strpagenum);<br />
&nbsp;&nbsp;Integer amountPage = loginManage.amountPage();<br />
&nbsp;&nbsp;&nbsp; if(results!=null){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpSession session=request.getSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.setAttribute("results",results);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.setAttribute("amountPage",amountPage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return mapping.findForward("ok");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return mapping.findForward("fail");<br />
<br />
在view视图里：<br />
显示每页数据的代码：<br />
<p>&nbsp;&lt;logic:iterate id="element" name="results"&gt;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp; &lt;td width="100"&gt;&lt;input type="checkbox" name="select" value="&lt;bean:write name="element" property="id"/&gt;"&gt;&lt;bean:write name="element" property="id"/&gt;&lt;/td&gt;<br />
&nbsp;&nbsp; &lt;td width="100"&gt;&lt;bean:write name="element" property="name"/&gt; &lt;/td&gt;<br />
&nbsp;&nbsp; &lt;td width="100"&gt;&lt;bean:write name="element" property="password"/&gt;&lt;/td&gt;<br />
&nbsp;&nbsp; &lt;/tr&gt;&lt;/logic:iterate&gt;<br />
<br />
显示页码的代码：<br />
&lt;%<br />
&nbsp;&nbsp; int i;<br />
&nbsp; int a=Integer.parseInt(session.getAttribute("amountPage").toString());<br />
&nbsp;&nbsp; for (i=1;i&lt;=a;i++){<br />
&nbsp;&nbsp; out.println("&lt;tr&gt;");&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;td&gt;&lt;a href='display.do?pagenum="+ i +"'&gt;"+ i +"&lt;/a&gt;&lt;/td&gt;");&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;/tr&gt;");&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; %&gt;</p>
<br />
 <img src ="http://www.blogjava.net/lzj520/aggbug/174373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-01-10 18:55 <a href="http://www.blogjava.net/lzj520/archive/2008/01/10/174373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring+hibernate里session的管理</title><link>http://www.blogjava.net/lzj520/archive/2008/01/10/174392.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Thu, 10 Jan 2008 10:41:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/01/10/174392.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/174392.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/01/10/174392.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/174392.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/174392.html</trackback:ping><description><![CDATA[在spring+hibernate的时候，控制台提示&#8220;unclosed connection,forgot to call close() on your session?&#8221;<br />
或者是[org.hibernate.jdbc.ConnectionManager] - &lt;finalizing with closed connection&gt;<br />
那是因为有可能是你自己手动创建了session，比如：<br />
<p>private static final SessionFactory sessionFactory;</p>
<p>&nbsp;&nbsp;&nbsp; static {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Create the SessionFactory from hibernate.cfg.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sessionFactory = new Configuration().configure().buildSessionFactory();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Throwable ex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Make sure you log the exception, as it might be swallowed<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println("Initial SessionFactory creation failed." + ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new ExceptionInInitializerError(ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
然后调用：<br />
</p>
<p>Session session = sessionFactory.openSession();<br />
Query query = session.createQuery("from Login");</p>
<p>类似这样的单独使用hibernate时的用法，是需要手工去关闭session的。没有关闭的话就会收到那样的警告。<br />
<span style="color: #000000"><br />
所以最好是使用spring管理的session，和OpenSessionInViewFilter，比如：<br />
Session session =this.getSession();<br />
然后在web.xml里加入<br />
&nbsp; &lt;filter&gt;<br />
&nbsp; &lt;filter-name&gt;OpenSessionInViewFilter&lt;/filter-name&gt;<br />
&nbsp; &lt;filter-class&gt;org.springframework.orm.hibernate3.support.OpenSessionInViewFilter&lt;/filter-class&gt;<br />
&nbsp; &lt;/filter&gt;<br />
&nbsp; &lt;filter-mapping&gt; <br />
&lt;filter-name&gt;OpenSessionInViewFilter&lt;/filter-name&gt; <br />
&lt;url-pattern&gt;/*&lt;/url-pattern&gt; <br />
&lt;/filter-mapping&gt; <br />
<br />
其中在spring里注册的sessionfactory必须是id="sessionFactory"，如果是id="SessionFactory"或者其他，会提示sessionFactory没有注册的错误，因为OpenSessionInViewFilter里注册的名必须为sessionFactory。<br />
</p>
</span>
 <img src ="http://www.blogjava.net/lzj520/aggbug/174392.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-01-10 18:41 <a href="http://www.blogjava.net/lzj520/archive/2008/01/10/174392.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>070921 继续acegi</title><link>http://www.blogjava.net/lzj520/archive/2007/09/21/146962.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Fri, 21 Sep 2007 01:11:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2007/09/21/146962.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/146962.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2007/09/21/146962.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/146962.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/146962.html</trackback:ping><description><![CDATA[spring1 的acegi里，今天在启动的时候，tomcat没有报错。不过在请求受保护的注册页面时tomcat提示/j_acegi_security_check出错。然后检查了，发现没有在web.xml里配置这个路径，于是在web.xml加入：<br />
<br />
&lt;filter&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;Acegi Filter Chain Proxy&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;net.sf.acegisecurity.util.FilterToBeanProxy&lt;/filter-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;targetClass&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;net.sf.acegisecurity.util.FilterChainProxy&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp; &lt;/filter&gt;<br />
&nbsp; <br />
&nbsp;&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;Acegi Filter Chain Proxy&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;<br />
&nbsp;&nbsp; &lt;/filter-mapping&gt;<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp; &lt;filter-name&gt;Acegi Filter Chain Proxy&lt;/filter-name&gt;<br />
&nbsp;&nbsp; &lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt;<br />
&nbsp;&nbsp; &lt;/filter-mapping&gt; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp; &lt;filter-name&gt;Acegi Filter Chain Proxy&lt;/filter-name&gt;<br />
&nbsp;&nbsp; &lt;url-pattern&gt;/j_acegi_security_check&lt;/url-pattern&gt;<br />
&nbsp;&nbsp; &lt;/filter-mapping&gt;<br />
<br />
就是acegi保护并认识这3类的url，但是再次发出页面请求的时候，tomcat没有报错。不过页面一直在读取进度，没有显示，郁闷喇 
<img src ="http://www.blogjava.net/lzj520/aggbug/146962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2007-09-21 09:11 <a href="http://www.blogjava.net/lzj520/archive/2007/09/21/146962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>070920 acegi实践</title><link>http://www.blogjava.net/lzj520/archive/2007/09/20/146691.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Thu, 20 Sep 2007 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2007/09/20/146691.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/146691.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2007/09/20/146691.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/146691.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/146691.html</trackback:ping><description><![CDATA[使用spring1 AOP为acegi添加拦截器的时候，使用spring2的包是会报错的。把spring1的包再加进去就可以了。
 <img src ="http://www.blogjava.net/lzj520/aggbug/146691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2007-09-20 10:08 <a href="http://www.blogjava.net/lzj520/archive/2007/09/20/146691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>070807 HibernateTemplate删除数据小结</title><link>http://www.blogjava.net/lzj520/archive/2007/08/07/134891.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Tue, 07 Aug 2007 02:57:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2007/08/07/134891.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/134891.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2007/08/07/134891.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/134891.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/134891.html</trackback:ping><description><![CDATA[删除<br>DAO代码：<br>&nbsp;public void delete(Integer lid) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.debug("deleting Login instance");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Login login=(Login)this.getHibernateTemplate().load(Login.class,lid);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getHibernateTemplate().delete(login);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.debug("delete successful");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (RuntimeException re) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.error("delete failed", re);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw re;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br><br>调用DAO：<br>Integer selid = Integer.valueOf(request.getParameter("select"));<br>loginDAO.delete(selid);<br><br>批量删除<br>需要注意的是in后面跟的是字符串，如果不是会提示org.hibernate.QueryException: unexpected char: ';'的出错<br>DAO代码：<br>public void delete(String[] lid) {<br>&nbsp;&nbsp;&nbsp; String[] ids = lid;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str="";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;ids.length;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str+="'"+ids[i]+"'";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(i!=(ids.length-1))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str+=",";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;List list&nbsp;&nbsp; =&nbsp;&nbsp; this.getHibernateTemplate().find("from Login where id in ("+str+")");<br>&nbsp;&nbsp;if(list.size()&gt;0){&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; this.getHibernateTemplate().deleteAll(list);<br>&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;}<br><br>调用DAO：<br>String[] lid = request.getParameterValues("select"); <br>loginDAO.delete(lid); 
<img src ="http://www.blogjava.net/lzj520/aggbug/134891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2007-08-07 10:57 <a href="http://www.blogjava.net/lzj520/archive/2007/08/07/134891.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>070621 SSH一些出错小结（不断更新）</title><link>http://www.blogjava.net/lzj520/archive/2007/06/21/125513.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Thu, 21 Jun 2007 04:01:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2007/06/21/125513.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/125513.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2007/06/21/125513.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/125513.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/125513.html</trackback:ping><description><![CDATA[<p>Spring Hibernate在AOP方面的配置冲突<br>Spring2.0 Hibernate3.1.x/Hibernate3.2<br><br>在使用Spring的AOP编程时，会用到这几个lib：<br>asm-2.2.2.jar<br>asm-commons-2.2.2.jar<br>asm-util-2.2.2.jar<br><br>Hibernate如果使用lib：<br>asm.jar<br>asm-attrs.jar<br><br>其中asm-2.2.2.jar与asm.jar存在类上的冲突！！！<br>使用其中之一或两者都使用，可能会出现如下错误：<br>java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor<br>java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor<br>java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit。。。。。。<br><br>解决办法是：<br>1）.去掉类路径上的关于Hibernate的3个lib<br>asm.jar<br>asm-attrs.jar<br>cglib-2.1.3.jar<br>2）.加入Spring中的以下4个lib<br>asm-2.2.2.jar<br>asm-commons-2.2.2.jar<br>asm-util-2.2.2.jar<br>cglib-nodep-2.1_3.jar<br><br>如果再不行，都试试删删看。<br><br><br>java.lang.SecurityException: class "javax.xml.bind.JAXBContext"'s signer information does not match signer information of other classes in the same package<br>这个错误是因为载入的包里面有两个相同路径的类，就是在一个包里面有两个同名的类<br>有可能是将相同的包载入两次或者把包解开后，先将jar文件载入了，后又将解开的类载入了<br><br><br>Error configuring application listener of class org.springframework.web.context.ContextLoaderListener<br>试试自己去下一个spring的包，把包里的spring.jar加到项目里去。eclipse生成的时候可能会有些包没有放进去。<br><br><br>Error creating bean with name 'datasource' defined in file<br>Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool<br>试试将commons-dbcp.jar，commons-pool.jar和commons- collections.jar加入CLASSPATH中<br><br><br>hibernate 3.1 中的hibernateTemplate ，class应该为org.springframework.orm.hibernate3.HibernateTemplate，而非org.springframework.orm.hibernate.HibernateTemplate，因为某些原因我现在还用3.1，早前在玩springside的时候感觉hibernate 3.2 的Hibernate Annotations方便多了。<br><br>找不到action或报错的另一少有原因，一些版本hibernate版本会有些冲突方面的问题，可换一版本的hibernate试试，个人感觉hibernate的版本对应用会比较敏感 <br><br><br><font color=#008080><span style="COLOR: #000000">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<br>java.lang.NoClassDefFoundError: javax/transaction/TransactionManager</span><br><br></font>原因：缺少jta.jar&nbsp;或者是找不到hbm.xml文件导致sessionfactory出错,检查hbm文件路径是否正确,文件是否存在<br>&lt;property name="mappingResources"&gt;<br>&nbsp;&nbsp;&lt;list&gt;<br>&nbsp;&nbsp;&lt;value&gt;com/yourcompany/model/Login.hbm.xml<br>&nbsp;&nbsp;&lt;/value&gt;<br>&nbsp;&nbsp;&lt;/list&gt;<br>&nbsp;&nbsp;&lt;/property&gt; <br><br><br>2007-06-26 18:38:13,671 ERROR [com.yourcompany.model.dao.LoginDAO] - &lt;save failed&gt;<br>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<br>java.sql.SQLException: Table 'mysql.mysql__login' doesn't exist<br><br>把hbm文件里面的catalog="'mysql"去掉即可！<br>另注意的一点是eclipse生成的DAO文件应该是：<br>&nbsp;&nbsp;&nbsp; public void save(Login transientInstance) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.debug("saving Login instance");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getHibernateTemplate().save(transientInstance);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.debug("save successful");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (RuntimeException re) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.error("save failed", re);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw re;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>而不是原来的&nbsp;&nbsp;&nbsp; public void save(LoginDAO transientInstance) <br><br>只要在applicationContext.xml中加上 <br>&lt;property name="mappingResources"&gt; <br>&lt;list&gt; <br>&lt;value&gt;com/yourcompany/hibernate/Users.hbm.xml&lt;/value&gt; <br>&lt;/list&gt; <br>&lt;/property&gt; <br>加这段代码就会找不到action<br>换一个版本的hibernate应该就ok<br><br><br>Invalid path /addcustomer was requested<br>输入的路径不正确，检查spring中注册的action的路径和输入的路径是否一致，留意大小写是否一致</p>
<img src ="http://www.blogjava.net/lzj520/aggbug/125513.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2007-06-21 12:01 <a href="http://www.blogjava.net/lzj520/archive/2007/06/21/125513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>070615 struts中spring载入小结</title><link>http://www.blogjava.net/lzj520/archive/2007/06/15/124458.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Fri, 15 Jun 2007 04:16:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2007/06/15/124458.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/124458.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2007/06/15/124458.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/124458.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/124458.html</trackback:ping><description><![CDATA[如果是在struts-config.xml中直接写为 &lt;plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"/&gt;&nbsp; ，则是默认配置文件为在WEB-INF下的action-servlet.xml文件，可在action-servlet.xml中再截入各个action bean的配置，如&lt;import resource="modules/spring-config-login.xml"/&gt;等。<br>另外service的配置和applicationContext.xml或sping相关的数据库文件，可自己建立一个目录，然后在web.xml中加载&nbsp;&nbsp;&nbsp; &lt;context-param&gt; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;classpath*:spring/*.xml&lt;/param-value&gt; <br>&nbsp;&nbsp;&nbsp; &lt;/context-param&gt;&nbsp;&nbsp; <br>这样将web层和service层的配置分开摆放，看起来比较清晰。具体可参考springside的example<br><br>另一方法是struts-config中直接写 &lt;plug-in&nbsp; className="org.springframework.web.struts.ContextLoaderPlugIn"&gt;&nbsp; <br>&lt;set-property property="contextConfigLocation"&nbsp; value="classpath*:spring/*.xml"/&gt;&nbsp; <br>&lt;/plug-in&gt;<br>这样将所有的配置文件直接放在spring目录下<br><br>或小型应用可简单写成最直接的&lt;plug-in className= "org.springframework.web.struts.ContextLoaderPlugIn"&gt; &lt;set-property property= "contextConfigLocation" value="/WEB-INF/applicationContext.xml"/&gt; <br><br><br>不过多句提醒下记得不要漏了web.xml中还应有&nbsp;&nbsp;&nbsp; &lt;listener&gt;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;&nbsp; <br>&nbsp;&lt;/listener&gt;&nbsp; <br><br>struts-config.xml中还应有：<br>&nbsp;&lt;controller&gt;<br>&nbsp;&nbsp;&lt;set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/&gt;<br>&nbsp;&lt;/controller&gt; 
<img src ="http://www.blogjava.net/lzj520/aggbug/124458.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2007-06-15 12:16 <a href="http://www.blogjava.net/lzj520/archive/2007/06/15/124458.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）spring中配置log4j</title><link>http://www.blogjava.net/lzj520/archive/2006/09/26/71918.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Tue, 26 Sep 2006 02:54:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2006/09/26/71918.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/71918.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2006/09/26/71918.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/71918.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/71918.html</trackback:ping><description><![CDATA[<p>利用Spring框架编程，console打印出log4j:WARN Please initialize the log4j system properly？ <br>说明你的log4j.properties没有配置。请把log4j.properties放到工程的classpath中，eclipse的classpath为bin目录，由于编译后src目录下的文件会拷贝到bin目录下，所以你可以把log4j.properties放到src目录下。 <br>这里给出一个log4j.properties的例子：</p>
<p>log4j.rootLogger=DEBUG,stdout <br>log4j.appender.stdout=org.apache.log4j.ConsoleAppender <br>log4j.appender.stdout.layout=org.apache.log4j.PatternLayout <br>log4j.appender.stdout.layout.ConversionPattern=%d %5p (%F:%L) - %m%n</p>
<p><br>在spring中如何配置的log4j<br>在web.xml中加入以下代码即可。 <br>&lt;context-param&gt; <br>&lt;param-name&gt;log4jConfigLocation&lt;/param-name&gt; <br>&lt;param-value&gt;/WEB-INF/log4j.properties&lt;/param-value&gt; <br>&lt;/context-param&gt;</p>
<img src ="http://www.blogjava.net/lzj520/aggbug/71918.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2006-09-26 10:54 <a href="http://www.blogjava.net/lzj520/archive/2006/09/26/71918.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>