1.说明,这几天在学习maven的简单使用,看视频看着看着就想自己动手实践一下,然后本来想从网上直接找一个相关的代码,然后我直接贴到项目中就好了,谁知找了几个以后发现代码不是很全,所以对于刚刚接触maven的自己来说修改那些代码和处理那些错误还是有一定的难度的。于是乎,我就想自己来用maven搭建一个之前不是用maven工具搭建的案例来做一个测试(其实我有这个想法的时候,是因为看了教学视频,maven跟之前的普通项目而言就是使用maven来导入jar包,其他几乎没有什么很大的差别,当然这只是我现在粗浅的理解。。下面给从我经常看视频的网址:http://yun.itheima.com/map/22.html。。还有:http://www.atguigu.com/download.shtml#oracle。。对了,顺便给出查找jar包的网址:http://mvnrepository.com/)。。好了,废话结束,开始完整的maven搭建SSM简单案例。
2.创建maven项目
2.然后更改jdk版本什么的带回直接在pom.xml文件中直接给出。
首先看一下项目结构:
3.ok,关于代码的业务逻辑就是表单提交,然后调用数据库验证用户是否存在,下面就不一一介绍,直接给出代码。
maven中最重要的pom.xml(这里面有些包其实是不需要的,这个我也主要从网上copy下来的,不过有部分是我自己修改的)
<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.lin</groupId>
<artifactId>SSM_MAVEN</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<!-- spring版本号 -->
<spring.version>4.0.2.RELEASE</spring.version>
<!-- mybatis版本号 -->
<mybatis.version>3.2.6</mybatis.version>
<!-- log4j日志文件管理包版本 -->
<slf4j.version>1.7.7</slf4j.version>
<log4j.version>1.2.17</log4j.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<!-- 表示开发的时候引入,发布的时候不会加载此包 -->
<scope>test</scope>
</dependency>
<!-- spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</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-oxm</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-webmvc</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-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis/spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- 导入java ee jar 包 -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<!-- 注意,这里要设置成 provided,否则运行时会与tomcat中已经有的包冲突-->
<scope>provided</scope>
</dependency>
<!-- 导入Mysql数据库链接jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<!-- 导入c3p0的jar包,用来在applicationContext.xml中配置数据库 -->
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</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>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.41</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>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<!-- 上传组件包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
</dependencies>
<!-- 添加项目jdk编译插件 -->
<build>
<!-- 设置编译版本为1.8 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
</plugin>
</plugins>
</build>
</project>
4.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>SSM_MAVEN</display-name>
<!-- 配置Spring核心监听器,如果不指定配置文件,则会默认从/WEB-INF/applicationContext.xml作为配置文件 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- contextConfigLocation -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext.xml</param-value>
</context-param>
<!-- 定义Spring MVC的前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 让Spring MVC的前端控制器拦截所有请求 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 编码过滤器 -->
<filter>
<filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
5.applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
http://mybatis.org/schema/mybatis-spring
http://mybatis.org/schema/mybatis-spring.xsd">
<!-- mybatis:scan会将org.fkit.mapper包里面的所有接口当作mapper配置,之后可以自动引入mapper类 -->
<mybatis:scan base-package="org.fkit.mapper"/>
<!-- 扫描org.fkit包下面的java文件,有Spring的相关注解的类,则把这些类注册为Spring的bean -->
<context:component-scan base-package="'org.fkit"/>
<!-- 使用PropertyOverrideConfiguration后处理器加载数据源参数 -->
<context:property-override location="classpath:db.properties"/>
<!-- 配置C3P0数据源 -->
<!-- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"/> -->
<!--配置数据源dataSource,使用c3p0-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!--指定连接数据库的驱动-->
<property name="driverClass" value="${dataSource.driverClass}"/>
<!--指定连接数据库的URL-->
<property name="jdbcUrl" value="${dataSource.jdbcUrl}"/>
<!--指定连接数据库的用户名-->
<property name="user" value="${dataSource.user}"/>
<!--指定连接数据库的密码-->
<property name="password" value="${dataSource.password}"/>
</bean>
<!-- 配置SQLSessionFactory,org.mybatis.spring.SqlSessionFactoryBean书Mybatis社区开发用于整合Spring的bean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
p:dataSource-ref="dataSource"/>
<!-- JDBC事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource"/>
<!-- 启用支持annotation注解方式事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
6.springmvc-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
http://mybatis.org/schema/mybatis-spring
http://mybatis.org/schema/mybatis-spring.xsd">
<!-- 自动扫描该包,SpringMVC会将包下用@Controller注解的类注册为Spring的controller -->
<context:component-scan base-package="org.fkit"/>
<!-- 设置默认配置方案 -->
<mvc:annotation-driven/>
<!-- 视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix">
<value>/WEB-INF/content/</value>
</property>
<!-- 后缀 -->
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
7.db.properties
dataSource.driverClass=com.mysql.jdbc.Driver
dataSource.jdbcUrl=jdbc:mysql://localhost:3306/car
dataSource.user=root
dataSource.password=root
8.Admin.java
package org.fkit.domain;
import java.io.Serializable;
public class Admin implements Serializable{
private static final long serialVersionUID = 1L;
private Integer id;
private String loginname;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLoginname() {
return loginname;
}
public void setLoginname(String loginname) {
this.loginname = loginname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
9.AdminMapper.java
package org.fkit.mapper;
import org.apache.ibatis.annotations.Param;
import org.fkit.domain.Admin;
public interface AdminMapper {
/**
* 根据登录名和密码查询用户
* */
//如果用注解方式开发,就直接在mapper接口上直接写SQL语句,当然,要在配置文件中开启mybatis的注解扫描
//@Select("select * from login where loginname=#{loginname} and password=#{password}")
//如果直接用xml配置文件的方式,那就不需要上述的注解,看下一步的xml配置文件(这里要注意的就是xml文件中的一些命名规则)
public Admin findWithLoginnameAndPassword(@Param("loginname")String loginname,
@Param("password")String password);
}
10.AdminMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--注意命名空间的路径要与mapper接口对应-->
<mapper namespace="org.fkit.mapper.AdminMapper">
<!--注意id名,以及parameterType、resultType要与mapper接口对应,这样mybatis才能使用代理方式开发-->
<select id="findWithLoginnameAndPassword" parameterType="org.fkit.domain.Admin" resultType="org.fkit.domain.Admin">
select * from login
where loginname=#{loginname} and password=#{password}
</select>
</mapper>
11.AdminService.java
package org.fkit.service;
import org.fkit.domain.Admin;
public interface AdminService {
public Admin login(String loginname,String password);
}
12.AdminServiceImpl.java
package org.fkit.service.impl;
import org.fkit.domain.Admin;
import org.fkit.mapper.AdminMapper;
import org.fkit.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* Admin服务层接口实现类
* */
@Service("adminService")
public class AdminServiceImpl implements AdminService{
/**
* 自动注入adminMapper
* */
@Autowired
private AdminMapper adminMapper;
/**
* AdminService接口Login方法实现
* */
public Admin login(String loginname,String password){
return adminMapper.findWithLoginnameAndPassword(loginname, password);
}
}
13.AdminController.java
package org.fkit.controller;
import javax.servlet.http.HttpSession;
import org.fkit.domain.Admin;
import org.fkit.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;
/**
* 处理用户请求控制器
* */
@Controller
public class AdminController {
/**
* 自动注入adminService
* */
@Autowired
@Qualifier("adminService")
private AdminService adminService;
/**
* 处理/login请求
* */
@RequestMapping(value="/login")
public ModelAndView login(String loginname,String password,ModelAndView mv,HttpSession session){
//根据用户名和密码查找用户,判断用户登录
Admin admin = adminService.login(loginname, password);
if(admin != null){
//登录成功,将user对象设置到HttpSession作用域中
session.setAttribute("admin", admin);
//转发到main请求
mv.setViewName("main");
}else{
//登录失败,设置失败提示信息,并跳转到登录页面
mv.addObject("message","登录名或密码错误,请重新输入!");
mv.setViewName("loginForm");
}
return mv;
}
}
14.FormController.java
package org.fkit.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 动态页面跳转控制器
* */
@Controller
public class FormController {
@RequestMapping(value="/{formName}")
public String loginForm(@PathVariable String formName){
return formName;
}
}
15.最后的页面
loginForm.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>登录页</title>
</head>
<body>
<h3>登录页面</h3>
<form action="login" method="POST">
<font color="red">${requestScope.message}</font>
<table>
<tr>
<td><label>登录名:</label></td>
<td><input type="text" id="loginname" name="loginname"></td>
</tr>
<tr>
<td><label>密码:</label></td>
<td><input type="password" id="password" name="password"></td>
</tr>
<tr>
<td><input type="submit" value="登录"></td>
</tr>
</table>
</form>
</body>
</html>
main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!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>首页</title>
</head>
<body>
欢迎[${sessionScope.admin.loginname }]访问
<br>
</body>
</html>
16.以上就是全部代码,接下来开始测试运行。
首先我遇到的是下面这个错,后来查了资料是maven默认使用6版本的tomcat来运行,所以我们要将其修改为7(网上是说jdk跟tomcat版本不合才导致这个错误的,我的jdk版本是8以上,所以我后面配了一个7的服务器就可以了)。
修改插件的方法是在pom.xml中添加插件(注意在云maven命令运行时要用tomcat7:run而不是tomcat:run命令,否则还会执行默认的tomcat6来运行项目)
小结:初次建了一个maven的项目,一点都不熟练,而且很多错误其实都不会处理,总之呢,百度是个好东西,要好好使用。在实际项目开发中,maven使用时避免不了的,还是有必要好好学一下的。今天就到这里,加油!