SpringMVC dwr3.0整合

来源:互联网 发布:淘宝有哪些大牌旗舰店 编辑:程序博客网 时间:2024/04/29 13:46

SpringMVC+mybatis+DWR3注解

    博客分类: 
  • 框架整合
  • Spring
springMVC注解SpringMVC+mybatis+DWR3SpringMVC+DWR3注解配置框架整合 
框架整合中需要各个软件版本 
Spring : spring-flex-1.0.3.RELEASE.zip 
DWR: dwr-3.0.0.116.rc1-src.zip 
mybatis: mybatis-3.0.6-bundle.zip 
框架整合后的配置文件结构图 

 


说明: 
mybatis-config.xml 放置在src目录下,配置mybatis的参数 
applicationContext.xml 放置WEB-INF目录下,配置spring的基础配置和数据源等 
db.properties 放置WEB-INF目录下,配置数据库的连接参数 
web.xml 配置web应用,如springMVC中的前端控制器DispatcherServlet和ContextLoaderListener  spring监听器等。 
Web.xml详细配置和说明 
配置Spring的启动监听 
<context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>/WEB-INF/applicationContext.xml</param-value> 
</context-param> 
<listener> 
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
配置SpringMVC 
<servlet> 
<servlet-name>springmvc</servlet-name> 
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
<init-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>/WEB-INF/config/springmvc.xml</param-value> 
</init-param> 
<load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
<servlet-name>springmvc</servlet-name> 
<url-pattern>*.action</url-pattern> 
</servlet-mapping> 
配置DWR前端控制器 

<servlet-mapping>  
        <servlet-name>springmvc</servlet-name>  
        <url-pattern>/dwr/*</url-pattern>  
    </servlet-mapping>  
配置工程编码过滤器 

<filter> 
<filter-name>characterEncodingFilter</filter-name> 
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
<init-param> 
<param-name>encoding</param-name> 
<param-value>UTF-8</param-value> 
</init-param> 
</filter> 
<filter-mapping> 
<filter-name>characterEncodingFilter</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping> 

applicationContext.xml配置 
配置 以注解方式扫描springBean 
<!—以注解方式扫描Spring Bean --> 
<context:annotation-config /> 
<!—配置扫描SpringBean的时候 都需要扫描哪些目录下 --> 
<context:component-scan base-package="com"></context:component-scan> 
配置数据源 

<!-- 这个bean 由spring提供,用来加载properties文件 --> 
<bean id="propertyConfigurer" 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
<property name="location"> 
<value>WEB-INF/db.properties</value> 
</property> 
</bean> 
<!-- 数据源 --> 
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
destroy-method="close"> 
<property name="url"> 
<value>${url}</value> 
</property> 
<property name="username"> 
<value>${username}</value> 
</property> 
<property name="password"> 
<value>${password}</value> 
</property> 
<!-- 数据库驱动类 --> 
<property name="driverClassName"> 
<value>${driverClassName}</value> 
</property> 
<!-- 连接池的最大数据库连接数。设为0表示无限制。 --> 
<property name="maxActive"> 
<value>${maxActive}</value> 
</property> 
<!-- 最大的空闲连接数,这里取值为30,表示即使没有数据库连接时依然可以保持30个空闲的连接,而不被清除,随时处于待命状态。设为0表示无限制。 --> 
<property name="maxIdle"> 
<value>${maxIdle}</value> 
</property> 
<!-- 最大建立连接等待时间(毫秒)。如果超过此时间将接到异常。设为-1表示无限制 --> 
<property name="maxWait"> 
<value>${maxWait}</value> 
</property> 
<!--指定数据库的默认自动提交 --> 
<property name="defaultAutoCommit"> 
<value>${defaultAutoCommit}</value> 
</property> 
<!--是否自动回收超时连接 --> 
<property name="removeAbandoned"> 
<value>${removeAbandoned}</value> 
</property> 
<!--超时时间(以秒数为单位) --> 
<property name="removeAbandonedTimeout"> 
<value>${removeAbandonedTimeout}</value> 
</property> 
<property name="logAbandoned"> 
<value>${logAbandoned}</value> 
</property> 
<property name="testOnBorrow"> 
<value>true</value> 
</property> 
</bean> 
db.properties文件 
# dataSource config 
#Oracle 
#url=jdbc:oracle:thin:@localhost:1521:orcl 
#MySql 
url=jdbc:mysql://127.0.0.1:3306/framework 
username=root 
password=root 
#Oracle 
#driverClassName=oracle.jdbc.driver.OracleDriver 
#MySql 
driverClassName=com.mysql.jdbc.Driver 
maxActive=100 
maxIdle=30 
maxWait=3000 
defaultAutoCommit=true 
removeAbandoned=true 
removeAbandonedTimeout=60 
logAbandoned=true 

配置mybstis SqlSessionFactory 
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
<property name="configLocation" value="classpath:mybatis-config.xml" /> 
<property name="dataSource" ref="dataSource" /> 
<property  name="mapperLocations"  value="classpath*:com/**/*.xml"/>  
</bean> 
说明: 
<property  name="mapperLocations"  value="classpath*:com/**/*.xml"/> 
指定实体类映射文件,可以指定同时指定某一包以及子包下面的所有配置文件,mapperLocations和configLocation有一个即可,当需要为实体类指定别名时,可指定configLocation属性,再在mybatis总配置文件中采用mapper引入实体类映射文件。 
配置事务 
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
<property name="dataSource" ref="dataSource" /> 
</bean> 
<aop:config> 
<aop:advisor pointcut="execution(* com.sanling..*Service.*(..))" advice-ref="txAdvice" /> 
<aop:advisor pointcut="execution(* com.sanling.utils..*Service.*(..))" advice-ref="txAdvice" /> 
</aop:config> 

<tx:advice id="txAdvice"> 
<tx:attributes> 
<tx:method name="get*" read-only="true" /> 
<tx:method name="find*" read-only="true" /> 
<tx:method name="query*" read-only="true" /> 
<tx:method name="is*" read-only="true" /> 
<tx:method name="*" propagation="REQUIRED" /> 
</tx:attributes> 
</tx:advice> 

springmvc.xml 
配置springMVC的调转规则 

<bean id="viewResolver" 
class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> 
配置DWR 

<context:annotation-config /> 
<context:component-scan base-package="com" /> 
<dwr:annotation-scan scanRemoteProxy="true" scanDataTransferObject="true" base-package="com" />  
<dwr:annotation-config />  
<dwr:url-mapping />  
<dwr:controller id="dwrController" debug="true" />  
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">  
<property name="order" value="1" />  
</bean>  
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">  
<property name="order" value="2" />  
</bean>  
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
     <property name="order" value="3" />   
      <property value="true" name="alwaysUseFullPath"></property>  
      <property name="mappings">  
        <props>  
          <prop key="/dwr/**">dwrController</prop>  
        </props>  
     </property>  
    </bean>   
说明: 
DWR配置 
<dwr:annotation-scan> 
扫描JavaBean的转换,@DataTransferObject对JavaBean进行转换,@RemoteProperty,必须加在get方法上。 
<context:annotation-config />  
要求DWR在Spring容器中检查拥有@RemoteProxy 和 @RemoteMethod注解的类。注意它不会去检查Spring容器之外的类。 
<dwr:url-mapping /> 
要求DWR将util.js和engine.js映射到dwrController 
<dwr:configuration /> 
此标签在这个例子中不是必须的,如果你想配置Spring容器之外的类,就需要它了 
<dwr:controller id="dwrController" debug="true" />  
部署项目时, 请把debug设为false 
<context:component-scan base-package="com.myapp.web.controller" /> 
多个包名用逗号隔开, 但不能有空格 
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
添加下面的Bean,就可以通过http://localhost:8080/myApp/dwr来访问test page 
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 
order值越小, 优先级越高,必须有这项配置,否则SpringMVC和DWR就不能同时使用注解 
对于<context:annotation-config /> 在applicationContext.xml中已经有过配置,则可以把applicationContext.xml中的去掉,保留springmvc.xml中的就可以。 

BaseDao 

@Repository 
public class BaseDao extends SqlSessionDaoSupport{ 
private SqlSessionFactory sqlSessionFactory; 
@Resource 
public void setSessionFactory(SqlSessionFactory sqlSessionFactory) { 
super.setSqlSessionFactory(sqlSessionFactory); 

public BaseDao() { 
System.out.println("--BaseDao---------"); 

} 
说明: 
BaseDao 为dao层,定义了基础的数据库操作 
BaseDao层,自动注入了mybatis的SqlSessionFactory,BaseDao层中数据库的相关操作,都可以通过SqlSessionFactory来完成 
JavaBean 
@DataTransferObject 
public class Region implements Serializable { 

private int id; 
private int pid; 
private String name; 
private String code; 

说明: 
注解@DataTransferObject的作用是在DWR调用Java,返回JavaBean对象的时候,JavaBean对象和JS对象进行转换。 
JavaBean的映射文件region.mapper.xml 

<mapper namespace="region"> 
<resultMap type="com.sanling.business.region.entity.Region" id="resultMap"> 
<id property="id" column="id" /> 
<result property="pid" column="pid" /> 
<result property="code" column="code" /> 
<result property="name" column="name" /> 
<result property="codeOrder" column="codeOrder" /> 
<result property="treeLevel" column="treeLevel" /> 
<result property="innerCode" column="innerCode" /> 
</resultMap> 
<insert id="save" parameterType="com.sanling.business.region.entity.Region"> 
<selectKey resultType="int" keyProperty="id">    
<!-- 
要返回保存数据的ID 
orcale:SELECT LOGS_SEQ.nextval AS ID FROM DUAL 
MYSQL: SELECT LAST_INSERT_ID() 
--> 
     SELECT LAST_INSERT_ID()     
</selectKey> 
insert into 
tb_region(pid,code,name,codeOrder,treeLevel,innerCode) 
values(#{pid},#{code},#{name},#{codeOrder},#{treeLevel},#{innerCode}) 
</insert> 
</mapper> 
Service 
@Service 
public class RegionService { 

private IDao dao; 
@Resource 
public void setDao(BaseDao dao) { 
this.dao = dao; 

public int saveRegion(Region bean) throws Exception{ 
this.dao.save("region.save", bean); 
return bean.getId(); 

} 
说明: 
RegionService层自动注入dao层,提供数据库访问操作 
Action 
@Controller 
@RemoteProxy 
@RequestMapping("/regionAction") 
public class RegionAction { 
private RegionService regionService ; 

@Resource 
public void setRegionService(RegionService regionService) { 
this.regionService = regionService; 


@RequestMapping("/testHttp") 
public void testHttp(){ 
System.out.println(" http test !"); 

@RemoteMethod 
public Region addRegion(Region bean){ 
if(bean!=null){ 
String innerCode = bean.getInnerCode()+bean.getCode(); 
bean.setInnerCode(innerCode); 
try { 
int id = this.regionService.saveRegion(bean); 
bean.setId(id); 
} catch (Exception e) { 
e.printStackTrace(); 


return bean ; 


说明: 
类注解@RemoteProxy:表明允许DWR框架调用该后台类 
方法注解@RemoteMethod:表明允许DWR调用后台java类中的方法 
类注解和方法注解@RequestMapping("/regionAction"):表明该类为SpringMVC类,访问路径/regionAction/testHttp.action 就能访问到类RegionAction中的testHttp方法(页面怎么调转,这里不做详细说明) 
测试 
测试SpringMVC是否能正常访问: 
http://localhost:8080/项目名/regionAction/testHttp.action 看看程序是否能进入到testHttp()方法即可。 
测试DWR是否正常 
访问:http://localhost:8080/项目名/dwr 能看到如下界面 

注意,只要在类上注解@RemoteProxy,则在测试DWR的时候,都能看到这些类名。 

0 0
原创粉丝点击