- 浏览: 74197 次
文章列表
<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/spring-mvc.xml</pa ...
从VelocityViewServlet到VelocityLayoutServlet
使用Velocity开发web应用时,需要在web.xml中配置一个Velocity提供的VelocityViewServlet接受处理对velocity模板(即vm文件)的forward访问。(MVC,view只是做展示,通过control,转发到view)
VelocityViewServlet负责将设置在request中的attribute“读出”和模板文件进行merge形成最终的页面,向response输出显示在用户电脑上。
VelocityViewServlet是一个简单的易使用的。 ...
通过DbUnit来管理测试数据
@DataSet
public class UserDAOTest extends UnitilsJUnit4 {
@Test
public void testFindByName() {
User result = userDao.findByName("doe", "john");
assertPropertyLenientEquals("userName", "jdoe", result);
}
} ...
Mybatis 整合Spring
根据官方的说法,在ibatis3,也就是Mybatis3问世之前,Spring3的开发工作就已经完成了,所以Spring3中还是没有对Mybatis3的支持。
因此由Mybatis社区自己开发了一个Mybatis-Spring用来满足Mybatis用户整合Spring的需求。
通过Mybatis-Spring整合Mybatis跟Spring
MapperFactoryBean
首先,我们需要从Mybatis官网上下载Mybatis-Spring的jar包添加到我们项目的类路径下,当然也需要添加Mybatis的相关jar包和Spring的相关j ...
在pom.xml增加以下插件:
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite&g ...
搭建自己的maven私服,原因有三个:
1、maven自己的中央库访问速度比较慢,伟大的墙再一闹腾,会时断时续。
2、有些jar包由于版权原因,maven中央仓库没有,比如oracle JDBC驱动。另外也会有一些项目中用到的比较老的开源jar包, 中央仓库也没用。这种情况我们需要把jar包手动上传到私服。
3、公司自己开发的jar包并不开源,不能上传到maven中央仓库,只能部署到私服上面。
私服的数据源
私服里面绝大多数的jar包都来自另外一个私服或者中央仓库。
所以第一件事情是指定私服的数据来源。
Nexus默认设置为Maven中央仓库,但Maven中央仓库实在是太 ...
插件配置就是绑定插件,指定其预定义的参数值,来进一步调整插件目标所执行的任务。
可以通过命令行和POM中插件全局配置的形式来配置,不是所有的插件配置都可以通过命令行配置的。
1、命令行插件配置
如maven-surefire-plugin插件提供一个maven.test.skip参数、当值为true时会跳过执行测试、命令行执行方式:
mvn install –Dmaven.test.skip=true
mvn install
可以对比两者在控制台的输出就发现下面多了test阶段
2、POM中插件全局配置
在声明插件的时候,对此插件进行一个全局配置,后面所有使用该插件 ...
如何建立Nexus私人仓库
去nexus的bin目录,安装下nexus install。
然后确认服务是否已经安装完成。
http://localhost:8081/nexus/index.html#welcome在浏览器里输入这个连接 帐号是admin密码是admin123
repository的类型:
hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。
proxy,代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。
group,仓库组,用来组合多个hosted/proxy仓库,当你的项目希望在多个repositor ...
用户可以通过两种方式调用Maven插件目标。
maven命令中,带冒号的方式是指定要执行的插件目标。不带冒号的方式是执行生命周期。
第一种方式是将插件目标与生命周期阶段(lifecycle phase)绑定
这样用户在命令行只是输入生命周期阶段而已。
例如:Maven默认将maven-compiler-plugin插件的compile目标与compile生命周期阶段绑定,
因此命令mvn compile实际上是先定位到compile这一生命周期阶段,然后再根据绑定关系调用maven-compiler-plugin的compile目标。
第二种方式是直接在命令行指 ...
项目继承:项目继承是指在pom.xml中设置parent,如下:
这样项目就会从父pom中继承相关的配置,主要有以下配置:
properties:自定义属性,后面会讲到
dependencies:依赖,在父pom中配置的依赖会被子模块继承。
developers and contributors:开发人员信息
plugin lists:plugin 列表,包括各个plugin 的配置,如常见的compiler plugin
reports lists:报表的配置,这个是自动生成站点相关的
继承和依赖的区别
继承是会从上一级pom获取配置的,而依赖紧紧是处理CLASS ...
项目的依赖还有一个特性就是依赖管理(Dependency Management)
如果我们有一个项目,包含多个子模块,而这些子模块可能都需要用到共同的依赖,
如果将这些依赖都放置在项目的pom.xml 中,在遇到依赖升级的时候,我们调整一下 ...
Maven传递依赖
依赖的传递性。通过依赖设置解决了项目的CLASSPATH 问题,实际情况是我们依赖的项目其本身也是依赖其他的项目的,
如我依赖commons-email,而commons-email 需要依赖JavaMail 和JAF,这个时候,Maven 会自动处理这个依赖传递,会将JavaMail 和JAF 也会加入到CLASSPATH 中,通过这种传递地址,可以确保依赖的完整性,保证程序的正常运行。
maven会根据groupId和artifactId来进行依赖去重,maven最终只取一个artifact,去重多版本。(去重的依据:第一是路径最短优先,第二是声明优先), ...
Ant path 匹配原则
路径匹配原则(Path Matching) Spring MVC中的路径匹配要比标准的web.xml要灵活的多。
默认的策略实现了 org.springframework.util.AntPathMatcher,就像名字提示的那样,路径模式是使用了Apache Ant的样式路径,
Apache Ant样式的路径有三种通配符匹配方法(在下面的表格中列出)
这些可以组合出很多种灵活的路径模式
通配符说明
? 匹配任何单字符
* 匹配0或者任意数量的字符
** 匹配0或者更多的目录
Spring提供了强大的Ant模式通配 ...
分层开发遵守的原则:
在action中调用多个service好,还是调用一个集成的service好呢?
解决方案:
应该是尽量调用一个service,设计业务逻辑组件时你应该对外提供一个完整的服务,比如要注册一个用户,外对应该只提供一个方法,
那么验证你注册用户是否存在的逻辑应该在这个服务中去判断,而不应该你在action中先去调用判断用户是否存在的服务,不存在再去调用注册的服务。
另一种情况就是要看你的事务从哪里开启,一般从业务逻辑层开启事务是最合理的,所以你的action如果要调用多个service,很难保证在一个事务中。
设计总结
1、上层依赖于下层,依赖 ...
注解是代码的附属信息,它遵循一个基本原则:注解不能直接干扰程序代码的运行,无论增加或删除注解,代码都能够正常运行。
Java语言解释器会忽略这些注解,而由第三方工具负责对注解进行处理。第三方工具可以利用代码中的注解间接控制程序代码的运行,它们通过Java反射机制读取注解的信息,并根据这些信息更改目标程序的逻辑,而这正是Spring AOP对@AspectJ提供支持所采取的方法。
注解的语法比较简单,除了@符号的使用以外,它基本上与java的固有语法一致,java内置了三种注解,定义在java.lang包中。
@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类 ...