1.新建maven项目,如果不在上面,请到other里面去找一下
2,进入maven项目之后,点击next
选择webapp之后 next
输入两个id package可以不写,是它默认帮你新建一个包,不写没关系
会生成一个这样目录的项目
2,配置maven
首先新建几个文件夹
2.1 添加Source文件夹
接下来需要添加
src/main/java
src/test/java
src/test/resources三个文件夹
右键项目根目录点击New -> Source Folder,
建出这三个文件夹。注意不是建普通的Folder,而是Source Folder。
项目或者文件加上右键 new sourceFolder,正常情况下是没有问题的
如果出现了下面的这情况,其实是真的存在的只是我们看不到
项目右键属性
切换成这样子就好了
设置好了之后发现
java就已经有了
继续新建其他的几个还没有的
新建之后就这样子了
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.(如果没有选上的话)
此处还可以更改显示顺序
此处还可以更改jdk
右键属性 project Facets
想要切换成3.0发现报错
这是因为新建项目的时候
用了maven-artchetype-webapp
由于这个catalog比较老,用的servlet还是2.3的
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">
-------------
org.eclipse.jdt.core.prefs
修改成
-------
修改成
重新打开属性 project Facets,看到这个地方已经修改成3.0; 勾选上tomcat
项目工程创建完成
new 一个server
启动之后看看有无报错,目前没有
运行一下,测试没问题,至此maven web项目创建完成
最后可以根据需要配置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
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
其中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
或所有注解都扫描:
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,内容略。