用MAVEN搭建SSM(Spring+SpringMVC+MyBatis)整合小案例(用户登录功能)

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项目


然后创建好了maven项目,会报错,首先:选择项目右击--》java ee tools ---》选Gen……这项,然后就可以了。


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使用时避免不了的,还是有必要好好学一下的。今天就到这里,加油!

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页