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 中如何处理,待续...
相关推荐
对于 SSH(Struts + Spring + Hibernate)集成开发模式,除了上述配置之外,还需要添加 Struts2 的配置文件,如 struts.xml,并且在其中定义 Action 的映射关系等。 综上所述,Spring 的配置文件是 Spring 框架的...
2. **数据源配置** - `<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">`: 定义了一个名为`dataSource`的数据源Bean,它使用Apache Commons DBCP实现。 - `<property name=...
`sessionFactory`引用了之前配置的数据源,并指定Hibernate映射文件,这里是`User.hbm.xml`,它定义了与数据库表的映射关系。 接着,创建了`HibernateTemplate`,这是Spring提供的一个便利工具类,它简化了与...
从数据源配置、SessionFactory创建到HibernateTemplate的注入,再到DAO、Service和Action层的构建,每一步都是环环相扣、紧密相连的。掌握这些配置技巧对于理解和应用Spring框架具有重要意义,能够帮助开发者更加...
《Spring in Action》第四版是关于Spring框架的一本权威指南,由Manning出版社出版。这本书深入浅出地介绍了如何使用Spring框架构建强大的Java应用程序。英文原版提供了最原始的作者见解和技术细节,对于想要深入...
6. **配置Spring**:创建`src/main/resources/spring/applicationContext.xml`,配置Spring的bean,包括数据源、SqlSessionFactory、Mapper接口扫描等。 7. **配置iBatis**:创建`src/main/resources/mybatis-...
5. **配置Spring**:在`servlet-context.xml`中配置Spring MVC的相关设置,如视图解析器、数据源、事务管理器等。 6. **配置Struts2**:创建`struts.xml`文件,定义Action、结果类型和拦截器。例如: ```xml ...
通过学习《Spring in Action》中文版6-11章节,读者将能够掌握Spring框架的核心功能,理解如何在实际项目中运用Spring进行高效开发,并具备解决复杂问题的能力。同时,了解Spring生态中的其他组件如Spring Boot和...
1. **Spring配置Hibernate SessionFactory**:在`applicationContext.xml`中配置`SessionFactory`,并通过Spring的依赖注入机制将数据源注入到SessionFactory中。 2. **Struts2配置Spring插件**:在`struts.xml`中...
- **数据源注入**:通过`<ref>`标签将数据源注入SessionFactory。 - **映射文件**:`<mappingResources>` 定义了Hibernate映射文件的位置。 ##### 5. Hibernate Template配置 ```xml <bean id="hibernateTemplate" ...
创建Spring配置文件如`applicationContext.xml`,并定义bean及数据源、事务管理器等。 ```xml <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!-- 数据库连接配置...
为了连接数据库,我们需要在Spring配置文件中定义一个数据源。首先创建一个名为`jdbc.properties`的文件,包含数据库驱动、URL、用户名和密码。然后,在`applicationContext.xml`中使用`...
- **Spring**:创建`src/main/resources/spring`目录,然后创建`applicationContext.xml`配置文件,定义bean和数据源。 - **Struts2**:在`src/main/webapp/WEB-INF`下创建`struts.xml`配置文件,定义Action和结果...
接下来,可以开始编写Action类、配置Struts2的配置文件(如`struts.xml`)、设置Spring的依赖注入以及Hibernate的数据访问层。这个过程涵盖了Maven的项目管理、Struts2的请求处理、Jetty的本地开发服务器使用,以及...
1. 配置数据源:在`applicationContext.xml`中,我们需要配置JDBC数据源,通常通过`PropertyPlaceholderConfigurer`来读取数据库连接的属性文件,如`jdbc.properties`。 ```xml <bean id="propertyConfigurer" ...
3. 配置数据源:在beans.xml中配置DataSource,如使用DBCP或C3P0连接池。 【iBatis配置】 1. 创建SqlMapConfig.xml,配置iBatis的基本属性,数据库连接信息,以及映射文件的位置。 2. 编写Mapper接口和XML映射...
在本整合实例中,我们将利用Spring的注解配置来管理Struts2的Action和Mybatis的Mapper。首先,我们需要在Spring配置文件中启用注解扫描,以便Spring能发现并管理我们的Action和Mapper。 1. **Struts2配置**:在...
<value>2</value> </property> <property name="initialPoolSize"> <value>3</value> </property> <property name="maxIdleTime"> <value>60</value> </property> </bean> ``` 这段配置指定了以下几个关键...
总的来说,《Spring in Action》第4版结合中英文PDF和源代码,为学习和掌握Spring框架提供了全面的资源。无论是初学者还是有经验的开发者,都能从中受益匪浅。通过深入阅读和实践,你将能够熟练运用Spring框架,提升...
你可以通过代码学习如何配置数据源、事务管理器,以及如何使用DAO和Repository模式进行数据操作。 5. **Spring Security**:Spring的安全模块提供了一套完整的认证和授权解决方案。源代码可能包含用户认证、权限...