zoukankan      html  css  js  c++  java
  • eclipse + maven搭建SSM框架

    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>
    复制代码

    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工程的部署运行方式

    运行项目,观察是否报错

    登录页面

    登录成功,跳转到主页

  • 相关阅读:
    再次或多次格式化导致namenode的ClusterID和datanode的ClusterID之间不一致的问题解决办法
    Linux安装aria2
    POJ 3335 Rotating Scoreboard 半平面交
    hdu 1540 Tunnel Warfare 线段树 区间合并
    hdu 3397 Sequence operation 线段树 区间更新 区间合并
    hud 3308 LCIS 线段树 区间合并
    POJ 3667 Hotel 线段树 区间合并
    POJ 2528 Mayor's posters 贴海报 线段树 区间更新
    POJ 2299 Ultra-QuickSort 求逆序数 线段树或树状数组 离散化
    POJ 3468 A Simple Problem with Integers 线段树成段更新
  • 原文地址:https://www.cnblogs.com/knightsu/p/knightsu.html
Copyright © 2011-2022 走看看