maven入门
认识maven
maven是便于管理jar包依赖的一种项目管理工具,可以构建java的普通项目和web项目
这里主要是了解在maven的配置和实现在eclipse环境下构建一个web项目
一、下载maven
下载地址:跳转官方下载
下载apache-maven 是用来能够修改配置文件,以及作为指定的本地仓库的作用而使用
二、在eclipse中搭建maven项目
1.创建项目
2.配置项目
1.项目创建后就会在项目中包如下错误
这是要求我们需要创web.xml文件,达到连接服务器的要求
然后我们进行web.xml文件的配置,网上有很多配置,下面我贴出我的配置以及对web.xml文件配置的理解
web.xml用来配置web容器中对servletConext的各部分的管理机制
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
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">
<!-- 容器将<context-param>中的信息转化为键值对,并交给ServletContext.
spring框架必须定义ContextLoaderListener,在启动Web容器时,自动装配Spring applicationContext.xml的配置信息
-->
<context-param>
<!-- 指定Spring上下文配置文件 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
<!-- 将web与springmvc联系起来,创建spring容器 -->
</context-param>
<listener> <!-- 监听器,开启服务器后就立刻运行 -->
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 使用字符编码过滤器,将所有经过的编码文件改为UTF-8编码模式 -->
<filter>
<filter-name>encoding</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>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- dispatcherServlet:前端控制器(中央控制器) -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- servlet范围内的参数,只能在servlet的init()方法中取得 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
<url-pattern>*.css</url-pattern>
<url-pattern>*.html</url-pattern>
<url-pattern>/imgs/*</url-pattern>
</servlet-mapping>
</web-app>
可以简易的理解为web容器(如tomcat)包含整个项目,其中有servlet容器和spring容器两大类,其中
-
spring容器{又包含了service、dao的bean层和springMVC(controller控制)层}
-
servlet容器包含servlet对象。
1.开始运行服务器时,tomcat就为每一个应用创建了servletConext容器,后读取web.xml配置信息。< context-param >可以将读取到的信息(ApplicationContext)在ServletContext中以键值对的形式保存。
2.通过< servlet >< servlet-mapping >标签规定springmvc(前端/中央控制器)的通过要求。< init-param >获取servlet范围内的参数
3.在eclipse中更改默认maven配置和本地仓库
-
修改自己下载的apache-maven 文件下的conf下的setting.xml文件
-
配置eclipse
4.pom.xml文件配置(对项目所需要的依赖进行导包)
可以在:跳转全球maven仓库, 较全,可能会较慢
跳转国内阿里仓库,推荐使用
这些仓库中找到你需要的依赖,并将文件对应的依赖放入pom.xml中,maven将从配置的镜像路径下找到并自动导包,也可以通过pom文件类实现包依赖的问题
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.study.it</groupId>
<artifactId>wetalk</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties><!-- 内容为 .verson为下面jar包的版本 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.3.7.RELEASE</spring.version>
<mybatis.version>3.4.1</mybatis.version>
</properties>
<dependencies>
<!-- mybatis 的自动分页功能包 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.3</version>
</dependency>
<!-- 用来SSM使用注解的验证功能(如过滤器那般) -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<!-- 阿里fast json -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.13</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 实现AOP所依赖的包 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.10</version>
</dependency>
<!-- spring工厂空间
主要实现:实现 依赖注入、事务管理、Web应用程序、数据访问、消息传递、测试和更多的核心支持。 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc-portlet</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<!--springMvc注解验证支持 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml</groupId>
<artifactId>classmate</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.3.5.Final</version>
</dependency>
<!-- mysql支持 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!--连接池支持 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!-- MyBatis支持 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- cglib动态代理、 javassist用来 处理 Java 字节码的类库 -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.17.1-GA</version>
</dependency>
<!-- servlet支持 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 文件上传支持 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<!-- 日志类依赖 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
</project>
5. SSM架构下配置文件
需要配置,applicationContext.xml , mvc.xml 和 mybatis-config.xml
这些命名都是大部分人认同的都可以修改的。
- mvc.xml(在web.xml中通过servlet-init向mvc.xml取值)
mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
">
<!-- 控制所有的 ui下的控制器对象的配置
spring可以自动去扫描base-package下面或者子包下面的java文件,
如果扫描到有@Component @Controller @Service @Repository等这些注解的类,则把这些类注册为bean
-->
<context:component-scan base-package="com.study.it.ui"/>
<mvc:annotation-driven/>
<!-- 配置spring视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/page/" p:suffix=".jsp"
p:viewClass="org.springframework.web.servlet.view.JstlView">
</bean>
<!-- 上传文件 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:defaultEncoding="UTF-8" p:maxUploadSize="32505856"
p:maxInMemorySize="4096"/>
</beans>
- applicationContext.xml
在启动Web容器时,自动在servletContext中装配Spring applicationContext.xml的键值对信息
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache-4.0.xsd">
<!--
@Component 把对象加入ioc容器,对象引用名称是类名,第一个字母小写
@Component(“name”) 把指定名称的对象,加入ioc容器
@Repository 主要用于标识加入容器的对象是一个持久层的组件(类)
@Service 主要用于标识加入容器的对象是一个业务逻辑层的组件
@Controller 主要用于标识加入容器的对象是一个控制层的组件
@Resource 注入属性(DI), 会从容器中找对象注入到@Resource修饰的对象上
@Autowired 注入属性(DI), 会从容器中找对象注入到@Autowired修饰的对象上
-->
<!--
spring可以自动去扫描base-package下面或者子包下面的java文件,
如果扫描到有@Autowride @Qualifier @Resource 等注解类
-->
<context:component-scan base-package="com.study.it"/>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties"/>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 基本信息 --> <!-- 可以将mybatis-config.xml中的信息去除了 -->
<property name="jdbcUrl" value="${url}"></property>
<property name="driverClass" value="${driver}"></property>
<property name="user" value="${username}"></property>
<property name="password" value="${password}"></property>
<!-- 其他配置 -->
<!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize" value="3"></property>
<!--连接池中保留的最小连接数。Default: 3 -->
<property name="minPoolSize" value="3"></property>
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize" value="15"></property>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement" value="3"></property>
<!-- 控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->
<property name="maxStatements" value="8"></property>
<!-- maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
<property name="maxStatementsPerConnection" value="5"></property>
<!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime" value="1800"></property>
</bean>
<!-- 代替咱们土制的MyBatisUtil,(sessionFactory)获得连接 -->
<bean id="sessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean"
p:dataSource-ref="dataSource"
p:configLocation="classpath:mybatis-config.xml"
p:mapperLocations="classpath:mapper/*.xml"/>
<!-- p:mapperLocations:"classpath:Mapper.xml所在的位置" -->
<!-- ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -->
<!-- 不用再配dao,但是注入给的时候,缺少名字(接口名小写开头typeDao),只能采用byType的自动注入 -->
<!-- 自动创建实现类,并注入spring容器,代替MybatisUtil.getSession().getMapper(GoodsDao.class); -->
<!-- 等效于<bean class="com.study.it.dao.impl.mybatis.UserDaoImpl"/> -->
<bean id="mybatisScanner"
class="org.mybatis.spring.mapper.MapperScannerConfigurer"
p:sqlSessionFactoryBeanName="sessionFactory"
p:basePackage="com.study.it.dao"/><!-- 接口所在的包 -->
<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
<!--5、Spring 配置声明式事物 -->
<!-- 相当于TxManager事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource" />
<!-- 相当于是我们的TranAop ,配置事务范围(切面的范围)
使用tx标签配置的拦截器
-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="login" read-only="true" />
<tx:method name="find*" read-only="true" /> <!-- 规定DAO中方法使用的开头,有利于优化处理方式 -->
<tx:method name="select*" read-only="true" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="edit*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="*" propagation="NEVER" />
</tx:attributes>
</tx:advice>
<!-- 定义切面 -->
<aop:config>
<!-- 此时配置的切点在Service层以impl为结尾的类中,
方法命名需要按照以上advice通知点开头命名。 -->
<aop:pointcut expression="execution(public * com.study.it.service.impl.*Impl.*(..))" id="pt"/>
<!-- aop的上下顺序影响了谁包裹谁的作用 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/>
</aop:config>
</beans>
- mybatis-config.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>
<!-- 配置所有有关mapper数据库的操作 -->
<settings>
<!-- 开启全局的懒(延迟)加载 !!!延迟加载最好不要与缓存共存 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 关闭立即加载,其实不用配置,默认为false -->
<setting name="aggressiveLazyLoading" value="false" />
<!-- 打开二级缓存 需要基础类继承Serializable达成可序列化 和 mapper中建立标签cache -->
<setting name="cacheEnabled" value="true"/>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!-- 加载数据库所要要类属性信息 -->
<typeAliases>
<package name="com.study.it.entity"/>
</typeAliases>
<!-- 配置数据库切面拦截器 ,用来做分页语句 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
<property name="helperDialect" value="mysql"/>
</plugin>
</plugins>
</configuration>
总结
最后我将自己对SSM框架下的容器及运行流程的理解,,,希望有大佬能对刚入门我这不成熟的理解加以纠正,提前谢谢各位大佬的指点。。
项目的运行
- 容器
要了解SSM框架运行就需要首先了解容器:
web容器(服务器)中主要为servlet容器和spring容器,并且两大容器不能直接进行数据交互。- serlvet容器
- servlet有三大域对象,其中application(servletContext) .可以说是每一个web项目各自的总servlet空间,又称为servlet的上下文环境
- servlet是对servlet对象的管理
- spring容器 (管理了整个项目运行的web层,业务层,dao层和持久层)
- springMVC处理
- 应用上下文webapplicationContext
- springMVC处理
- serlvet容器
springMVC的中央处理器(前端处理器DispatcherServlet)的功能继承自servlet,所以首先经过Servlet容器管理对象的功能后转接到springMVC容器处理,又因为serlvet不能获取spring注入的依赖,因此进行在启动使使用监听器提前运行的效果对Servlet进行spring注入(将IOC容器的映射以键值对的形式存入ServletContext全局上下文中)。
java小新人文章(带着新人简单看看servlet到springmvc)
#TOC