前言

  今天是10.24, 也是程序员的节日. 当然要祝各位程序员早日跳槽竞升, 早日找到女盆友, 早日成为技术大牛!(留下没有技术的眼泪)

  做开发时,无人可避免导入jar包的繁琐过程。去哪下载jar包呢?jar包是不是最新版呢?如何让项目中添加的jar包不遗漏呢?诸多与jar包有关的问题困扰着有或没有强迫症的java开发同胞们,有没有什么轻松,快捷,高效,便利,让人愉悦的导包工具呢?答案是肯定的,能完成这个功能的就是maven。

1. Maven简述&配置

  maven项目对象模型(POM), 通过一小段描述信息来管理项目的构建, 报告和文档的软件项目管理工具. maven通过配置文件pom.xml来获取jar包.

  两个网址:
    maven官网:http://maven.apache.org/
    导jar包用:http://mvnrepository.com/

下载+配置

  下载地址:http://maven.apache.org/download.cgi
  下载完成后解压文件, 并配置环境变量: 在这里插入图片描述
  变量值为maven解压的路径;

  win7 path中配置:
在这里插入图片描述

  win10, 添加输入路径即可.
在这里插入图片描述

  设置本地仓库位置
  在D:\apache-maven-3.5.2\conf下有settings.xml的配置文件. 打开配置文件找到注解

<!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->

  这段注解就是在提示本地仓库的配置, 只需自定义目录设定就可以指定本地目录的位置:

<localRepository>D:\apache-maven-3.5.2\repository</localRepository>

  然后找到元素, 在它之间加入jdk的默认版本信息:

	<profile>
		<id>jdk-1.8</id>
		<activation>
			 <activeByDefault>true</activeByDefault>
			 <jdk>1.8</jdk>
		</activation>
		<properties>
			 <maven.compiler.source>1.8</maven.compiler.source>
			 <maven.compiler.target>1.8</maven.compiler.target>
			 <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
		</properties>
	</profile>

在这里插入图片描述

  maven仓库一般分为三种, 如上图所示. 项目首先会去本地仓库或私服中查找, 如果没有去中央仓库查找, 找到后将它下载到本地, 下次使用时就不需要再去那下载了. 私服需要单独配置, 不配置默认不使用.

maven基本指令

在控制台窗口中输入

mvn –version : 查看maven版本(表示配置成功).
mvn help:system : 本地仓库初始化指令.

2. eclipse-maven

eclipse如何中添加maven?

  新版的eclipse已经支持maven,可打开eclipse中Window –> Preferences进行查看,如果存在maven选项即表示已支持maven,如图所示:
在这里插入图片描述

  如果没有也无需担心,可通过Help -> Install New Software,点击Add进行添加,如图所示:
在这里插入图片描述
Name : m2e
location : http://download.eclipse.org/technology/m2e/releases
点击OK之后,Next下去即可完成安装。

  安装完成之后还需要在eclipse中设置,如图所示:
在这里插入图片描述
  首先, 在Maven的Installations中add本地maven 的位置, 完成后选中新加的maven.

  然后, 在设置一下maven的配置文件和本地仓库的位置.
在这里插入图片描述
  User Settings选择我们之前重新写的setting.xml(maven/config下),点击Apply,Ok即可

如何用eclipse创建maven项目?

  首先新建一个maven项目,File -> New -> Other,找到Maven下的Maven Project,Next,Next,选择原型骨架,一般选择quickstart(针对java项目)和webapp(针对web项目),Next,填写项目(Group Id),模块(Artifact Id),版本(Version)以及包(Package, 自动生成),

  groupId:一般指某个公司或者某个组织的某个项目 比如 org.springframework
  artifactId:一般指某个具体项目的某个具体模块 比如 spring-context
如图所示:
在这里插入图片描述
  完成之后会自动生成相应目录。目录结构如下:
在这里插入图片描述

index.jsp报错问题:

  新建maven项目后, 会发现index.jsp报错.这是因为新项目使用 maven-artchetype-webapp, 由于这个catalog版本较旧, 用的servlet是2.3版本的, 因此我们需要稍加修改几个地方.
在这里插入图片描述
  首先, 打开WEB-INF找到web.xml, 把其中的内容修改为:

<?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">

</web-app> 

  然后, 修改项目的运行环境, 设置为本地jre, 默认eclipse自动jre. 如果是web项目在添加(AddLibrary)tomcat的运行环境.

  项目右键 -->Properties
在这里插入图片描述
  选中第三个选项, 使用本机jre.
在这里插入图片描述
  添加本机配置的tomcat.
在这里插入图片描述

  最后,在navigator视图修改版本信息:
  打开navigator视图
在这里插入图片描述

在这里插入图片描述
  检查core中的jdk版本是否是自己想要的, 如果按照上文配置
settings后, 会指定版本, 否则默认都是1.5

在这里插入图片描述
  facet.core中修改web版本为3.0;
  上边几步做好之后, 刷新错误就没了, 可以开发maven项目.

3. pom.xml详解

pom.xml 中的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/maven-v4_0_0.xsd">
	<!-- 基本配置 -->
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.qb.bigdata</groupId>
	<artifactId>MavenDemo</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>MavenDemo Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<!-- 依赖配置 -->
	<dependencies>
		 <dependency>
				 <groupId>junit</groupId>
				 <artifactId>junit</artifactId>
				 <version>4.12</version>
				 <scope>test</scope>
		 </dependency>
	</dependencies>

<!-- 构建配置 -->
	<build>...</build>
	<reporting>...</reporting>

	<!-- 项目信息 -->
	<name>...</name>
	<description>...</description>
	<url>...</url>
	<inceptionYear>...</inceptionYear>
	<licenses>...</licenses>
	<organization>...</organization>
	<developers>...</developers>
	<contributors>...</contributors>

	<!-- 环境设置 -->
	<issueManagement>...</issueManagement>
	<ciManagement>...</ciManagement>
	<mailingLists>...</mailingLists>
	<scm>...</scm>
	<prerequisites>...</prerequisites>
	<repositories>...</repositories>
	<pluginRepositories>...</pluginRepositories>
	<distributionManagement>...</distributionManagement>
	<profiles>...</profiles>

</project>

基本配置

  • modelVersion : pom模型版本, maven2和3只能为4.0.0
  • groupId : 用于maven定位的ID组
  • artifactId : 用于定位的组中唯一Id
  • version : 项目版本
  • packaging : 项目打包方式, 取值有: pom, jar, maven-plugin, ejb, war, ear, rar, par

依赖配置

  • parent 用于确定父项目的坐标.
  • groupId: 父项目构件标识符
  • artifactId: 父项目唯一标识符
  • relativePath: maven先在文件系统的relativePath位置找父项目的pom, 然后在本地仓库找, 再在远程(中央)仓库找.
  • version: 父项目的版本
<parent>     
	<groupId>com.learnPro</groupId>  
	<artifactId>SIP-parent</artifactId> 
	<relativePath></relativePath> 
	<version>0.0.1-SNAPSHOT</version> 
</parent>
  • modules 用于多模块的maven项目

  • module 指定某个模块. 例如<module>com-a</module>

  • properties 用于定义pom常量

<properties>
	<java.version>1.8</java.version>
</properties>

  常量可在pom文件的任意位置通过${java.version}获取

  • dependencies 项目相关依赖配置
	<dependencies>
		 <dependency>
			 <groupId>junit</groupId>
			 <artifactId>junit</artifactId>
			 <version>4.12</version>
			 <scope>test</scope>
		 </dependency>
	</dependencies>
  • dependencyManagement 父模块定义后, 子模块不会直接使用对应依赖(不会立刻导入jar包).

父项目:

<dependencyManagement>
     <dependencies>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>4.12</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
 </dependencyManagement> 

子项目:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
</dependency>

  优点: 父项目统一版本, 而子项目在需要的时候才引用对应依赖.

依赖怎么写?

  其实, 依赖并不需要开发人员手写, 想要添加jar包,去http://mvnrepository.com/搜索,打开之后选择版本,如图所示:
在这里插入图片描述

  把Maven中的内容复制到pom.xml的标签对中即可,保存之后自动查找本地仓库, 没有包则去中央仓库下载。

4. 如何让新项目利用maven依赖已经完成的项目?

  找到已完成项目,右键pom.xml –> Run As - >Maven install,如图所示:
在这里插入图片描述

  经过这步处理之后,eclipse会自动在target目录下新建一个项目的jar包,我们的新项目就要依赖这个jar包调用相关的内容。
  将完成项目的jar包导入新项目中与用maven添加其他jar包一样,依然要在pom.xml中写,其中与完成项目pom.xml中的描述要保持一致。

<dependency>
	<groupId>com.qibao.user</groupId>
	<artifactId>user-dao</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</dependency>

5. maven 入门级SSM项目

  新建项目, 在project explorer视图下的目录结构
在这里插入图片描述
  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>com.qb.bigdata</groupId>
	<artifactId>MavenDemo</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>MavenDemo Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<properties>
		<srping.version>4.3.7.RELEASE</srping.version>
		<mybatis.version>3.2.8</mybatis.version>
		<slf4j.version>1.7.12</slf4j.version>
		<log4j.version>1.2.17</log4j.version>
		<jackson.version>2.8.8</jackson.version>
		<freemarker.version>2.3.23</freemarker.version>
		<druid.version>1.0.5</druid.version>
	</properties>
	<!-- 用到的jar包 -->
	<dependencies>
		<!-- 单元测试 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.9</version>
			<!-- 表示开发的时候引入,发布的时候不会加载此包 -->
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
		<dependency>
			<groupId>c3p0</groupId>
			<artifactId>c3p0</artifactId>
			<version>0.9.1.2</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>javax.servlet.jsp-api</artifactId>
			<version>2.3.1</version>
			<scope>provided</scope>
		</dependency>
		<!-- java ee包 -->
		<dependency>
			<groupId>javax</groupId>
			<artifactId>javaee-api</artifactId>
			<version>7.0</version>
		</dependency>
		<!-- spring框架包 start -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${srping.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${srping.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${srping.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-oxm</artifactId>
			<version>${srping.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${srping.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${srping.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${srping.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${srping.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${srping.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>${srping.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${srping.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${srping.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${srping.version}</version>
		</dependency>
		<!-- spring框架包 end -->
		<!-- jackson -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<!-- mybatis框架包 start -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>${mybatis.version}</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.2</version>
		</dependency>
		<!-- mybatis框架包 end -->
		<!-- 通用mapper start -->
		<dependency>
			<groupId>com.github.abel533</groupId>
			<artifactId>mapper</artifactId>
			<version>2.3.4</version>
		</dependency>
		<dependency>
			<groupId>com.github.jsqlparser</groupId>
			<artifactId>jsqlparser</artifactId>
			<version>0.9.5</version>
		</dependency>
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper</artifactId>
			<version>5.0.0</version>
		</dependency>
		<!-- 数据库驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.35</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>${druid.version}</version>
		</dependency>
		<!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>
		<!-- jstl标签类 -->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<!-- log start -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>${log4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<!-- log END -->
		<!-- Json -->
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.3.1</version>
		</dependency>
		<!-- 格式化对象,方便输出日志 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.6</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.9.1</version>
		</dependency>
		<!-- 上传组件包 start -->
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</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.4</version>
		</dependency>
		<dependency>
			<groupId>commons-collections</groupId>
			<artifactId>commons-collections</artifactId>
			<version>3.2</version>
		</dependency>
		<dependency>
			<groupId>commons-beanutils</groupId>
			<artifactId>commons-beanutils</artifactId>
			<version>1.9.2</version>
		</dependency>
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.10</version>
		</dependency>
		<!-- 上传组件包 end -->
		<!-- View管理 start -->
		<dependency>
			<groupId>org.freemarker</groupId>
			<artifactId>freemarker</artifactId>
			<version>${freemarker.version}</version>
		</dependency>
		<!-- View管理 end -->
	</dependencies>

	<build>
		<finalName></finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

  资源文件db.properties

jdbc.drivername=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=77123

maxPoolSize=20
minPoolSize=5
initialPoolSize=10
checkoutTimeout=10000

  日志文件log4j.properties

# DEBUG,INFO,WARN,ERROR,FATAL
LOG_LEVEL=INFO

log4j.rootLogger=${LOG_LEVEL},CONSOLE,FILE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding=utf-8
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
#log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{8}@(%F:%L):%m%n 
#log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{1}@(%F:%L):%m%n
log4j.appender.CONSOLE.layout.ConversionPattern=%d: %l [%-p] - %m%n

log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.File=${user.home}/logs/24K-admin.log
log4j.appender.FILE.Encoding=utf-8
log4j.appender.FILE.DatePattern='.'yyyy-MM-dd
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
#log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout
log4j.appender.FILE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} %C{8}@(%F\:%L)\:%m%n 

  spring核心配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	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/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
        ">
	<!-- 1.外部资源 -->
	<context:property-placeholder location="classpath:db.properties"/>
        
    <!-- 2.c3p0数据库连接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    	<property name="driverClass" value="${jdbc.drivername}"></property>
    	<property name="jdbcUrl" value="${jdbc.url}"></property>
    	<property name="user" value="${jdbc.username}"></property>
    	<property name="password" value="${jdbc.password}"></property>
    </bean>
    
    <!-- 3.会话工厂 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    	<property name="dataSource" ref="dataSource"></property>
    	<property name="typeAliasesPackage" value="com.qb.bigdata.pojo"></property>
    	<!-- ***Mapper.xml放置位置 -->
    	<property name="mapperLocations" value="classpath*:mybatis/*.xml"></property>
		<property name="plugins">
			<array>
				<!-- pagehelper分页配置。 -->
				<bean class="com.github.pagehelper.PageInterceptor">
					<property name="properties">
						<value>
							helperDialect=mysql
							offsetAsPageNum=true
							<!-- 防止出现小于第一页,大于最后一页的异常情况出现。 -->
							reasonable=true
						</value>
					</property>
				</bean>
				<!-- 通用mapper的配置 -->
				<bean class="com.github.abel533.mapperhelper.MapperInterceptor">
					<property name="properties">
						<value>
							<!-- 主键自增回写方法,默认值MYSQL -->
							IDENTITY=MYSQL
							mappers=com.github.abel533.mapper.Mapper
						</value>
					</property>
				</bean>
			</array>
		</property>
    </bean>
    
    <!-- 4.批量加载mapper代理bean -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    	<property name="basePackage" value="com.qb.bigdata.mapper"></property>
    </bean>
    
    <!-- 5.注解扫描 -->
    <context:component-scan base-package="com.qb.bigdata.service"></context:component-scan>
    
    <!-- 6.事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    	<property name="dataSource" ref="dataSource"></property>
    </bean>
    
    <!-- 7.注解事务管理驱动 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    
</beans>

  springmvc配置文件springmvc.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:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	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">
	
	
	<!-- 1.注解驱动   -->
	<mvc:annotation-driven />
	
	<!-- 配置静态资源的访问映射  -->
	<mvc:default-servlet-handler/>
	
	<context:component-scan base-package="com.qb.bigdata.controller"></context:component-scan>
	
	<!-- JSP视图解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
		<property name="prefix" value="/WEB-INF/jsps/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>	
</beans>

  web.xml配置

<?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">

	<welcome-file-list>
    	<welcome-file>index.jsp</welcome-file>
  	</welcome-file-list>
  
  <!-- 全局配置参数, applicationContext.xml的位置-->
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <!-- 配置spring监听器, 监听ServletContext的创建 -->
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <!-- 前端控制器 -->
  <servlet>
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<!-- springmvc配置文件的位置 -->
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:springmvc.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>
  
 <!-- 配置编码过滤器 -->
	<filter>
		<filter-name>EncodingFilter</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>EncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

</web-app> 

  pojo实体类

@Table(name="user")
public class User implements Serializable{

	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private	int id;
	
	private String username;
	
	private String sex;
	
	private Date birthday;
	
	private String address;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public static long getSerialversionuid() {
		return serialVersionUID;
	}
	public User() {
		super();
	}
	public User(int id, String username, String sex, Date birthday, String address) {
		super();
		this.id = id;
		this.username = username;
		this.sex = sex;
		this.birthday = birthday;
		this.address = address;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
				+ address + "]";
	}	
}

  dao层, 继承通用mapper

public interface UserMapper extends Mapper<User> {

}

  service层, 接口

public interface UserService {

	/**
	 * 方法描述 根据id查询
	 * @param id
	 */
	public User selectById(int id);

}

  service层, 实现类

@Service("userService")
public class UserServiceImpl implements UserService {

	@Autowired
	private UserMapper userMapper;

	@Override
	public User selectById(int id) {
		return userMapper.selectByPrimaryKey(id);
	}
	
}

  controller层, 执行器

@Controller
@RequestMapping("/user")
public class UserController {

	@Autowired
	private UserService userService;
	
	//RESTful风格请求路径
	@RequestMapping(value="/select/{id}")
	public ModelAndView select(@PathVariable("id") int id){
		ModelAndView mv = new ModelAndView();
		User user = null;
		try {
			user = userService.selectById(id);
		} catch (Exception e) {
			e.printStackTrace();
		}
		mv.addObject("user", user);
		mv.setViewName("user");
		
		return mv;
	}
	
	@RequestMapping("/findUserById")
	public String findUserById(int id, Model model){
		User user = userService.selectById(id);
		model.addAttribute("user", user);
		return "user";
	}

}

  默认页面index.jsp, 发送请求

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	Welcome.<br>
    	<a href="${pageContext.request.contextPath}/user/select/1">select</a>
    </body>
    </html>

  前端执行器返回视图 user.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<table border="1">
    		<tr>
    			<td>id</td>
    			<td>username</td>
    			<td>sex</td>
    			<td>birthday</td>
    			<td>address</td>
    		</tr>
    		<tr>
    			<td>${user.id }</td>
    			<td>${user.username }</td>
    			<td>${user.sex }</td>
    			<td>${user.birthday }</td>
    			<td>${user.address}</td>
    		</tr>
    	</table>
    </body>
    </html>

  导入tomcat中并执行.

posted on 2018-10-24 23:47  七宝嘤嘤怪  阅读(401)  评论(0编辑  收藏  举报