﻿<?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>IT博客-stormbigboy-文章分类-web </title><link>http://www.cnitblog.com/strombigboy/category/7948.html</link><description>【Amos】工作室</description><language>zh-cn</language><lastBuildDate>Tue, 04 Oct 2011 05:04:23 GMT</lastBuildDate><pubDate>Tue, 04 Oct 2011 05:04:23 GMT</pubDate><ttl>60</ttl><item><title>Log4j配置教程</title><link>http://www.cnitblog.com/strombigboy/articles/62040.html</link><dc:creator>流浪汉</dc:creator><author>流浪汉</author><pubDate>Wed, 21 Oct 2009 06:05:00 GMT</pubDate><guid>http://www.cnitblog.com/strombigboy/articles/62040.html</guid><wfw:comment>http://www.cnitblog.com/strombigboy/comments/62040.html</wfw:comment><comments>http://www.cnitblog.com/strombigboy/articles/62040.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/strombigboy/comments/commentRss/62040.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/strombigboy/services/trackbacks/62040.html</trackback:ping><description><![CDATA[<p>[Log4j] 配置Log4jLog4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的，它可接key=value格式的设置或xml格式的设置信息。通过配置，可以创建出Log4J的运行环境。</p>
<p>1. 配置文件<br>Log4J配置文件的基本格式如下： </p>
<p>&nbsp;#配置根Logger<br>log4j.rootLogger&nbsp; =&nbsp;&nbsp; [ level ]&nbsp;&nbsp; ,&nbsp; appenderName1 ,&nbsp; appenderName2 ,&nbsp; &#8230;</p>
<p>#配置日志信息输出目的地Appender<br>log4j.appender.appenderName&nbsp; =&nbsp; fully.qualified.name.of.appender.class <br>　　log4j.appender.appenderName.option1&nbsp; =&nbsp; value1 <br>　　&#8230; <br>　　log4j.appender.appenderName.optionN&nbsp; =&nbsp; valueN </p>
<p>#配置日志信息的格式（布局）<br>log4j.appender.appenderName.layout&nbsp; =&nbsp; fully.qualified.name.of.layout.class <br>　　log4j.appender.appenderName.layout.option1&nbsp; =&nbsp; value1 <br>　　&#8230; <br>　　log4j.appender.appenderName.layout.optionN&nbsp; =&nbsp; valueN&nbsp; <br>其中 [level] 是日志输出级别，共有5级：<br>&nbsp;FATAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; <br>ERROR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp; <br>WARN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp; <br>INFO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp; <br>DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7 <br>&nbsp;<br>Appender 为日志输出目的地，Log4j提供的appender有以下几种：<br>&nbsp;org.apache.log4j.ConsoleAppender（控制台），<br>org.apache.log4j.FileAppender（文件），<br>org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件），<br>org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件），<br>org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方） <br>Layout：日志输出格式，Log4j提供的layout有以下几种：<br>&nbsp;org.apache.log4j.HTMLLayout（以HTML表格形式布局），<br>org.apache.log4j.PatternLayout（可以灵活地指定布局模式），<br>org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），<br>org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息） <br>打印参数: Log4J采用类似C语言中的printf函数的打印格式格式化日志信息，如下:<br>&nbsp;　　%m&nbsp;&nbsp; 输出代码中指定的消息<br>　　%p&nbsp;&nbsp; 输出优先级，即DEBUG，INFO，WARN，ERROR，FATAL <br>　　%r&nbsp;&nbsp; 输出自应用启动到输出该log信息耗费的毫秒数 <br>　　%c&nbsp;&nbsp; 输出所属的类目，通常就是所在类的全名 <br>　　%t&nbsp;&nbsp; 输出产生该日志事件的线程名 <br>　　%n&nbsp;&nbsp; 输出一个回车换行符，Windows平台为&#8220;\r\n&#8221;，Unix平台为&#8220;\n&#8221; <br>　　%d&nbsp;&nbsp; 输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyy MMM dd HH:mm:ss , SSS}，输出类似：2002年10月18日&nbsp; 22 ： 10 ： 28 ， 921&nbsp; <br>　　%l&nbsp;&nbsp; 输出日志事件的发生位置，包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main(TestLog4.java: 10 )&nbsp; <br>2. 在代码中初始化Logger: <br>1）在程序中调用BasicConfigurator.configure()方法：给根记录器增加一个ConsoleAppender，输出格式通过PatternLayout设为"%-4r [%t] %-5p %c %x - %m%n"，还有根记录器的默认级别是Level.DEBUG. <br>2）配置放在文件里，通过命令行参数传递文件名字，通过PropertyConfigurator.configure(args[x])解析并配置；<br>3）配置放在文件里，通过环境变量传递文件名等信息，利用log4j默认的初始化过程解析并配置；<br>4）配置放在文件里，通过应用服务器配置传递文件名等信息，利用一个特殊的servlet来完成配置。</p>
<p>3. 为不同的 Appender 设置日志输出级别：<br>当调试系统时，我们往往注意的只是异常级别的日志输出，但是通常所有级别的输出都是放在一个文件里的，如果日志输出的级别是BUG！？那就慢慢去找吧。<br>这时我们也许会想要是能把异常信息单独输出到一个文件里该多好啊。当然可以，Log4j已经提供了这样的功能，我们只需要在配置中修改Appender的Threshold 就能实现,比如下面的例子：</p>
<p>[配置文件]<br>&nbsp;### set log levels ###<br>log4j.rootLogger = debug ,&nbsp; stdout ,&nbsp; D ,&nbsp; E</p>
<p>### 输出到控制台 ###<br>log4j.appender.stdout = org.apache.log4j.ConsoleAppender<br>log4j.appender.stdout.Target = System.out<br>log4j.appender.stdout.layout = org.apache.log4j.PatternLayout<br>log4j.appender.stdout.layout.ConversionPattern =&nbsp; %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n</p>
<p>### 输出到日志文件 ###<br>log4j.appender.D = org.apache.log4j.DailyRollingFileAppender<br>log4j.appender.D.File = logs/log.log<br>log4j.appender.D.Append = true<br>log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志<br>log4j.appender.D.layout = org.apache.log4j.PatternLayout<br>log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}&nbsp; [ %t:%r ] - [ %p ]&nbsp; %m%n</p>
<p>### 保存异常信息到单独文件 ###<br>log4j.appender.D = org.apache.log4j.DailyRollingFileAppender<br>log4j.appender.D.File = logs/error.log ## 异常日志文件名<br>log4j.appender.D.Append = true<br>log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!<br>log4j.appender.D.layout = org.apache.log4j.PatternLayout<br>log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}&nbsp; [ %t:%r ] - [ %p ]&nbsp; %m%n <br>[代码中使用] <br>&nbsp; public&nbsp;&nbsp; class&nbsp; TestLog4j&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;&nbsp; static&nbsp;&nbsp; void&nbsp; main(String[] args)&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PropertyConfigurator.configure( " D:/Code/conf/log4j.properties " );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Logger logger&nbsp; =&nbsp; Logger.getLogger(TestLog4j. class );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug( " debug " );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.error( " error " );<br>&nbsp;&nbsp;&nbsp; } <br>} <br>运行一下，看看异常信息是不是保存在了一个单独的文件error.log中。 <br></p>
<img src ="http://www.cnitblog.com/strombigboy/aggbug/62040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/strombigboy/" target="_blank">流浪汉</a> 2009-10-21 14:05 <a href="http://www.cnitblog.com/strombigboy/articles/62040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring2.5注解笔记</title><link>http://www.cnitblog.com/strombigboy/articles/61793.html</link><dc:creator>流浪汉</dc:creator><author>流浪汉</author><pubDate>Tue, 13 Oct 2009 03:11:00 GMT</pubDate><guid>http://www.cnitblog.com/strombigboy/articles/61793.html</guid><wfw:comment>http://www.cnitblog.com/strombigboy/comments/61793.html</wfw:comment><comments>http://www.cnitblog.com/strombigboy/articles/61793.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/strombigboy/comments/commentRss/61793.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/strombigboy/services/trackbacks/61793.html</trackback:ping><description><![CDATA[<p>深入的学习springside，并且由于项目的需要，和在项目中深切体会到大量的&lt;bean/&gt;标签的繁琐。故学习起spring的注解。</p>
<p>一句话：对开发人员来说：最常用的Spring2.5最常用的注解就4个：</p>
<p>@Resource&nbsp;&nbsp; @Qualifier&nbsp;&nbsp; @Service&nbsp; @Repository </p>
<p>由于项目中用到的是spring 2.5，和原来的spring2.0配置多少是有点出入的。</p>
<p>步骤：</p>
<p>1.导包。</p>
<p>将spring.jar 和 common-logging.jar。就两个包？对，就两个包。对于spring2.0不推荐用的标注，如@Autowired，@Component&nbsp; 咱就不用了，直接用推荐的。</p>
<p>3.建工程。为了测试@Repository 和@Service标签，我按以下结构建包。</p>
<p>src|---entity|---User.java</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; |--service|--UserServiceIf.java</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |--impl--|</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --UserServiceImpl.java</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; |--dao----|--UserDaoIf.java</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |--impl--|</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---UserDaoImpl.java</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Class:User.java</p>
<p>package com.fun.entity;</p>
<p>import org.apache.commons.lang.builder.ToStringBuilder;</p>
<p>public class User {<br>&nbsp;private Long id;<br>&nbsp;private String name;<br>&nbsp;private String password;<br>&nbsp;public Long getId() {<br>&nbsp; return id;<br>&nbsp;}<br>&nbsp;public void setId(Long id) {<br>&nbsp; this.id = id;<br>&nbsp;}<br>&nbsp;public String getName() {<br>&nbsp; return name;<br>&nbsp;}<br>&nbsp;public void setName(String name) {<br>&nbsp; this.name = name;<br>&nbsp;}<br>&nbsp;public String getPassword() {<br>&nbsp; return password;<br>&nbsp;}<br>&nbsp;public void setPassword(String password) {<br>&nbsp; this.password = password;<br>&nbsp;}<br>&nbsp;public User(){}<br>&nbsp;public String toString(){<br>&nbsp; return ToStringBuilder.reflectionToString(this);//需要加common-lang.jar<br>&nbsp;}</p>
<p>&nbsp;</p>
<p>Class：UserServiceIf.java</p>
<p>package com.fun.service;</p>
<p>&nbsp;</p>
<p>public interface UserServiceIf&lt;User,Serializable&gt; {</p>
<p>&nbsp;&nbsp;&nbsp; public void register(User user);</p>
<p>}</p>
<p>&nbsp;</p>
<p>Class:UserServiceImpl.java</p>
<p>package com.fun.service.impl;</p>
<p>import javax.annotation.Resource;</p>
<p>&nbsp;</p>
<p>import org.springframework.beans.factory.annotation.Qualifier;</p>
<p>import org.springframework.stereotype.Service;</p>
<p>&nbsp;</p>
<p>import com.fun.dao.UserDao;</p>
<p>import com.fun.entity.User;</p>
<p>import com.fun.service.UserService;</p>
<p>@Service("userService")</p>
<p>public class UserServiceImpl implements UserService&lt;User,Long&gt; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private UserDao&lt;User,Long&gt; userDao;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void register(User user) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userDao.save(user);</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public UserDao&lt;User,Long&gt; getUserDao() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return userDao;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Resource</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setUserDao(UserDao&lt;User,Long&gt; userDao) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.userDao = userDao;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Class:UserDaoIf.java</p>
<p>package com.fun.dao;</p>
<p>&nbsp;</p>
<p>public interface UserDaoIf&lt;User,Serializable &gt; {</p>
<p>&nbsp;&nbsp;&nbsp; public void save(User user);</p>
<p>}</p>
<p>Class:UserDaoImpl.java</p>
<p>package com.fun.dao.impl;</p>
<p>&nbsp;</p>
<p>import java.io.Serializable;</p>
<p>&nbsp;</p>
<p>import org.springframework.stereotype.Repository;</p>
<p>import org.springframework.util.Assert;</p>
<p>&nbsp;</p>
<p>import com.fun.dao.UserDao;</p>
<p>import com.fun.entity.User;</p>
<p>@Repository("userDao")</p>
<p>public class UserDaoImpl implements UserDao&lt;User,Serializable&gt; {</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void save(User user) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.notNull(user);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(user);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(null==user.getId()){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("save User");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("update User");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>applicationContext.xml</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</p>
<p>&lt;beans xmlns="<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a>" </p>
<p>&nbsp;&nbsp;&nbsp; xmlns:context="<a href="http://www.springframework.org/schema/context">http://www.springframework.org/schema/context</a>"</p>
<p>&nbsp;&nbsp;&nbsp; xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>"</p>
<p>&nbsp;&nbsp;&nbsp; xsi:schemaLocation="<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a> <a href="http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">http://www.springframework.org/schema/beans/spring-beans-2.5.xsd</a>&nbsp; <a href="http://www.springframework.org/schema/context">http://www.springframework.org/schema/context</a> <a href="http://www.springframework.org/schema/context/spring-context-2.5.xsd">http://www.springframework.org/schema/context/spring-context-2.5.xsd</a>"</p>
<p>&nbsp;&nbsp;&nbsp; default-lazy-init="true"&gt;</p>
<p>&lt;!-- 支持标注 --&gt;</p>
<p>&lt;context:annotation-config/&gt;</p>
<p>&lt;!-- 扫描用标注的包 --&gt;</p>
<p>&lt;context:component-scan base-package="com.fun"/&gt;</p>
<p>&nbsp;&lt;/beans&gt;</p>
<p>注：这里有个小插曲，之前一直运行没有通过，老是报org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 8 in XML document from URL [file:/E:/workspace/SpringTest-java/bin/applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'context:annotation-config'.</p>
<p>后来才发现，原因是：在MyEclipse生成的XML头中，只加了context的命名空间，忘了加Context的Location Hint 如果没有加的话，则在 xsi:schemaLocation中没有<a href="http://www.springframework.org/schema/context">http://www.springframework.org/schema/context</a> <a href="http://www.springframework.org/schema/context/spring-context-2.5.xsd">http://www.springframework.org/schema/context/spring-context-2.5.xsd</a></p>
<p>这两句，从而报错。</p>
<p>Class：Test.java</p>
<p>package com.fun.test;</p>
<p>&nbsp;</p>
<p>import org.springframework.context.ApplicationContext;</p>
<p>import org.springframework.context.support.ClassPathXmlApplicationContext;</p>
<p>&nbsp;</p>
<p>import com.fun.eg.SimpleMan;</p>
<p>import com.fun.entity.User;</p>
<p>import com.fun.service.UserService;</p>
<p>&nbsp;</p>
<p>public class Test {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @SuppressWarnings("unchecked")</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String[] args) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User user=new User();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setName("springTest");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setPassword("123");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ApplicationContext ac=new ClassPathXmlApplicationContext("classpath*:applicationContext.xml");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setId(1234L);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UserService&lt;User, Long&gt; us=(UserService&lt;User,Long&gt;)ac.getBean("userService");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; us.register(user);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>}</p>
<p>四，上述是可运行代码。可以先小试牛刀一下。</p>
<p>五．先看看不用注解的写法。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&lt;bean id="userDao" class="com.fun.dao.impl.UserDaoImpl"/&gt;</p>
<p>&lt;bean id="userService" class="com.fun.service.impl.UserServiceImpl"&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;property name="userDao" ref="userDao"/&gt;</p>
<p>&lt;/bean&gt;</p>
<p>其中:在UserDaoImpl中的@Repository(&#8220;userDao&#8221;) 等于</p>
<p>&lt;bean id="userDao" class="com.fun.dao.impl.UserDaoImpl"/&gt;</p>
<p>&nbsp;在UserServiceImpl中的@Service(&#8220;userService&#8221;)等于</p>
<p>&lt;bean id="userService" class="com.fun.service.impl.UserServiceImpl"/&gt;</p>
<p>在 UserServiceImpl中的@Resource等于</p>
<p>&lt;property name="userDao" ref="userDao"/&gt;</p>
<p>在Spring的注解中 采用了 Convertion over Configuration(约定优于配置)的方式。但是，如果在UserDaoImpl中写成@Repository（&#8221;myUserDao&#8221;）</p>
<p>那么按原来的写法就会报BeanCreationException，因为我们在UserServiceImpl中写的是userDao，这时，@Qualifier就派上用场了，UserSImpl的setUserDao方法中应改写成</p>
<p>@Resource</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setUserDao(@Qualifier(&#8220;myUserDao&#8221;)UserDao&lt;User,Long&gt; userDao) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.userDao = userDao;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>参考：</p>
<p><a href="http://macrochen.javaeye.com/blog/323667">http://macrochen.javaeye.com/blog/323667</a></p>
<p><a href="http://www.javaeye.com/topic/295348">http://www.javaeye.com/topic/295348</a></p>
<p>&nbsp;</p>
<p>发表于 @ 2009年10月13日　09:41:00 | 评论( 0 ) | 编辑| 举报| 收藏 </p>
<p>旧一篇:马云语录 经典</p>
<p>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/Beacher_Ma/archive/2009/10/13/4662421.aspx">http://blog.csdn.net/Beacher_Ma/archive/2009/10/13/4662421.aspx</a></p>
<img src ="http://www.cnitblog.com/strombigboy/aggbug/61793.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/strombigboy/" target="_blank">流浪汉</a> 2009-10-13 11:11 <a href="http://www.cnitblog.com/strombigboy/articles/61793.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2.0+spring2.5+JDBC  连接数据库</title><link>http://www.cnitblog.com/strombigboy/articles/55327.html</link><dc:creator>流浪汉</dc:creator><author>流浪汉</author><pubDate>Thu, 12 Mar 2009 12:37:00 GMT</pubDate><guid>http://www.cnitblog.com/strombigboy/articles/55327.html</guid><wfw:comment>http://www.cnitblog.com/strombigboy/comments/55327.html</wfw:comment><comments>http://www.cnitblog.com/strombigboy/articles/55327.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/strombigboy/comments/commentRss/55327.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/strombigboy/services/trackbacks/55327.html</trackback:ping><description><![CDATA[<p>前段时间尝试用 struts2.0+spring2.5+JDBC&nbsp; 连接数据库，开始怎样也搞不清在Spring里面怎样配置JDBC ,几经辛苦，终于学会了，而且明白了为什么要这样配置。在此和大家分享一下。<br><br>Spring 这东西是用来控制业务逻辑的。要配置的话，首先要导包，至于要导哪些包，我会在另外一篇文章里面写到，其实，我自己配的时候也是按照别人的文章说的步骤来配置的。所以，没什么好说。<br><br>事不宜迟，来看看 Spring 的配置文档是怎样写的，在Spring 的例子里找到ApplicationContext.xml （在哪里？用windows搜索一下 Spring&nbsp; &nbsp;的目录就好了。）找到后，复制到自己的工程下，把多余的东西删掉，只留下<br><br>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;beans xmlns="<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a>" xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>"<br>&nbsp;xmlns:jee="<a href="http://www.springframework.org/schema/jee">http://www.springframework.org/schema/jee</a>" xmlns:tx="<a href="http://www.springframework.org/schema/tx">http://www.springframework.org/schema/tx</a>"<br>&nbsp;xmlns:context="<a href="http://www.springframework.org/schema/context">http://www.springframework.org/schema/context</a>"<br>&nbsp;xsi:schemaLocation="<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a> <a href="http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">http://www.springframework.org/schema/beans/spring-beans-2.5.xsd</a> <a href="http://www.springframework.org/schema/tx">http://www.springframework.org/schema/tx</a> <a href="http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">http://www.springframework.org/schema/tx/spring-tx-2.5.xsd</a> <a href="http://www.springframework.org/schema/jee">http://www.springframework.org/schema/jee</a> <a href="http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">http://www.springframework.org/schema/jee/spring-jee-2.5.xsd</a> <a href="http://www.springframework.org/schema/context">http://www.springframework.org/schema/context</a> <a href="http://www.springframework.org/schema/context/spring-context-2.5.xsd">http://www.springframework.org/schema/context/spring-context-2.5.xsd</a>"<br>&nbsp;default-lazy-init="true"&gt;<br>&nbsp; <br>&nbsp; </p>
<p>// 具体设置在这里</p>
<p>&nbsp;</p>
<p>&lt;/beans&gt;<br><br>然后，把以下代码复制到这个xml文件里面，就好了，Spring 对 JDBC 的支持就算配好了。<br><br><br><br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; &lt;!-- Jdbc 事务控制器--&gt;<br>&nbsp;&lt;bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt;<br>&nbsp;&nbsp; &lt;property name="dataSource" ref="dataSource"/&gt;<br>&nbsp;&lt;/bean&gt;<br>&nbsp;<br>&lt;!-- 数据库连接配置 --&gt;</p>
<p>&lt;bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt;<br>&lt;property name="url" value="jdbc:microsoft:sqlserver://localhost:1433;database='BSOA'"&gt;&lt;/property&gt;<br>&lt;property name="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver"&gt;&lt;/property&gt;<br>&lt;property name="username" value="ydManager"&gt;&lt;/property&gt;<br>&lt;property name="password" value="ydManager"&gt;&lt;/property&gt;<br>&lt;/bean&gt;<br><br>然后在你的工程里面创建一个实现 "dataSourceTransactionManager&nbsp;的类，我这里&nbsp;的类是&#8220;connectImp&#8221;&nbsp; 再把那个类里面的属性con 通过dataSourceTransactionManager&nbsp;进行注入。具体配置如下：<br><br>&nbsp; &lt;bean id="connectImp" class="com.yd.workstation.contorls.DB_Connection"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="con" ref="dataSourceTransactionManager"&gt;&lt;/property&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br>&nbsp;&nbsp;&nbsp; 然后创建一个Action 也把Action 配置到 ApplicationContext.xml 里面。具体代码如下：<br><br>&nbsp;&lt;bean id="sqlcon" class="com.yd.workstation.struts.LoginAction"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="sqlcon" ref="connectImp"&gt;&lt;/property&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/bean<br><br>这个类里面有一个属性，sqlcon,是com.yd.workstation.contorls.DB_Connection 类的，所以要通过上面的connectImp来注入，这样，一层一层地注入，把业务，数据操作，视图分开了，实现了MVC 模型。<br><br>由于我是初学，所以很多东西都说不清楚，大家不要见怪。<br></p>
<img src ="http://www.cnitblog.com/strombigboy/aggbug/55327.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/strombigboy/" target="_blank">流浪汉</a> 2009-03-12 20:37 <a href="http://www.cnitblog.com/strombigboy/articles/55327.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Struts2配置的一些见解和总结</title><link>http://www.cnitblog.com/strombigboy/articles/54405.html</link><dc:creator>流浪汉</dc:creator><author>流浪汉</author><pubDate>Tue, 10 Feb 2009 17:47:00 GMT</pubDate><guid>http://www.cnitblog.com/strombigboy/articles/54405.html</guid><wfw:comment>http://www.cnitblog.com/strombigboy/comments/54405.html</wfw:comment><comments>http://www.cnitblog.com/strombigboy/articles/54405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/strombigboy/comments/commentRss/54405.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/strombigboy/services/trackbacks/54405.html</trackback:ping><description><![CDATA[<p style="COLOR: red">今天开始学习 Struts2 这个强大的&nbsp;JAVA 开源框架,哎！不说了，配置了半天才跑起来。但总算有点收获。<br>首先，要跑起一个Struts2 的应用，一定要把Struts2的基础包导入。把以下5个包导进工程目录下的lib目录就可以了。用My Eclipse 的向导也可以导入。<br><br>1、commons-logging-1.0.4.jar<br>2、freemarker-2.3.8.jar<br>3、ognl-2.6.11.jar<br>4、struts2-core-2.0.11.jar<br>5、xwork-2.0.4.jar<br><br>然后就是在web.xml里面配置Struts2的主过滤器。在web.xml文件里加入如下代码：<br>&lt;filter&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;Struts2&lt;/filter-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.apache.struts2.dispatcher.FilterDispatcher<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/filter-class&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/filter&gt;</p>
<p style="COLOR: red">&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;Struts2&lt;/filter-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/filter-mapping&gt;<br><br>然后新建XML 命名为：&#8220;struts.xml&#8221; 为什么要这样做。因为这是Struts2框架的主要配置文件。所有请求都要在这里进行转发。<br>在 struts.xml 里键入以下代码<br><br>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&nbsp;&nbsp;&nbsp; /*这行说明这是一个XML 文件*/<br><br>/*这段说明引用 <font color=#002c99>struts-2.0的标签库</font>*/<br>&lt;!DOCTYPE struts PUBLIC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"<br>&nbsp;&nbsp;&nbsp; "<a href="http://struts.apache.org/dtds/struts-2.0.dtd">http://struts.apache.org/dtds/struts-2.0.dtd</a>"&gt;<br><br>/*定义web请求和相应的请求对应的转发地址。*/<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;struts&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;package name="strut2" extends="struts-default"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 调用Action 默认的执行方法 execute() --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;action name="login" class="com.struts.test.loginAction" &gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;result name="success"&gt;/success.jsp&lt;/result&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;result name="fail"&gt;/fail.jsp&lt;/result&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 调用Action 自定义的执行方法 regedit() --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;action name="regedit" class="com.struts.test.loginAction" method="regedit" &gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;result name="success"&gt;/success.jsp&lt;/result&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;result name="fail"&gt;/fail.jsp&lt;/result&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/package&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/struts&gt;<br><br>把业务逻辑配置好之后，我们就开始制作视图资源了，记住，一般情况下，不要先做视图，再配置业务，遵循MVC 原则，模型驱动的核心思想。下面给出相对应的三个JSP 文件作为视图资源，当然，你可以用其他文件充当视图资源。<br><br>/*index.jsp*/<br><br><br>&lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt;<br>&lt;%<br>String path = request.getContextPath();<br>String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";<br>%&gt;</p>
<p style="COLOR: red">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br>&lt;html&gt;<br>&nbsp; &lt;head&gt;<br>&nbsp;&nbsp;&nbsp; &lt;base href="&lt;%=basePath%&gt;"&gt;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;title&gt;My JSP 'index.jsp' starting page&lt;/title&gt;<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><br>&nbsp; &lt;/head&gt;<br>&nbsp; <br>&nbsp; &lt;body&gt;<br>&lt;form&nbsp; id="test_form" action="login.action"&gt;<br>&lt;input type="text" name="uid"&gt;&lt;br&gt;<br>&lt;input type="password" name="upass"&gt;&lt;br&gt;<br>&lt;input type="submit" value="登陆" &gt;<br>&lt;input type="submit" value="注册"&gt;<br>&lt;input type="reset" &gt;<br>&lt;/form&gt;<br>&nbsp; &lt;/body&gt;<br>&lt;/html&gt;<br><br>注意： &lt;form&nbsp; id="test_form" action="login.action"&gt; action属性是login.action&nbsp;. &nbsp;"login" 是action的逻辑名，与struts.xml里面的 &lt;action&nbsp; name="login"&gt;要相同，然后该请求就按照返回值：<br>（<br>&lt;result name="success"&gt;/success.jsp&lt;/result&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;result name="fail"&gt;/fail.jsp&lt;/result&gt;<br>返回相应的视图资源。返回success 就转跳到 success.jsp； 返回fail就转跳到 fail .jsp<br><br>）<br><br><br>/*success.jsp*/<br><br>&lt;%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%&gt;<br>&lt;%<br>String path = request.getContextPath();<br>String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";<br>%&gt;</p>
<p style="COLOR: red">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br>&lt;html&gt;<br>&nbsp; &lt;head&gt;<br>&nbsp;&nbsp;&nbsp; &lt;base href="&lt;%=basePath%&gt;"&gt;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;title&gt;My JSP 'success.jsp' starting page&lt;/title&gt;<br>&nbsp;&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;</p>
<p style="COLOR: red">&nbsp; &lt;/head&gt;<br>&nbsp; <br>&nbsp; &lt;body&gt;success! &lt;br&gt;<br>&nbsp; &lt;/body&gt;<br>&lt;/html&gt;<br><br><br><br>/*fail.jsp*/<br><br>&lt;%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%&gt;<br>&lt;%<br>String path = request.getContextPath();<br>String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";<br>%&gt;</p>
<p style="COLOR: red">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br>&lt;html&gt;<br>&nbsp; &lt;head&gt;<br>&nbsp;&nbsp;&nbsp; &lt;base href="&lt;%=basePath%&gt;"&gt;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;title&gt;My JSP 'fail.jsp' starting page&lt;/title&gt;<br>&nbsp;&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;</p>
<p style="COLOR: red">&nbsp; &lt;/head&gt;<br>&nbsp; <br>&nbsp; &lt;body&gt;fail&lt;br&gt;<br>&nbsp; &lt;/body&gt;<br>&lt;/html&gt;<br><br><br><br>&nbsp;&nbsp;&nbsp; <br></p>
<img src ="http://www.cnitblog.com/strombigboy/aggbug/54405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/strombigboy/" target="_blank">流浪汉</a> 2009-02-11 01:47 <a href="http://www.cnitblog.com/strombigboy/articles/54405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>