zoukankan      html  css  js  c++  java
  • 【原】无脑操作:eclipse + maven搭建SSM框架

    网上看到一些Spring + Spring MVC + MyBatis框架的搭建教程,不是很详细或是时间久远了,自己动手整一个简单无脑的!

    0、系统环境

    1)Windows 10 企业版

    2)JDK 1.8.0_131

    3)Eclipse Java EE IDE for Web Developers  Version: Neon.3 Release (4.6.3)

    4)Tomcat 8.5

     

    1、maven下载及配置

    maven的下载地址:http://maven.apache.org/download.cgi

    下载后解压放在d:Java路径下 

    在环境变量中,新增系统变量名:MAVEN_HOME,变量值:D:Javamaven

    在Path中追加:%MAVEN_HOME%in;

    在命令行窗口中输入:mvn –v,如果看见下图则说明maven安装配置完毕

    2、maven仓库的设置

    maven仓库默认位置在系统用户目录下的.m2目录中,类似下图

    因为众所周知的原因,直接访问maven公共仓库的速度比较慢,所以推荐使用阿里的maven仓库镜像。编辑setting.xml文件,在mirrors节点下,新增如下内容,这样从仓库中下载jar包速度上会快很多。

    <mirror>
           <id>nexus-aliyun</id>
           <mirrorOf>*</mirrorOf>
           <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>

     

    3、eclipse整合maven

    设置eclipse自带maven整合工具,在Preferences中找到Maven节点,观察User Settings项的设置是否正确

    点击Installations节点,添加maven runtime

     

    4、创建maven项目时设置JDK

    问题描述:eclipse创建maven项目时,显示的JDK默认版本为1.5,实际使用的JDK为1.8,如何修改?

    解决方案:找到本机maven仓库存放位置,比如:${user.home}/.m2/路径,编辑settings.xml文件,在profiles节点下配置

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

     

    5、使用maven创建SSM项目

    1)选择Maven Project

    2)点击Next,选择默认工作空间位置

    3)选择web类型

    4)填写GroupID、ArtifactID

    Group ID:相当于一个组织

    Artifact ID:相当于这个组织下的一个具体项目

    Packege:根据Group ID和Artifact ID生成一个默认的名称

    5)创建出的maven项目如下图

    6)问题描述:提示错误:

    在eclipse中设置Server为Tomcat,注意JRE设置为安装的JDK的jre

    在工程上右键,查看工程属性,找到Java Build Path,添加Server Runtime为Tomcat

    点击Finish后,项目工程变为下图

    7)在项目上右键,查看项目信息

    默认的Dynamic Web Module为2.3,使用Tomcat 8.5,需要修改为3.1

    修改方法:

    ① maven工程所在目录下org.eclipse.wst.common.project.facet.core.xml

    编辑内容,如下所示

    <?xml version="1.0" encoding="UTF-8"?>
    
    <faceted-project>
    
      <fixed facet="wst.jsdt.web"/>
    
      <installed facet="java" version="1.8"/>
    
      <installed facet="jst.web" version="2.3"/>
    
      <installed facet="wst.jsdt.web" version="1.0"/>
    
    </faceted-project>

    改为

    <?xml version="1.0" encoding="UTF-8"?>
    
    <faceted-project>
    
      <fixed facet="wst.jsdt.web"/>
    
      <installed facet="java" version="1.8"/>
    
      <installed facet="jst.web" version="3.1"/>
    
      <installed facet="wst.jsdt.web" version="1.0"/>
    
    </faceted-project>

    ② maven工程下的web.xml文件修改为

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
           version="3.1" metadata-complete="true">
    </web-app>

    ③ pom.xml文件中修改build节点,添加如下内容

    <plugins>
           <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-compiler-plugin</artifactId>
                  <configuration>
                         <source>1.8</source>
                         <target>1.8</target>
                  </configuration>
           </plugin>
    </plugins>

    ④ 修改后,在项目上右键,找到Maven属性下的Update Project,点击之

     

    ⑤ 选择该项目进行更新,如果怕不能强制更新,可以勾选Force Update of Snapshots/Releases

    ⑥ 点击OK后更新maven项目,再观察项目属性,Module已经变为3.1

     

    6、下载ssm框架所需jar包

    修改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>cn.temptation</groupId>
        <artifactId>ssm</artifactId>
        <packaging>war</packaging>
        <version>0.0.1-SNAPSHOT</version>
        <name>ssm Maven Webapp</name>
        <url>http://maven.apache.org</url>
        <properties>
            <!-- Spring版本号 -->
            <spring.version>4.3.8.RELEASE</spring.version>
        </properties>
        <dependencies>
            <!-- Spring相关包 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</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-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-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <!-- AOP相关包 -->
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjrt</artifactId>
                <version>1.8.0</version>
            </dependency>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.8.0</version>
            </dependency>
    
            <!-- MyBatis相关包 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.3.0</version>
            </dependency>
            <!-- MySQL相关包 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.26</version>
            </dependency>
            <!-- 数据库连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.0.20</version>
            </dependency>
    
            <!-- Spring集成MyBatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>1.2.3</version>
            </dependency>
    
            <!-- JSP标准标签库 -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
    
            <!-- 日志相关包 -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.21</version>
            </dependency>
    
            <!-- 单元测试相关包 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>3.8.1</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
        <build>
            <finalName>ssm</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

    保存后,可以看到相关jar包被下载至本地仓库 

    7、完善项目结构

    因为服务端maven项目的标准结构有四个子包:src/main/java、src/main/resources、src/test/java、src/test/resources,这里缺少了src/test/resources,所以手动补上。

    在项目中新建Source Folder

    创建src/test/resources目录后,工程如下图所示

    右键查看项目属性,点击Deployment Assembly,移除test和target

    移除后如下图

     

    8、创建项目用的配置文件

    创建log4j.properties文件,内容如下:

    #USE THIS SETTING FOR OUTPUT MYBATIS`s SQL ON THE CONSOLE
    log4j.rootLogger=DEBUG, Console
    
    #Console
    log4j.appender.Console=org.apache.log4j.ConsoleAppender
    log4j.appender.Console.layout=org.apache.log4j.PatternLayout
    log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
    
    log4j.logger.java.sql.ResultSet=INFO
    log4j.logger.org.apache=INFO
    log4j.logger.java.sql.Connection=DEBUG
    log4j.logger.java.sql.Statement=DEBUG
    log4j.logger.java.sql.PreparedStatement=DEBUG

    创建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>
        <!-- 设置别名 -->
        <typeAliases>
            <package name="cn.temptation.domain" />
        </typeAliases>
    </configuration>

     

    创建spring-mvc.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">
    
        <!-- 启动自动扫描 -->
        <context:component-scan base-package="cn.temptation.*" />
    
        <!-- 注册MVC注解驱动 -->
        <mvc:annotation-driven />
    
        <!-- 静态资源可访问的设置方式 -->
        <mvc:default-servlet-handler />
    
        <!-- 配置视图解析器,可以显式设置,也可以不设置,不设置会依据SpringMVC的默认设置 -->
        <bean id="viewResolver"
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/" />
            <property name="suffix" value=".jsp" />
        </bean>
    </beans>

    创建spring-mybatis.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"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!-- 定义数据源Bean -->
        <!-- Druid -->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
            <property name="url" value="jdbc:mysql://localhost:3306/test" />
            <property name="username" value="root" />
            <property name="password" value="sa" />
        </bean>
    
        <!-- 注册SqlSessionFactoryBean -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <!-- 自动扫描mappers.xml文件 -->
            <property name="mapperLocations" value="classpath:cn/temptation/dao/*.xml" />
            <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        </bean>
        
        <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="cn.temptation.dao" />
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
        </bean>
    </beans>

     

    创建spring-tx.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:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        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">
    
        <!-- 开启AOP注解扫描 -->
        <aop:aspectj-autoproxy proxy-target-class="true" />
    
        <!-- 事务管理器,依赖于数据源 -->
        <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource" />
        </bean>
        
        <!-- 编写通知:对事务进行增强(通知),需要编写对切入点和具体执行事务细节 -->
        <tx:advice id="txAdvice" transaction-manager="txManager">
            <tx:attributes>
                <!--
                    为切入点方法添加事务详情
                    name:方法名,*表示任意方法名称
                    propagation:设置传播行为
                    isolation:设置隔离级别
                    read-only:是否只读
                -->
                <tx:method name="add*" propagation="REQUIRED" isolation="DEFAULT" read-only="false" rollback-for="Exception" />
                <tx:method name="delete*" propagation="REQUIRED" isolation="DEFAULT" read-only="false" rollback-for="Exception" />
                <tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT" read-only="false" rollback-for="Exception" />
            </tx:attributes>
        </tx:advice>
        
        <!-- 设置AOP,让Spring自动对目标生成代理,需要使用AspectJ表达式 -->
        <aop:config proxy-target-class="true">
            <!-- 切面:整合切入点和通知 -->
            <aop:advisor advice-ref="txAdvice" pointcut="within(cn.temptation.web..*)" />
        </aop:config>
    </beans>

     

    修改web.xml文件,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        version="3.1" metadata-complete="true">
        
        <!-- 指定Spring配置文件位置 -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-*.xml</param-value>
        </context-param>
    
        <!-- 注册ServletContext监听器 -->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    
        <!-- 注册字符集过滤器 -->
        <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>
    
        <!-- 注册前端控制器 -->
        <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-mvc.xml</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
    </web-app>

    9、编写服务端代码

    编写User实体类,代码如下:

    package cn.temptation.domain;
    
    /**
     * 用户信息
     */
    public class User {
        // 成员变量
        private Integer userid;
        private String username;
        private String password;
    
        // 构造函数
        public User() {
            super();
        }
    
        public User(Integer userid, String username, String password) {
            super();
            this.userid = userid;
            this.username = username;
            this.password = password;
        }
    
        // 成员方法
        public Integer getUserid() {
            return userid;
        }
    
        public void setUserid(Integer userid) {
            this.userid = userid;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    }

    编写UserController控制器,代码如下:

    package cn.temptation.web;
    
    import javax.annotation.Resource;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;
    
    import cn.temptation.dao.UserDao;
    import cn.temptation.domain.User;
    
    /**
     * 用户控制器
     */
    @Controller
    @RequestMapping(value = "/user")
    public class UserController {
        @Resource
        private UserDao userDao;
    
        @RequestMapping("/view")
        public String view() {
            return "main/login";
        }
    
        @RequestMapping("/indexview")
        public String index() {
            return "main/index";
        }
    
        @RequestMapping(value = "/login", method = RequestMethod.POST)
        public ModelAndView login(User model, HttpSession session) {
            User user = userDao.findByUsername(model.getUsername());
    
            if (user == null || !user.getPassword().equals(model.getPassword())) {
                return new ModelAndView("redirect:/login.jsp");
            } else {
                session.setAttribute("user", user);
                ModelAndView mav = new ModelAndView();
                mav.setViewName("index");
                return mav;
            }
        }
    }

    编写UserDao数据访问层接口,代码如下:

    package cn.temptation.dao;
    
    import cn.temptation.domain.User;
    
    public interface UserDao {
        public abstract User findByUsername(String username);
    }

     

    编写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="cn.temptation.dao.UserDao">
        <select id="findByUsername" parameterType="string" resultType="User">
            SELECT * FROM userinfo WHERE username=#{username}
        </select>
    </mapper>

     

    10、编写客户端代码

     

    编写login.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>
    <form action="user/login" method="post">
    <label>账号:</label>
    <input type="text" id="txtUsername" name="username" placeholder="请输入账号" /><br/>
    <label>密码:</label>
    <input type="password" id="txtPassword" name="password" placeholder="请输入密码" /><br/>
    <input type="submit" value="提交" />
    <input type="reset" value="重置" />
    </form>
    </body>
    </html>

    编写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>主页</title>
    </head>
    <body>
    <h3>欢迎,${user.username }</h3>
    </body>
    </html>

     

    11、使用maven构建项目

    在项目上右键,找到Maven属性的Update Project,也可以Alt+F5操作

     

    修改项目编译路径为JRE系统类库,否则后续操作出错

    项目上右键,找到Run As属性,找到Maven install

    点击执行,结果如下说明构建成功

    项目运行还是使用web工程的部署运行方式

    运行项目,观察是否报错

    登录页面

    登录成功,跳转到主页

    12、补充说明

    不少朋友公司使用的是Jetty这个开源的Servlet容器,修改一下配置即可使用

    编辑pom.xml文件,在build节点下的plugins节点中,新增jetty插件

    注意:

    Jetty 7 必须 JDK 1.5+,Servlet 2.5,类似于 Tomcat 6:

    <plugin>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>jetty-maven-plugin</artifactId>
      <version>7.6.17.v20150415</version>
    </plugin>

    Jetty 8 必须 JDK 1.6+,Servlet 3.0,类似于 Tomcat 7:

    <plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>8.1.16.v20140903</version>
    </plugin>

    Jetty 9 必须 JDK 1.7+,Servlet 3.0+,类似于 Tomcat 8:

    <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>9.2.10.v20150310</version>
        <configuration>
            <!-- 配置表示新代码的扫描时间间隔(秒),值 <= 0 表示不扫描 -->
            <scanIntervalSeconds>10</scanIntervalSeconds>
            <webApp>
                <!-- web项目根路径 -->
                <contextPath>/ssm</contextPath>
            </webApp>
        </configuration>
    </plugin>

    添加完配置后保存文件,重新Maven----->update project,再检查一下项目工程的Java Build Path是否修改

    在项目工程上右键,找到RunAs----->Maven Build...

    再设置Goals

    最后应用执行,如果看见下图说明服务器启动完毕

  • 相关阅读:
    简明python教程九----异常
    简明python教程八----输入/输出
    简明python教程七----面向对象的编程(下)
    vue --- 生命周期
    es6 ----- export 和 import
    jq ---- 实现浏览器全屏
    Vue项目自动转换 px 为 rem,高保真还原设计图
    vue ---- 实现手机端(左滑 删除。右划 正常)
    js---- localStorage的基本用法
    点击 下载文件保存
  • 原文地址:https://www.cnblogs.com/iflytek/p/7096481.html
Copyright © 2011-2022 走看看