码迷,mamicode.com
首页 > Web开发 > 详细

002杰信-陌生的maven-web项目整改成我们熟悉的Web架构;classpath的含义;ssm框架的整合;junit测试

时间:2016-09-02 06:27:00      阅读:791      评论:0      收藏:0      [点我收藏+]

标签:

这篇博客的资源来源于创智播客,先在此申明。这篇博客的出发点是jk项目,传智的做法是Maven的web模板生成的,但是这样子的结构目录与我们熟知的Web项目的结构目录相差很大,所以要按照我们熟知的项目结构来。这篇文章涉及到的最重要的是:1.加载各种配置文件时经常涉及到classpath,这个东西,要搞搞清楚,在web项目代表的是什么( WEB-INF文件夹下的classes目录
).2.还有就是做一个项目时,建包的目录,3.用junit去测试框架的整合。

传智的做法是Maven的web模板生成的:

技术分享

我们要把上面那个结构给改过来:

第一步:和以前一样普通的建立一个web项目,要注意的是要勾选Add.....

.技术分享

 

第二步:建立下面的结构:

技术分享

技术分享

 

上面的结构中:注意WEB-INF里面内容是不能随意访问的(在web基础知识里讲过);

这个项目涉及到spring,springmvc,mybatis,maven,整合的项目。

 

上面的结构建立好之后就开始写代码:

1.先写pom.xml文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.itcast.jk</groupId>
  <artifactId>jk</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>jk Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
        <org.springframework.version>3.2.6.RELEASE</org.springframework.version>
    </properties>
  
<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework.version}</version>
            <type>jar</type>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.7.2</version>
        </dependency>


        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.0</version>
        </dependency>


        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>

        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.1.0.7.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.10</version>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.0.0-milestone2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.0.0-milestone2</version>
        </dependency>
        <!-- Jetty is needed if you‘re using the CXFServlet -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>3.0.0-milestone2</version>
        </dependency>


        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.13</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>
        
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.9</version>
        </dependency>
        <dependency>
            <groupId>jfree</groupId>
            <artifactId>jfreechart</artifactId>
            <version>1.0.13</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.0.1</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>jstl-impl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>jexcelapi</groupId>
            <artifactId>jxl</artifactId>
            <version>2.4.2</version>
        </dependency>

        <!-- 防止和tomcat中的jar冲突 -->
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>servlet-api</artifactId>
            <version>6.0.33</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-servlet_3.0_spec</artifactId>
            <version>1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
  <build>
    <finalName>jk</finalName>
  </build>
</project>

这样的话用的jar包就是我电脑里面的仓库里面的jar包了。

 

2.写java代码:

下面的图片中的画红线的java代码如下:

技术分享

 

BaseDao.java:

package cn.itcast.jk.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import cn.itcast.jk.pagination.Page;

/**
 * @Description: 泛型类,基础的DAO接口
 * @Author:    nutony
 * @Company:    http://java.itcast.cn
 * @CreateDate:    2014-2-25
 */
public interface BaseDao<T> {
    public List<T> findPage(Page page);                //分页查询
    public List<T> find(Map paraMap);                //带条件查询,条件可以为null,既没有条件;返回list对象集合
    public T get(Serializable id);                    //只查询一个,常用于修改
    public void insert(T entity);                    //插入,用实体作为参数
    public void update(T entity);                    //修改,用实体作为参数
    public void deleteById(Serializable id);        //按id删除,删除一条;支持整数型和字符串类型ID
    public void delete(Serializable[] ids);            //批量删除;支持整数型和字符串类型ID
}

FactoryDao.java代码:

package cn.itcast.jk.dao;

import cn.itcast.jk.domain.Factory;


public interface FactoryDao extends BaseDao<Factory>{
    

}

 

BaseDaoImpl代码:

package cn.itcast.jk.dao.impl;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;




import cn.itcast.jk.dao.BaseDao;
import cn.itcast.jk.pagination.Page;

public abstract class BaseDaoImpl<T> extends SqlSessionDaoSupport implements BaseDao<T>{
    @Autowired
    //mybatis-spring 1.0无需此方法;mybatis-spring1.2必须注入。
    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){
        super.setSqlSessionFactory(sqlSessionFactory);
    }
    
    private String ns;        //命名空间
    public String getNs() {
        return ns;
    }
    public void setNs(String ns) {
        this.ns = ns;
    }
    
    public List<T> findPage(Page page){
        List<T> oList = this.getSqlSession().selectList(ns + ".findPage", page);
        return oList;
    }

    public List<T> find(Map map) {
        List<T> oList = this.getSqlSession().selectList(ns + ".find", map);
        return oList;
    }
    public T get(Serializable id) {
        return this.getSqlSession().selectOne(ns + ".get", id);
    }

    public void insert(T entity) {
        this.getSqlSession().insert(ns + ".insert", entity);
    }

    public void update(T entity) {
        this.getSqlSession().update(ns + ".update", entity);
    }

    public void deleteById(Serializable id) {
        this.getSqlSession().delete(ns + ".deleteById", id);
    }

    public void delete(Serializable[] ids) {
        this.getSqlSession().delete(ns + ".delete", ids);
    }
}

 

FactoryDaoImpl.java:

package cn.itcast.jk.dao.impl;

import org.springframework.stereotype.Repository;

import cn.itcast.jk.dao.FactoryDao;
import cn.itcast.jk.domain.Factory;

//这么做的话就是在beans.xml配置文件中扫描时就会把这个类加入到spring容器中
@Repository
public class FactoryDaoImpl extends BaseDaoImpl<Factory> implements FactoryDao {
/**
 * 
 */
public FactoryDaoImpl() {
//设置命名空间
super.setNs("cn.itcast.jk.mapper");
}
}

 

数据库po类:

用PowerDesign写出sql语句:

create table FACTORY_C 
(
   FACTORY_ID           VARCHAR(40)          not null,
   FULL_NAME            VARCHAR2(200),
   FACTORY_NAME         VARCHAR2(50),
   CONTACTS             VARCHAR2(30),
   PHONE                VARCHAR2(20),
   MOBILE               VARCHAR2(20),
   FAX                  VARCHAR2(20),
   CNOTE                VARCHAR2(2000),
   INSPECTOR            VARCHAR2(30),
   ORDER_NO             INT,
   CREATE_BY            VARCHAR2(40),
   CREATE_DEPT          VARCHAR2(40),
   CREATE_TIME          TIMESTAMP,
   constraint PK_FACTORY_C primary key (FACTORY_ID)
);

对应的po类:

package cn.itcast.jk.domain;

import java.util.Date;

import org.omg.CORBA.PRIVATE_MEMBER;


public class Factory {


private String id;
    private String fullName;
    private String factoryName;
    private String contacts;
    private String phone;
    private String mobile;
    private String fax;
    private String cnote;
    private String inspector;
    private Integer orderNo;
    private String createBy;
    private String createDept;
    private Date createTime;
    /**
     * @return the id
     */
    public String getId() {
        return id;
    }
    /**
     * @param id the id to set
     */
    public void setId(String id) {
        this.id = id;
    }
    /**
     * @return the fullName
     */
    public String getFullName() {
        return fullName;
    }
    /**
     * @param fullName the fullName to set
     */
    public void setFullName(String fullName) {
        this.fullName = fullName;
    }
    /**
     * @return the factoryName
     */
    public String getFactoryName() {
        return factoryName;
    }
    /**
     * @param factoryName the factoryName to set
     */
    public void setFactoryName(String factoryName) {
        this.factoryName = factoryName;
    }
    /**
     * @return the contacts
     */
    public String getContacts() {
        return contacts;
    }
    /**
     * @param contacts the contacts to set
     */
    public void setContacts(String contacts) {
        this.contacts = contacts;
    }
    /**
     * @return the phone
     */
    public String getPhone() {
        return phone;
    }
    /**
     * @param phone the phone to set
     */
    public void setPhone(String phone) {
        this.phone = phone;
    }
    /**
     * @return the mobile
     */
    public String getMobile() {
        return mobile;
    }
    /**
     * @param mobile the mobile to set
     */
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
    /**
     * @return the fax
     */
    public String getFax() {
        return fax;
    }
    /**
     * @param fax the fax to set
     */
    public void setFax(String fax) {
        this.fax = fax;
    }
    /**
     * @return the cnote
     */
    public String getCnote() {
        return cnote;
    }
    /**
     * @param cnote the cnote to set
     */
    public void setCnote(String cnote) {
        this.cnote = cnote;
    }
    /**
     * @return the inspector
     */
    public String getInspector() {
        return inspector;
    }
    /**
     * @param inspector the inspector to set
     */
    public void setInspector(String inspector) {
        this.inspector = inspector;
    }
    /**
     * @return the orderNo
     */
    public Integer getOrderNo() {
        return orderNo;
    }
    /**
     * @param orderNo the orderNo to set
     */
    public void setOrderNo(Integer orderNo) {
        this.orderNo = orderNo;
    }
    /**
     * @return the createBy
     */
    public String getCreateBy() {
        return createBy;
    }
    /**
     * @param createBy the createBy to set
     */
    public void setCreateBy(String createBy) {
        this.createBy = createBy;
    }
    /**
     * @return the createDept
     */
    public String getCreateDept() {
        return createDept;
    }
    /**
     * @param createDept the createDept to set
     */
    public void setCreateDept(String createDept) {
        this.createDept = createDept;
    }
    /**
     * @return the createTime
     */
    public Date getCreateTime() {
        return createTime;
    }
    /**
     * @param createTime the createTime to set
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    
    
    
}

FactoryService.java代码:

package cn.itcast.jk.service;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import cn.itcast.jk.domain.Factory;
import cn.itcast.jk.pagination.Page;


public interface FactoryService {
    public List<Factory> findPage(Page page);                //分页查询
    public List<Factory> find(Map paraMap);                //带条件查询,条件可以为null,既没有条件;返回list对象集合
    public Factory get(Serializable id);                    //只查询一个,常用于修改
    public void insert(Factory factory);                    //插入,用实体作为参数
    public void update(Factory factory);                    //修改,用实体作为参数
    public void deleteById(Serializable id);        //按id删除,删除一条;支持整数型和字符串类型ID
    public void delete(Serializable[] ids);            //批量删除;支持整数型和字符串类型ID
}

 

FactoryServiceImpl.java代码:

package cn.itcast.jk.service.impl;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import cn.itcast.jk.dao.FactoryDao;
import cn.itcast.jk.domain.Factory;
import cn.itcast.jk.pagination.Page;
import cn.itcast.jk.service.FactoryService;

//这么做的话就是在beans.xml配置文件中扫描时就会把这个类加入到spring容器中
//
@Service public class FactoryServiceImpl implements FactoryService{ @Resource FactoryDao factoryDao; @Override public List<Factory> findPage(Page page) { return null; } @Override public List<Factory> find(Map paraMap) { return factoryDao.find(paraMap); } @Override public Factory get(Serializable id) { return null; } @Override public void insert(Factory factory) { } @Override public void update(Factory factory) { } @Override public void deleteById(Serializable id) { } @Override public void delete(Serializable[] ids) { } }

 

 

上面的代码写好之后:

 

3.开始写各种配置文件:要注意classpath在下面配置中的用法。

config目录下的各种文件如下:

技术分享

jdbc.properties代码:

#jdbc.driverClassName=com.mysql.jdbc.Driver
#jdbc.url=jdbc:mysql://localhost:3306/jkdb?characterEncoding=utf-8
#jdbc.username=root
#jdbc.password=root

jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:XE
jdbc.username=jkdb
jdbc.password=1234

c3p0.pool.maxPoolSize=20
c3p0.pool.minPoolSize=5
c3p0.pool.initialPoolSize=3
c3p0.pool.acquireIncrement=2

FactoryMapper.xml代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper  namespace="cn.itcast.jk.mapper">

<!-- factory_c表的映射 -->
 <resultMap type="cn.itcast.jk.domain.Factory" id="factoryRM">
    <id property="id" column="FACTORY_ID"/>
    <result property="fullName" column="FULL_NAME"/>
      <result property="factoryName" column="FACTORY_NAME"/>
      <result property="contacts" column="CONTACTS"/>
      <result property="phone" column="PHONE"/>
      <result property="mobile" column="MOBILE"/>
      <result property="fax" column="FAX"/>
      <result property="cnote" column="CNOTE"/>
      <result property="inspector" column="INSPECTOR"/>
      <result property="orderNo" column="ORDER_NO"/>
      <result property="createBy" column="CREATE_BY"/>
      <result property="createDept" column="CREATE_DEPT"/>
      <result property="createTime" column="CREATE_TIME"/>
      
 </resultMap>
 <select id="find" parameterType="map"  resultMap="factoryRM">
 
 select * from factory_c where 1=1
 </select>

</mapper>

sqlMapperConfig.xml代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
 <!-- 把映射文件(sqlmap/user.xml)加载进sqlMapConfig.xml-->
        <mappers>
            
            <mapper resource="mybatis/FactoryMapper.xml"/>
            
         </mappers>

</configuration>

beans.xml代码:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
            http://www.springframework.org/schema/mvc 
            http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-3.0.xsd 
            http://www.springframework.org/schema/aop 
            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
            
    <!-- 1.加载数据库配置的属性文件 -->
    <context:property-placeholder location="classpath:/jdbc/jdbc.properties"/>
    
    <!-- 2. 包扫描dao,service -->
    <context:component-scan base-package="cn.itcast.jk.dao,cn.itcast.jk.service"/>
    
    
    <!-- 3. 数据源dataSource  C3P0 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driverClassName}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="maxPoolSize" value="${c3p0.pool.maxPoolSize}"/>
        <property name="minPoolSize" value="${c3p0.pool.minPoolSize}"/>
        <property name="initialPoolSize" value="${c3p0.pool.initialPoolSize}"/>
        <property name="acquireIncrement" value="${c3p0.pool.acquireIncrement}"/>
    </bean>
    
    <!-- 4. SessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!-- 整合mybatis,包扫描 mapper文件 -->
        <property name="configLocation" value="classpath:/mybatis/sqlMapConfig.xml"/>
    
    </bean>
    
    <!-- 5. 事务 -->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="insert*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="save*" propagation="REQUIRED"/>
            
            <tx:method name="find*" read-only="true"/>
            <tx:method name="get*" read-only="true"/>
            <tx:method name="view*" read-only="true"/>
        </tx:attributes>
    </tx:advice>
    
    <aop:config>
        <aop:pointcut expression="execution(* cn.itcast.jk.service.*.*(..))" id="txPointcut"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
    </aop:config>
            
</beans>

springmvc-servlet.xml代码:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd 
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
    
    <!-- 1. 包扫描 controller -->
    <context:component-scan base-package="cn.itcast.jk.controller"/>
    
    <!-- 2. 内部资源视图解析器 -->
    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages"/>
        <property name="suffix" value=""/>
    </bean>
    
</beans>

这样一来就配置好了,我们用juint来做测试:

刚开始的时候,我这么测试:

技术分享

结果一直报错:说是FactoryServiceImpl的bean加载有问题,就是所容器里面一直没有这个bean,那我就很奇怪,我在beans.xml中配置的是包扫描,把Dao和service包下面对都扫进去了,怎么会没有呢?答案是:FactoryServiceImpl不是接口,Spring里面有一条的规则就是用java本身的代理Api的话,必须是接口才能代理,所以只要改成如下就好了:

package test;




import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import cn.itcast.jk.dao.FactoryDao;
import cn.itcast.jk.dao.impl.BaseDaoImpl;
import cn.itcast.jk.domain.Factory;
import cn.itcast.jk.service.FactoryService;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:/spring/beans.xml")
public class TestJdbc {
    /*
     *之前
     *@Repository
       public class FactoryDaoImpl extends BaseDaoImpl<Factory> implements FactoryDao 
                      那么就会把FactoryDaoImpl注册到spring容器中。那么下面的代码    @Autowired就会查找相应的类型,
                   
      就相当于 FactoryService factoryServiceImpl=new FactoryDaoImpl
       
    
    
     */
    @Autowired
    private FactoryService factoryServiceImpl;
            @Test
            public void testService() {
                
            Factory factory=factoryServiceImpl.find(null).get(0);
             System.out.print(factory.getFullName());
            System.out.print("aa");
           
        }

        
        
        
        
        
    
        
        
        
}

 

测试结果正确。

这里我想不通的是:在这里我们用到了junit,就是说不是web,还没有发布到Tomcat,那么classpath:/spring/beans.xml就不是 WEB-INF文件夹下的classes目录
啊。那么这个classpath:又代表什么呢.

 

 

---------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

反正上面的junit测试通过了,就是说框架整合(Spring,mybatis)没问题了,现在测试web.下面重点讲,Tomcat发布后的目录结构:

发布后在Tomcat下:

技术分享

在web下classpath:就是指WEB-INF文件夹下的classes目录
如下:

技术分享

都在这里了。

还有要注意的是:

技术分享

红线圈出来的东西都是在:JkTest这里目录下的,所以啊,在后续的jsp页面中有这么一段话:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>

<link rel="stylesheet" rev="stylesheet" type="text/css" href="${ctx}/skin/default/css/default.css" media="all"/>
<script language="javascript" src="${ctx}/js/common.js"></script>
${pageContext.request.contextPath}指的就是/JkTest
${ctx}/skin/default/css/default.css"的意思是:/JkTest/skin/default/css/default.css。这样就可以得到资源了。



发布测试:一切正常。






002杰信-陌生的maven-web项目整改成我们熟悉的Web架构;classpath的含义;ssm框架的整合;junit测试

标签:

原文地址:http://www.cnblogs.com/shenxiaoquan/p/5832004.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!