eclipse创建maven+SpringMVC+Mybatis动态web工程完整示例

1.新建maven项目,如果不在上面,请到other里面去找一下

4bc45379-9a01-4ed1-8671-2502184817ab

2,进入maven项目之后,点击next

b7f2746f-bd7f-4120-9f72-ffb4d6f333d5

选择webapp之后  next

da7bdfe4-ae0f-4031-b539-b29dc84ee55f

输入两个id  package可以不写,是它默认帮你新建一个包,不写没关系

2858f54d-0f5d-4c89-98cb-9e034246f7fc

会生成一个这样目录的项目

82370fe2-eeb0-4329-8f64-6211ef44b515

2,配置maven

首先新建几个文件夹

2.1 添加Source文件夹

接下来需要添加

src/main/java

src/test/java 

src/test/resources三个文件夹

右键项目根目录点击New -> Source Folder,

建出这三个文件夹。注意不是建普通的Folder,而是Source Folder

项目或者文件加上右键 new  sourceFolder,正常情况下是没有问题的

如果出现了下面的这情况,其实是真的存在的只是我们看不到

c11f0c74-6f2c-48d0-b670-fc8732a6e370

项目右键属性

5eca2484-567c-4ecc-a60b-8fb8fb3b45d2

c60b4c7b-e90d-497d-87b0-71fa4864e1e4

9f47bd00-72d1-4250-b9f3-ce71821f5630

切换成这样子就好了

c2683bbe-2e10-4570-abb8-12fc4efe1223

设置好了之后发现

9fa41717-c27a-4427-abd6-c991dfd22e82

java就已经有了

继续新建其他的几个还没有的

新建之后就这样子了

644111c7-352f-43b2-a5cf-d5080783e1ae

2.2 更改class路径

右键项目,Java Build Path -> Source

下面应该有4个文件夹。src/main/java,src/main/resources,src/test/java ,src/test/resources。

双击每个文件夹的Output folder,选择路径。

src/main/java,src/main/resources,选择target/classes;

src/test/java ,src/test/resources, 选择target/test-classes;

选上Allow output folders for source folders.(如果没有选上的话)

85d08a77-0e84-4c7e-be6f-4cdd3a8225d8

此处还可以更改显示顺序

f12e377c-1453-40e1-b8d6-bf589b0a3d47

此处还可以更改jdk

f69a61ed-0a5f-4967-9b11-ffa5817b4930

右键属性  project Facets

想要切换成3.0发现报错

48282720-4b81-4e40-9f1c-8d7e51e153f1

这是因为新建项目的时候

用了maven-artchetype-webapp

由于这个catalog比较老,用的servlet还是2.3的

54d87aeb-f12b-44dd-b491-a47fe65592ce

84624b26-6f46-415e-85f1-f0ced682e4e3

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

 

Archetype Created Web Application

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

org.eclipse.jdt.core.prefs

91cb6455-f69c-413c-87b4-c29af44bfdd6

修改成

7691cbbe-a776-4b59-8617-a6e282fc2cde

-------

307f8b1e-8e0d-4504-9b99-5193f5bfbfed

修改成

00ca9a57-ab8b-40f4-9d6e-ba65425fde60

重新打开属性 project Facets,看到这个地方已经修改成3.0; 勾选上tomcat

 

5a589660-a961-4f4c-868c-e0bb2bcf2b64

项目工程创建完成

new 一个server

启动之后看看有无报错,目前没有

9257b51a-ab4b-4193-a7d7-3eb5c810344b

运行一下,测试没问题,至此maven  web项目创建完成

b2405870-de8a-43d3-82aa-bd69b3f890f9

 最后可以根据需要配置pom.xml的依赖项:


  4.0.0
  SpringMVCMavenSample
  SpringMVCMavenSample
  war
  0.0.1-SNAPSHOT
  SpringMVCMavenSample Maven Webapp
  http://maven.apache.org
  
		
		
			junit
			junit
			3.8.1
			test
		

		
		
			com.alibaba
			fastjson
			1.1.25
		

		
		
			org.springframework
			spring-web
			${springVersion}
		

		
			org.springframework
			spring-context
			${springVersion}
			jar
		

		
			org.springframework
			spring-core
			${springVersion}
			jar
		

		
			org.springframework
			spring-beans
			${springVersion}
			jar
		

		
			org.springframework
			spring-webmvc
			${springVersion}
			jar
		

		
			org.springframework
			spring-orm
			${springVersion}
			jar
		


		
		
			mysql
			mysql-connector-java
			5.1.34
		

		
		
			commons-dbcp
			commons-dbcp
			1.4
		

		
		
			jstl
			jstl
			1.2
		

		
		
			log4j
			log4j
			1.2.17
		

		
		
			commons-fileupload
			commons-fileupload
			1.2.1
		

		
			commons-io
			commons-io
			1.4
		


		
			javax.servlet.jsp
			jsp-api
			2.2
			jar
		
  
  
    SpringMVCMavenSample
  
	
		4.2.3.RELEASE
	


pom.xml文件中的springVersion的值也可以通过properties文件配置,方式如下:

在resource文件夹下新建文件xxx.properties,内容如下:

springVersion=4.2.3.RELEASE
然后在web.xml加上如下配置:

<properties resource="classpath:*.properties"/>
如果结合Spring,则可以用以下方式配置


            
                 
		
		
			
				classpath:*.properties
			
		
    

下面是SpringMVC配置:

1、配置web.xml

1.1 配置其它xml文件的位置:

	
		contextConfigLocation
		classpath:application*.xml
	

1.2 配置SpringMVC核心控制器:

      
      
        dispatcher  
        org.springframework.web.servlet.DispatcherServlet  
          
            contextConfigLocation  
            classpath:spring-mvc.xml  
        
        1  
      
      
        dispatcher  
          
        /  
     
1.3 配置编码格式:
	  
        encodingFilter  
        org.springframework.web.filter.CharacterEncodingFilter  
          
            encoding  
            UTF-8  
          
          
            forceEncoding  
            true  
          
      
      
        encodingFilter
        /*  
    

1.4 其它配置:



2、配置spring-mvc.xml

	
	
	
text/plain;charset=UTF-8
 
  
	
   		
	   
		    
		    
		    
	   
    
其中MyFilter.java需要实现HandlerInterceptor或继承HandlerInterceptorAdapter,可以重写preHandle、postHandle、afterCompletion,通过response.sendRedirect(request.getContextPath()+"xxx/login");可以重定向到登录页面。

	
	

	
	
	
resources和pages文件夹都位于webroot或webapp文件夹下,resources文件夹可以包含js、css、images等文件夹,当然也可以把js、css等文件夹移到和pages同一层,这时需要分别配置,如下:
	
	
	
	

3、配置applicationContext.xml,名字随便取

如果web.xml有配置,就不需要再配置以下内容:

            
                 
		
		
			
				classpath:*.properties
			
		
    

配置扫描所有的service、dao(mybatis配置中包含了dao扫描,这里可以不用配置)等,可以全部扫描,也可以分开扫描:


或所有注解都扫描:
配置数据源及Mybatis:
  	
  	
        
        
        
               
        
        
        
        
        
        
        
        
	
        
        
        
        
        
        
        
        
        
        
              
    
      
    
    	
	    
	    
     
      
     

mybatisConfig.xml文件内容大致如下:

  


	  
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
      
 

事务控制有编程式和声明式两大类,编程式就是用java实现事务的开启和提交/回滚,粒度最小,可以控制到方法中的代码块,但编码较多。通常采用声明式,声明式有两种,一种是通过tx和aop配置文件来配置,另一种是通过@transactional注解,可以用于类和方法,有需要时我们也可以进行手工提交/回滚事务。

两者都要配置以下内容:

1)手工提交/回滚事务

通过在service类中加上:

@Autowired

DataSourceTransactionManager transactionManager;

然后代码中通过transactionManager打开事务,提交/回滚事务,代码:

DefaultTransactionDefinitiondef=newDefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);// 事物隔离级别,开启新事务,这样会比较安全些。
TransactionStatus status = transactionManager.getTransaction(def);// 获得事务状态
try{
//TODO 操作数据库的逻辑代码
transactionManager.commit(status);
}catch(Exception e){
transactionManager.rollback(status);
}


2)、通过tx和aop实现事务控制:

配置代理方式:

      
    

声明对事务注解的支持

      
    
配置事务具体内容:

      
          
              
              
              
              
            
              
              
              
              
          
          
      
          
           
    

3)、通过@transactional实现事务控制

// 指定回滚
@Transactional(rollbackFor=Exception.class) 
    public void methodName() {
       // 回滚
       throw new Exception("...");
    } 
//指定不回滚
@Transactional(noRollbackFor=Exception.class)
    public ItimDaoImpl getItemDaoImpl() {
        // 不会回滚
        throw new RuntimeException("注释");
    } 

    // 如果有事务,那么加入事务,没有的话新建一个(不写的情况下)
    @Transactional(propagation=Propagation.REQUIRED) 
    // 容器不为这个方法开启事务
    @Transactional(propagation=Propagation.NOT_SUPPORTED)
    // 不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
    @Transactional(propagation=Propagation.REQUIRES_NEW) 
    // 必须在一个已有的事务中执行,否则抛出异常
    @Transactional(propagation=Propagation.MANDATORY)
    // 必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
    @Transactional(propagation=Propagation.NEVER) 
    // 如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
    @Transactional(propagation=Propagation.SUPPORTS) 
    
    /*
    public void methodName(){
       // 本类的修改方法 1
       update1();
       // 调用其他类的修改方法
       other.update();
       // 本类的修改方法 2
       update2();
    }
    其中3个update方法都加了事务注解,methodName()没有加事务,该类中的两个update方法的事务不起作用(调用同一个类的事务方法的问题请看http://blog.csdn.net/wudiyong22/article/details/77853347),other.update()失败了只会回滚该方法,不会影响导致其它两个update方法回滚
    */
@Transactional(propagation=Propagation.NESTED) 
// readOnly=true只读,不能更新,删除 
@Transactional (propagation = Propagation.REQUIRED,readOnly=true) 
// 设置超时时间
@Transactional (propagation = Propagation.REQUIRED,timeout=30)
// 设置数据库隔离级别
@Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)


aop的其它配置,可以单独作为一个xml文件,如applicationSpringAOP.xml,内容略。






 
  
 
 

你可能感兴趣的:(环境搭建及常见问题)