`

【转】<<Spring in Action>> 学习总结(2)(数据源配置)

阅读更多

61. 对于 JndiObjectFactoryBean 查找 jndi  资源未提及,如何设置 jndiEnvironment 属性,如果是在J2EE容器中运行,没什么问题,只是以单独应用程序运行就会错,如下在容器外运行需要加上 jndiEnvironment 配置,指定实现类,及URL等 

 <property name="jndiEnvironment">
      <props>
          <prop key="java.naming.factory.initial">
              org.apache.naming.java.javaURLContextFactory
          </prop>
          <prop key="java.naming.factory.url.pkgs">
              org.apache.naming
          </prop>
      </props>
  </property>



62.发送电子邮件配置 SimpleMailMessage 时也未说明,如果 SMTP 发送前需要验证该如何配置。需加上 mail.smtp.auth属性为 true,和验证时用户名和密码,Spring 验证时是通过 getTransport("smtp").connect(host,user,passwd) 来验证的。 
   

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop>
            </props>
        </property>
        <property name="host">
            <value>mail.2911.net</value>
        </property>
        <property name="username">
            <value>unmi</value>
        </property>
        <property name="password">
            <value>unmi1234</value>
        </property>
    </bean>


这样取到mailSender后,就能调用它的send(SimpleMailMessage msg)发送邮件,自动进行密码验证。Spring也还是不够完美,可以配置 JavaMailSenderImpl 的 session 属性,但却无法应用上 session.getProperties() 中的许多项配置。Spring中能配置 SimpleMailMessage,然后再配合 Velocity 的邮件内容模板,确实很方便 


63. 搭配Spring的ScheduledTimerTask和jdk的TimerTask,再配置TimerFactoryBean就会自动启动定时器了,这种方式可配置的参数太少了,只能设置从现在开始隔多久(delay)以什么频度(period)执行某个任务 

64. 更高级的定时器用 Quartz 来调度,这个工具以前单独使用过,可像Unix的cron那般灵活配置。在MyEclipse中使用Quartz时需要引入 Spring 1.2 Misc Libraries 所包含的包(含quartz-1.5.2.jar) 

65. 94,96,97,104这几页中配置<value ref=""/>要写成<ref bean=""/>才对 

66. 从前往后的被包容关系是:JobClass->JobDetailBean->Trigger->TimerFactoryBean, 有两种Trigger,分别是 SimpleTriggerBean 和 CronTriggerBean。SimpleTriggerBeanScheduledTimerTask基本等价,Quartz的威力全部体现在 CronTriggerBean 上的,可灵活的配置它的cronExpression属性控制排程,最后需配置 SchedulerFactoryBean (它和TimerFactoryBean是基本等价) 来启动定时器 

67. MethodInvokingTimerTaskFactoryBean+ScheduledTimerTask+TimerFactoryBean 可定时调用某个类(或对象)的某个方法,这个类只需要是一个普通Java类,被调度的方法不能有参数 

68. MethodInvokingJobDetailFactoryBean+SimpleTriggerBean(或CronTriggerBean)+SchedulerFactoryBean 定时调用某个类(或对象)的某个方法,这个类只需要是一个普通Java类,被调度的方法不能有参数 

69. 书中并未描述 0/10 每10个单位触发执行的配置形式,需注意 */? 的使用,定义好 CronExpression 后需好好测试真正形为 

70. Spring 调用 JMS 发送消息的用法先搁一下,在SOA/MQ 的大环境下一定派得上用场的 

Spring mvc 

71. Spring 的 MVC 和 Struts 的 MVC 基本一致 
    Spring 的控制流程是:请求->DispatcherServlet->从 HandlerMapping 中查询到处理该请求的 Controller-> Controller 的 handleRequest 方法调用业务方法,最后返回 ModelAndView (ModelAndView告诉了 DispatcherServlet 转向到哪个视图) 
    Struts 的控制流程是:请求->ActionServlet->从 ActionMapping 中查询到处理该请求的 Controller (Action类)->Action 的execute 方法调用业务方法,最后返回 ActionForward (ActionForward告诉了 ActionServlet 该转向到哪个视图) 
72. Spring 的 DispatcherServlet 和 Struts 的 ActionServlet 的配置方式是一样的,都是作为一个自启动的 Servlet 配置到 web.xml 中。Spring 的 url-pattern 的配置惯例是 *.htm,而 Struts 通常是配置成 *.do 或 *.action,它暴露了 web 使用的技术。 


73. Spring 中配置了 
    

 <servlet-mapping>
        <servlet-name>unmi</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>


后,在初始化相应的 DispatcherServlet 时会自动加载 unmi-servlet.xml 文件,它是一个普通的 Spring Bean 配置文件,也是由 WebApplicationContext 加载。其他的 Bean 配置文件需要像通常的做法由 ContextLoaderListener 或 ContextLoaderServlet 来加载。 

73. Struts 1.2? 后开始可以在 struts-cnfig.xml 中给 Action 注入简单属性,而 Spring 配置 controll 时可以注入所有类型属性 

74. 在 unmi-servlet.xml 中配置的下面这段代码,Spring 将对请求 URL 是 "/home.html" 结尾的分派给 HomeController 处理,DispatcherServlet 使用的默认处理器映射是 BeanNameUrlHandlerMapping 

 <bean name="/home.html" class="com.unmi.HomeController">
    <property name="greeting"><value>Welcome to Spring Training</value></property>
</bean>



75. Spring 最简单的视图解析器是 InternalResourceViewResoler,如在 unmi-servlet.xml 有下配置 
 

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResoler">
   <property name="prefix"><value>/WEB-INF/jsp/</value></proeprty>
   <property name="surfix"><value>.jsp/</value></proeprty>
</bean>


那么,当 HomeController 中 返回 return new ModelAndView("home"); 时将会解析成由视图 /WEB-INF/jsp/home.jsp 来展示 

76. 有三种类型的请求映射控制器,实现的是 HandlerMapping 接口 
    BeanNameUrlHandlerMapping -- 根据控制器的名字将控制器映射到 URL 
    SimpleUrlHandlerMapping -- 用上下文配置文件中定义的属性集合将控制器映射到 URL 
    CommonsPathMapHandlerMapping -- 使用控制器代码中的元数据将控制器映射到 URL 
    DispatcherServlet 缺省映射处理器是 BeanNameUrlHandlerMapping,它将表现层 URL 和控制器名字绑定起来了, Spring 不建议使用这个映射处理器,建议用 SimpleUrlHandlerMapping。可是我觉得用 BeanNameUrlHandlerMapping 挺方便的啊 

77. 使用 SimpleUrlHandlerMapping 的配置,需要将系统中用到的 URL 一一逻列出来 
 

<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/listCourse.html">listCoursesController</prop>
            <prop key="/register.htm">registerStudentController</prop>
        </props>
    </peroperty>
</bean>



78. 使用 CommonsPathMapHandlerMapping 需要为 Controller 类注解上 PathMap 属性为一个 URL 

79. 可用同时配置多映射处理器,通过配置它们实现的 Ordered 接口的 order 属性,DispatcherServlet 按顺序采用哪个映射处理器(责任链模式) 

80. Spring 提供了丰富的控制器层次,方便根据实际需求选择实现或继承那一种控制器 

81. 继承 AbstractController 要覆盖的方法是 handleRequestInternal(request,response); 
new ModelAndView("counrseList","courses",courses) 第一个参数是 view 的逻辑名,第二第三个参数是传递给 view 的名称/数值对 

82. 当控制器需要根据参数执行工作时,应该继承 AbstractCommandController,你的 Controller 中需要覆盖 handle 方法,并且需要在构造函数中指定命令类,如 
   

public MyController(){
        setCommandClass(MyCommand.class);
    }


在使用 Command 对象与 Struts 中是一样的,在 handle 方法中用 MyCommand myCommand = (MyCommand)command,不同的就是 Struts 的 FormBean 是作为 execute 方法存在,而 Spring 的 command 是作为成员存在。 
命令对象只是一个 POJO,功能相当于 Struts 的 Action,能匹配接受请求中的参数,它不需要在 Spring 的配置文件中配置。留下一个疑问:要是 AbstractCommandController 能在 Spring 的配置文件中注入可能要好些,相当于 Struts 的 Action 的 FormBean 也是在 struts-config.xml 配置给 Action 的 
自己试了一下,可以通过配置给 commandClass 一个全限类名字符串注册 class 属性,Spring 提供了相应的属性编辑器 
       

<property name="commandClass">
            <value>com.unmi.MyCommand</value>
        </property>



83. AbstractFormController 有一个子类 SimpleFormController,它声明了两个属性 formView 和 successView,分别对应了在处理请求出现异常和正常时对应的 View 的逻辑名,这两个属性需要在配置文件中给配上,在你的 SimpleFormController 类中覆盖 void doSubmitAction(Object command) throws Exception 将会使用到它们,注意这个方法没有返回值的。你也可以覆盖 ModelAndView onSubmit(Ojbect command),向 View 中传递数据,return new ModelAndView(getSuccessView(),"student",student); 像 AbstractCommandController 一样,需要在构造函数中指定 Command 类,可是看那两个submit 方法,command 再一次通过参数传入到方法,真的有些多此一举 

84. 验证表单输入, 你的验证类必须实现 org.springframework.validation.Validator 接口,supports()方法帮助判断验证器是否适用于指定类,在 validate(Object command, Errors errors) 用 Errors 驳回任何非法数据,如 
   

ValidationUtils.rejectIfEmpty(errors, "login", "required.login" "Login is required");
    if(!new Perl5util().match(PHONE_REGEXP,phone){
        errors.reject("invalide.phone","Phone number is invalid");
    }


最后,你需要把验证类注入给你的 CommandController 的 validator 属性 
 

  <property name="validator">
        <bean class="com.unmi.MyValidator"/>
    </property>



validate 方法会在 AbstractCommandController.handleRequestInternal(request,response)调用,SimpleFormController.onSubmit() 会在调用 doSubmitAction() 之后,把 errors 传递给 View。以后要搞清楚错误信息要如何显示出来 

85. Spring 提供了 AbstractWizardFormController 来简化跨越多个页面处理表单的工作 (向导式页面表单),这是 Struts 所没有的功能。您只需要覆盖 processFinish(request,response,command,errors)方法,在最后一个页面提交后将会被调用处理收集的数据,向导中的页面流程配置到 AbstractWizardFormController 的 pages 属性,如下 

<bean id="feedbackController" class="com.unmi.FeedbackWizardController">
    <property name="pages">
        <list>
            <value>general</value> <!-- 填写一般性问题 -->
            <value>instructor</value>  <!-- 填写导师绩效的问题 -->
            <value>course</value>  <!-- 填写课程内容和教材问题 -->
            <value>facilities</value>  <!-- 填写质量问题 -->
        </list>
    </property>
</bean>



怎么分布显示向导每一步的页,以及 Controller 中如何处理,待续... 


转自:http://cache.baiducontent.com/c?m=9d78d513d99b1df903bac8690c66933d5909dc3c6b8b96013894cd47c9221d03506790a63a694358869b2b3c03ad434bea876d34604877a09bbfd91782a6c27672dd3a34731d804511&p=8f71cd15d9c241ec0be296391708&newp=8b2a9715d9c241f734adcd121b5992695803ed603bd3d2&user=baidu&fm=sc&query=jndienvironment&qid=&p1=1

分享到:
评论

相关推荐

    spring3.2+strut2+hibernate4

    -- 数据源配置,在生产环境使用应用服务器的数据库连接池 --&gt; &lt;!-- &lt;jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/store" /&gt;--&gt; &lt;!--Hibernate配置--&gt; &lt;bean id="sessionFactory" class=...

    Struts2 + Spring2.5 + JFreeChart 实现的投票系统,2008年高考作文评价投票

    1、开发环境:MyEclipse6.0, Struts 2.0.11, Spring2.5.4, struts2-spring-plugin-2.0.11.1,JFreeChart 1.0.9, JCommon 1.0.12,struts2-jfreechart-plugin-2.0.11.1,JDK1.5+ &lt;br/&gt; 2、下载地址: &lt;br/&gt; &lt;br/&gt; ...

    Spring in Action(第2版)中文版

    5.2配置数据源 5.2.1使用jndi数据源 5.2.2使用数据源连接池 5.2.3基于jdbc驱动的数据源 5.3在spring里使用jdbc 5.3.1处理失控的jdbc代码 5.3.2使用jdbc模板 5.3.3使用spring对jdbc的dao支持类 5.4在spring里...

    Spring in Action(第二版 中文高清版).part2

    5.2 配置数据源 5.2.1 使用JNDI数据源 5.2.2 使用数据源连接池 5.2.3 基于JDBC驱动的数据源 5.3 在Spring里使用JDBC 5.3.1 处理失控的JDBC代码 5.3.2 使用JDBC模板 5.3.3 使用Spring对JDBC的DAO支持类 5.4...

    基于EXT SSI的简单树实现

    /desc/getDesc.action 如何找到自己的数据源呢。它进入web.xml,发现自己需要经历struts2这个过滤器,于是在这个过滤器里,应用把工作交给了struts,在struts配置中找到getDesc这个控制器, &lt;action name="getDesc" ...

    springmybatis

    查询出列表,也就是返回list, 在我们这个例子中也就是 List&lt;User&gt; , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...

    Spring in Action(第二版 中文高清版).part1

    5.2 配置数据源 5.2.1 使用JNDI数据源 5.2.2 使用数据源连接池 5.2.3 基于JDBC驱动的数据源 5.3 在Spring里使用JDBC 5.3.1 处理失控的JDBC代码 5.3.2 使用JDBC模板 5.3.3 使用Spring对JDBC的DAO支持类 5.4...

    ssh(structs,spring,hibernate)框架中的上传下载

    -- 数据源的配置 //--> 3. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 4. destroy-method="close"> 5. <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver...

    Struts2+Spring+Hibernate+Ehcache+AJAX+JQuery+Oracle 框架集成用户登录注册Demo工程

    2.Action里通过struts2-spring-plugin.jar插件自动根据名字注入。 3.Ajax无刷新异步调用Struts2,返回Json数据,以用户注册为例。 4.在服务端分页查询功能,优点:实时性:跳页才查询。数据量小:只加载当前页的记录...

    struts2+Hibernate+Spring学习示例

    5、tomcate数据源配置 见 tomcat配置.txt //这个项目用不着了 6、创建了专门的数据库操作工具类 DBUtil、专门的DAO管理工具DAOManager 7、实现了CRUD的基本操作 8、struts2基本标签的使用 9、struts2的Action实现,...

    spring-microservices-in-action:《 Spring Microservices in Action(John Carnell)》一书的源代码,以及有关Spring Boot for Microservices的技术要点的个人摘要-redis source code

    该存储库包含《 》一书的源代码,以及有关Spring Boot for 的技术要点的个人摘要。 概述 本书的重新组织了该,并且我确保每个模块都可运行。 结构 伺服器 :提供其他服务的配置参数。 :服务发现。 :API网关。...

    火炬博客系统7

    软件及安装说明 &lt;br&gt;&lt;br&gt; 本系统是一个Struts+Spring+Hibernate组合开发的博客系统,本系统使用分层体系架构,综合运用struts+spring+hibernate 三大主流开源框架构建,稳定高效、功能强大、易于维护。系统分为四个...

    火炬博客系统6

    软件及安装说明 &lt;br&gt;&lt;br&gt; 本系统是一个Struts+Spring+Hibernate组合开发的博客系统,本系统使用分层体系架构,综合运用struts+spring+hibernate 三大主流开源框架构建,稳定高效、功能强大、易于维护。系统分为四个...

    Struts2.1Spring2.5IBatisJQuery框架

    开发框架的总体设计思想为简化配置,约定大于配置,以便快速开发。...通过框架提供的以上组件,除了基本的配置,如数据源、事务等需求添加配置文件外,在开发过程中几乎不需要往配置文件中添加配置

    火炬博客系统5

    软件及安装说明 &lt;br&gt;&lt;br&gt; 本系统是一个Struts+Spring+Hibernate组合开发的博客系统,本系统使用分层体系架构,综合运用struts+spring+hibernate 三大主流开源框架构建,稳定高效、功能强大、易于维护。系统分为四个...

    Spring面试题

    并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的 Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet...

    JavaBean实体类 配置文件 代码一键自动生成工具

    *JDBC:选择JDBC是只需要配置数据源就行了,别的不要动 *.table后缀文件:是金蝶BOS中的一个字段属性映射文件 *PDM:Powerdesigner物理逻辑图,选择PDM时会读取物理逻辑图中的所有表,从里面选择需要生成的目标表就...

    第24次课-1 Spring与Hibernate的整合

    Spring配置管理SessionFactory与数据库的连接,在实际的应用中,数据源会采用依赖注入的方式,传递给SessionFactory。 见beans-config_sh.xml 24.3 Spring对Hibernate的简化 24.3.1 概述 Hibernate的持久层访问步骤...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...

    低清版 大型门户网站是这样炼成的.pdf

    5.10 多数据源的应用 338 5.11 jdbc的应用 343 5.12 hibernate调用存储过程 343 5.13 xml数据持久化 346 5.14 小结 348 第6章 充分利用spring 2.5的ioc利器统管bean世界 349 6.1 java程序员的春天厚礼—spring...

Global site tag (gtag.js) - Google Analytics