Maven搭建SSM项目

来源:互联网 发布:cab软件下载 编辑:程序博客网 时间:2024/06/04 18:53

1.基本环境部署

首先你需要的是把电脑的基本环境配置好,如果你用的windows系统:1:jre环境2:编译器:IntelliJ IDEA173:一个服务器,没有也行,在本机测试4:Maven配置好

2.配置Maven

2.1下载maven

官方地址:http://maven.apache.org/download.cgi

这里写图片描述

解压并新建一个本地仓库文件夹
这里写图片描述

2.2配置本地仓库路径

这里写图片描述

这里写图片描述

2.3.配置maven环境变量

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

3.打开idea建立一个maven项目

这里写图片描述
选择Maven项目,勾选create from archetype,然后下一步输入GroupId和ArtifactId。
GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。
ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
一般GroupID就是填com.leafive.test这样子。我也忘记这个GroupId后面哪里能用到了,但ArtifactID是项目打包后的名字,最好和项目同名。

这里写图片描述
添加的配置为 archetypeCatalog=internal 可以自动建立对应目录!
点击NEXT
这里写图片描述
点击NEXT
这里写图片描述
点击Finish后项目开始创建
点击右下角查看进去
这里写图片描述
6.maven web模板项目结构
这里写图片描述

这里写图片描述

这里写图片描述

同样在main下新建test测试文件夹,再在此文件夹下新建java测试源码文件夹和resource测试资源文件夹
这里写图片描述
也可以右键项目-选择Open Module Settings打开项目配置页面更改
这里写图片描述
7.配置依赖jar包 ,写在pom.xml文件下
这里写图片描述

4.开始进行后台的xml文件配置

基本目录配置截图
这里写图片描述

1.mapper文件夹主要写mapper配置文件,访问数据库用的,一般一个类写一个mapper,里面有这个类的各种实现方法。
2.properties主要主要是各种配置文件,方便以后修改用。
3.spring这里把三个spring进行分类了

  • applicationContext-dao.xml
    1. 加载配置jdbc.property
      2.数据库连接池
      3.mapper配置,让spring管理sqlsessionfactory 使用mybatis和spring整合包中的
      4.配置mapper扫描
<?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:tx="http://www.springframework.org/schema/tx"       xsi:schemaLocation="http://www.springframework.org/schema/beans                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd                        http://www.springframework.org/schema/context                        http://www.springframework.org/schema/context/spring-context-3.1.xsd                        http://www.springframework.org/schema/tx                        http://www.springframework.org/schema/tx/spring-tx.xsd">    <!-- 加载配置jdbc.property -->    <context:property-placeholder location="classpath:properties/jdbc.properties"/>    <!-- 数据库连接池 -->    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">        <property name="driverClassName" value="${jdbc.driver}"/>        <property name="url" value="${jdbc.url}"/>        <property name="username" value="${jdbc.username}"/>        <property name="password" value="${jdbc.password}"/>        <property name="maxActive" value="30" />        <property name="maxIdle" value="5" />    </bean>    <!-- mapper配置 -->    <!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <!-- 加载mybatis的配置文件 -->       <!-- <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property>-->        <!-- 加载数据源 -->        <property name="dataSource" ref="dataSource"></property>        <!-- 扫描mapper.xml -->        <property name="mapperLocations" value="classpath*:/mapper/*.xml"/>    </bean>    <!-- 配置mapper扫描 -->    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>        <property name="basePackage" value="akk.ssm.mapper"/>    </bean></beans>
  • applicationContext-service.xml
    1.使用Spring组件扫描的方式来实现自动注入bean
<?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:tx="http://www.springframework.org/schema/tx"       xsi:schemaLocation="http://www.springframework.org/schema/beans                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd                        http://www.springframework.org/schema/context                        http://www.springframework.org/schema/context/spring-context-3.1.xsd                        http://www.springframework.org/schema/tx                        http://www.springframework.org/schema/tx/spring-tx.xsd">    <!-- 使用Spring组件扫描的方式来实现自动注入bean -->    <context:component-scan base-package="akk.ssm.service.impl"/></beans>
  • applicationContext-transaction.xml
    1.事务管理器对mybatis操作数据库事务控制,spring使用jdbc事务控制器
    二. 配置aop 切面编程
<?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:tx="http://www.springframework.org/schema/tx"       xmlns:aop="http://www.springframework.org/schema/aop"       xsi:schemaLocation="http://www.springframework.org/schema/beans                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd                        http://www.springframework.org/schema/context                        http://www.springframework.org/schema/context/spring-context-3.1.xsd                        http://www.springframework.org/schema/tx                        http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">    <!-- 事务管理器             对mybatis操作数据库事务控制,spring使用jdbc事务控制器        -->    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <!-- 数据源              在application-dao.xml里配置了         -->        <property name="dataSource" ref="dataSource"></property>    </bean>    <!-- 通知 -->    <tx:advice id="txAdvice">        <tx:attributes>            <!-- 传播行为 把一些特定行为进行统一 -->            <tx:method name="save*" propagation="REQUIRED"/>            <tx:method name="insert*" propagation="REQUIRED"/>            <tx:method name="delete*" propagation="REQUIRED"/>            <tx:method name="update*" propagation="REQUIRED"/>            <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>            <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>        </tx:attributes>    </tx:advice>    <!-- 配置aop 切面编程-->    <aop:config>        <aop:advisor advice-ref="txAdvice" pointcut="execution(* akk.ssm.service.impl.*.*(..))"/>    </aop:config></beans>

4.springmvc

  1. 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置
    mvc:annotation-driven默认加载很多的参数绑定方法,
  2. 自动扫描 @Controller
  3. 加载静态资源
  4. 避免IE执行AJAX时,返回JSON出现下载文件
  5. 定义跳转的文件的前后缀 ,视图模式配置
  6. 解决@ResponseBody注解直接返回对象并转换成JSON时出现406问题
    同时解决了返回String类型乱码的问题
  7. 拦截器
  8. 文件上传配置
<?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:p="http://www.springframework.org/schema/p"       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-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/mvc                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">    <!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置         mvc:annotation-driven默认加载很多的参数绑定方法,    -->    <mvc:annotation-driven ></mvc:annotation-driven>    <!-- 自动扫描  @Controller-->    <context:component-scan base-package="akk.ssm.controller"/>    <mvc:default-servlet-handler/>    <!--加载静态资源-->    <!--这里加载得话拦截器会拦截js,所以在web.xml里面配置-->    <!--<mvc:resources location="/js/" mapping="/js/**"/>-->    <!--避免IE执行AJAX时,返回JSON出现下载文件 -->    <bean id="mappingJacksonHttpMessageConverter"          class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">        <property name="supportedMediaTypes">            <list>                <value>text/html;charset=UTF-8</value>            </list>        </property>    </bean>    <!-- 定义跳转的文件的前后缀 ,视图模式配置 -->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="prefix" value="/" />        <property name="suffix" value=".html"/>    </bean>    <!-- 解决@ResponseBody注解直接返回对象并转换成JSON时出现406问题            同时解决了返回String类型乱码的问题    -->    <mvc:annotation-driven>        <mvc:message-converters>            <bean class="org.springframework.http.converter.StringHttpMessageConverter">                <property name="supportedMediaTypes">                    <list>                        <value>text/plain;charset=UTF-8</value>                        <value>text/html;charset=UTF-8</value>                    </list>                </property>            </bean>            <bean                    class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">                <property name="supportedMediaTypes">                    <list>                        <value>application/json; charset=UTF-8</value>                        <value>application/x-www-form-urlencoded; charset=UTF-8</value>                    </list>                </property>            </bean>        </mvc:message-converters>    </mvc:annotation-driven>    <!--&lt;!&ndash;拦截器&ndash;&gt;    <mvc:interceptors>        &lt;!&ndash;可以方多个拦截器,顺序执行&ndash;&gt;        <mvc:interceptor>            <mvc:mapping path="/**"/>            <bean class="akk.ssm.Interceptor.LoginInterceptor"></bean>        </mvc:interceptor>    </mvc:interceptors>-->    <!-- 文件上传配置 -->    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">        <!-- 默认编码 -->        <property name="defaultEncoding" value="UTF-8"/>        <!-- 上传文件大小限制为31M,31*1024*1024 -->        <property name="maxUploadSize" value="32505856"/>        <!-- 内存中的最大值 -->        <property name="maxInMemorySize" value="4096"/>    </bean></beans>

5.这些xml文件配置完成后,就可以来进行具体的功能代码编写了,一般是controller和service和mapper同时编写的,我一般是先写controller然后遇到具体要写其他地方的时候再跳到其他地方写其他的,最后把controller完成,一个功能也就完成了!

5、登录功能的实现代码

controller类

@Controller@RequestMapping("/login")public class LoginController {    @Autowired//可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作    private UserService userService;    //查询用户名    @RequestMapping("/username")    public @ResponseBody//把返回类型转换为Json对象    GeResult login(HttpServletRequest request,                   @RequestBody User user) throws Exception{        //System.out.println(user.getUsername()+"akk");        try {            HttpSession session = request.getSession();            User u = userService.findUserByusername(user.getUsername());//传到Mapper进行查找            //返回ajax响应            if (u==null){                return new GeResult<User>(-1, "用户名错误");//返回类型为一个对象,里面包含错误提示信息,利用了封装的特性,使代码更加简洁            }else{                if(u.getPassword().equals(user.getPassword())){                    session.setAttribute("user", u); //将用户存到session                    return new GeResult<User>(0, u);  //登陆成功的返回                } else{                    return new GeResult<User>(-2, "密码错误");                }            }        } catch (Exception e) {            e.printStackTrace();            return new GeResult<User>(-3, "系统异常");        }    }    //登出    @RequestMapping("/logout")    public String logout(HttpSession session) throws Exception{        //清除session        session.invalidate();        //返回到登录页面,springmvc有视图模式配置        return "login";    }

service类

//接口public interface UserService {    public User findUserByusername(String username) ;}
//impl实现@Service("userService")public class UserServiceimpl implements UserService{    @Autowired    private UserMapper userMapper;    public User findUserByusername(String username) {        return userMapper.findUserByusername(username);    }}

mapper类

public interface NumMapper {    public void InsertNum(Num num);    public List<Num> FindNum();}

UserMapper.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 namespace="akk.ssm.mapper.UserMapper">    <select id="findUserByusername" parameterType="String" resultType="akk.ssm.pojo.User">        SELECT * FROM  user  WHERE username=#{ VALUE }    </select></mapper>

返回类GeResult具体代码,运用到封装特性!

 *///这是一个返回信息的容器/** 这才是泛型的正确写法,在前端指定数据类型,在后台用T不确定类型接收*/public class GeResult<T> {    private int status; //返回状态信息,0是成功,-1是失败    private String message; //返回的提示信息    private T u;    public GeResult(int status, String message){        this.status = status;        this.message = message;    }    public GeResult(int status, T u){        this.status = status;        this.u = u;    }    public int getStatus() {        return status;    }    public void setStatus(int status) {        this.status = status;    }    public String getMessage() {        return message;    }    public void setMessage(String message) {        this.message = message;    }    public T getU() {        return u;    }    public void setU(T u) {        this.u = u;    }}

这就是一个简单的登录的流程代码,数据库自己写就行了。

    我会把源程序发布的,大家可以下载调试,应该比网上那些其他人的不完整或者有问题的代码好一点吧,至少我这里是成功的,因为我也是接触SSM尚浅,有写的不好的多多包涵,但给新手看足够了,特别是第一次看的新手,应该有了我这一套你不需要看别的博客了,跑起来足够了。

    这个源代码不止是简单的登录页面,我是给别人写的一个小功能页面,还包括一个增添功能和查看功能,都是很简单的功能,初学者可以学习下。    主要是前端的跳转和AJAX传递不好写,因为属于前端的内容,反正这一套项目主要是把前端和后台分开,前端和后台的连接就只靠ajax的url,完全分离,因为听已经工作了的学长说,以后在公司项目,前端和后台都是分开的,而且代码要规范,一定要规范!可能我这一套还不够规范,hh但商业级别的我现在还在探索,以后会写了再分享!也希望那些大神多分享一些商业级别的代码规范,这样是利大于弊的,不要吝啬,给后人多一些台阶,会更好促进整个编程环境的发展=。=

下载地址:http://download.csdn.net/detail/qq_31783173/9828605

1 0