zoukankan      html  css  js  c++  java
  • SSM项目之电商项目easymall(一)

    一 环境准备

    软件环境:

       1 jdk1.8
           JAVA_HOME:是给软件用的,各种启动的软件都会寻找JAVA_HOME的环境变量;
           Path:给windows用的;
       2 eclipse marS2/neon
           解压的无中文路径,无空格的文件夹中;防止读取相对路径时出现乱码
           如果当前系统的JAVA_HOME对应版本是支持neon的启动的,那么就可以直接启动eclipse
           设置workspace,无中文路径,无空格
       3 maven3.5
           解压到无中文路径,无空格的文件夹即可(后续会介绍,配置,和使用等)
       4 tomcat 9
          tomcat7 没有自动处理乱码,tomcat8以上的版本,无需管理乱码(servlet没有验证)
       5 mysql5.5
           如果是5.5无需变动,如果不是,需要删除重新安装;5.0无法导入5.5备份的数据;
           删除:只装过一次5.0,直接删除服务(控制面板的卸载程序)
           安装sqlYog,数据库客户端;

    二 分析SSM三大框架

    Spring框架:
        
    工厂类创建对象
        加在xml的标签创建对象
        通过配置文件扫描注解
        @Controller 控制层对象
        @Service 业务层对象
        @Component 普通对象
        对象的创建交给Spring
        控制反转: 对象我框架包了
        
        java基础复用的方法
        方法封装被调用
        子继承父类,直接调用
        Spring框架节点
        Spring管理的所有对象中相互注入使用
        @Resource
        @Autowired
        注入依赖:哪用对象,跟我说,注入就直接用
        
    Springmvc
        
    处理页面和程序的交互(升级了servlet的使用)
        前端控制器(springmvc,dispatcherServlet,映射mapping "/")
        适配器映射器(handleMapping)(寻找RequestMapping的接收地址)
        适配器协调器(handleAdapter):转给handler
        处理器(handler): 调用RequestMapping的方法所在类的对象,执行方法,返回
        字符串渲染: WEB-INF/views/index.jsp
        显式页面想添加数据: Model 模板对象 addAttribute
        
        Springmvc为什么和spring整合?
            1 实现代码中的三层结构;controller,service,mapper依赖注入
            2 处理持久层困难(spring可以整合mybatis)
        Springmvc是怎么整合的?
            需要:看到配置文件了
            不需要:无缝整合;controller直接注入service使用,形成service调用mapper(前提是spring整合了mybatis),三层项目结构
            
    mybatis:
      
     JDBC
        mybatis功能:
            自动封装(提交的参数,返回的结果,无需手动jdbc处理resultSet)
            sql语句是通过映射文件xml绑定(bind)接口mapper的同名方法;
            配置文件
            驼峰命名,分页插件
        
        和spring整合
            配置文件(spring_mybatis)
            datasource:数据库连接中的参数,url,username,password,数据库连接池
            sqlSession:datasource
        
        整合一起使用的SSM框架的配置文件
        spring:管理spring容器的配置文件
        spring-mvc:springmvc配置文件
        mybatis:mybatis持久层配置文件
        spring-mybatis:整合spring和mybatis的配置文件
       

    三 将easymall项目与SSM框架整合

    3.1框架SSM结构  

    3.2数据库的设计

      创建easymalldb数据库

    1 商品相关--t_product
            ○ 展示全部商品的分页信息
            ○ 某个商品的信息
            ○ 后台的商品管理增删改查
      商品表格

    •  product_id:商品的id,全局唯一,主键,char,UUID
    •     product_name: 商品的名称,varchar
    •     product_price: 商品价格 double
    •     product_category: 商品类目
    •     product_imgurl: 商品图片的url连接地址
    •     product_num: 商品的库存
    •     product_description: 商品的简介

    2 用户相关---t_user
          • 登录 (查询单个user)
          • 注册 (新增)
          • 注册的用户名校验(查询)
      用户表格

    •   user_id: 全局唯一的主键,uuid
    •    user_name:用户名称
    •    user_password:密码
    •    user_nickname: 昵称
    •    user_email: 用户邮箱
    •    user_type: 用户类型,于权限有关;

    3 购物车相关--t_cart
       • 添加购物车
       • 查询当前用户的所有购物车商品
       • 修改购物车数量
       • 删除购物车

         购物车表格

    •     id:购物车id int
    •     user_id:当前商品属于的用户id
    •     product_id:当前商品id
    •     product_image:商品的图片
    •     product_name:商品名称
    •     product_price:商品价钱
    •     num:购物车中商品数量
    1.     user_id
    2.     product_id
    3.     复合主键;通过2个字段的同时使用,可以唯一的定位
    4.     到一条购物车商品数据;

    4 订单相关--t_order和t_order_item(主从表的关系,order为主,item为从,1对多的关系)
         • 我的全部订单
        • 新增订单
        • 删除订单
        主表t_order

    •     order_id: 主键,也是t_order_item关联的键
    •     order_money: 订单支付金额
    •     order_receiverinfo: 收信人信息
    •     order_paystate: 支付状态
    •     order_time:创建时间
    •     user_id: 用户关联的

    表格代码 可以直接通过sqlyong导入数据库(想要数据库设计sql代码留言私发,这里不支持上传)

     

     

    四 maven工具管理项目框架

     4.1web项目的管理方式的弊端:
            myeclipse生成一个web应用的项目结构,servlet直接开发代码
            如果用到三大框架的内容:
            1 jar的管理不规范
                把jar包先找到,完全是凭借测试和经验完成的;
            2 直接整合外界的第三方tomcat进行war包的运行

            3 项目管理的结构
                src:代码
                webroot:web应用相关
                ssm框架的配置文件????
                src管理配置文件;          

     4.2 maven介绍  

      Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件是一个软件,并且可以实现各种项目结构的管理功能--工具;
            快速搭建项目(java普通工程,web应用工程)
            可以通过引入的各种插件完成丰富的外接功能(例如maven的tomcat插件可以直接在项目内部启动插件的tomcat运行web工程)
            对工程的管理结构非常严格:
                java工程:
                src/main/java:编写代码的文件夹
                src/main/resouces:配置文件(ssm框架,properties等)
                src/test/java:测试代码,在打包时不会进行包装
                pom.xml:通过一小段描述来管理项目(管理依赖的jar包,是通过dependency完成)
                web应用工程:
                和java工程一样:
                main的文件夹下,有webapp的管理,web应用所在的路径;
        有了maven就可以方便快速的搭建我们想要的各种工程结构,从而通过对pom文件中描述信息的修改(标签),完成项目的各种管理功能;

           

    五 maven的安装和环境配置

        https://www.cnblogs.com/nanlinghan/p/9968806.html

    六 easymall工程的搭建

    1 选择骨架(webapp)
    2 web的应用结构
        src/main/java:当前easymall的ssm框架的所有运行代码都在这个文件夹
        src/main/resources: 存放配置文件的位置
        src/test/java:测试内容
    3 pom的依赖
        maven主要就是管理jar包的依赖,当前SSM框架需要依赖的东西非常多;
        spring,springmvc,mybatis,一些工具的依赖;

    <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>com.jt</groupId>
      <artifactId>easymall-ssm</artifactId>
      <packaging>war</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>easymall-ssm Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <properties>
        <!-- spring的版本号 -->
        <spring.version>4.3.7.RELEASE</spring.version>
        <!-- mybatis的版本号 -->
        <mybatis.version>3.4.5</mybatis.version>
        <!-- log日志管理 -->
        <slf4j.version>1.7.12</slf4j.version>
        <log4j.version>1.2.17</log4j.version>
        <pagehelper.version>3.4.2</pagehelper.version>
        <jsqlparser.version>0.9.1</jsqlparser.version>
      </properties>
      <dependencies>
      <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.3.2</version>
            </dependency>
        <!-- spring context -->
          <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <!-- spring mvc -->
          <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>
          <!-- spring mvc 辅助包 jackson -->
          <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.8.1</version>
        </dependency>
          <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.8.1</version>
        </dependency>
        <!--servlet依赖 -->
            <dependency>
                <groupId>javax.servlet</groupId>
                   <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
        <!-- Spring tx -->
          <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-tx</artifactId>
          <version>${spring.version}</version>
        </dependency>
          <!-- Spring jdbc -->
          <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>${spring.version}</version>
        </dependency>
          <!-- Spring aop -->
          <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
          <version>${spring.version}</version>
        </dependency>
          <!-- aspectj -->
          <dependency>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjweaver</artifactId>
          <version>1.8.7</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.3.1</version>
        </dependency>
          <!-- mysql 驱动 -->
          <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.0.8</version>
        </dependency>
          <!-- junit -->
          <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
        </dependency>
          <!-- 阿里巴巴数据库连接池 -->
          <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.0.14</version>
        </dependency>
        <!-- 阿里巴巴的json工具 -->
          <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.7</version>
        </dependency>
        
        <!-- commons fileupload -->
        <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>1.3.2</version>
        </dependency>
        <!-- jstl -->
        <dependency>
          <groupId>jstl</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
        </dependency>
        <!-- Apache poi -->
        <dependency>
          <groupId>org.apache.poi</groupId>
          <artifactId>poi</artifactId>
          <version>3.13</version>
        </dependency>
        <!-- 分页插件 -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
                <version>${pagehelper.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.jsqlparser</groupId>
                <artifactId>jsqlparser</artifactId>
                <version>${jsqlparser.version}</version>
            </dependency>
        <!-- shiro -->  
        <dependency>
          <groupId>org.apache.shiro</groupId>
          <artifactId>shiro-all</artifactId>
          <version>1.2.3</version>
        </dependency>
      </dependencies>
      <build>
        <plugins>
            <plugin>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <configuration>
                     <source>1.8</source>
                     <target>1.8</target>
                 </configuration>
            </plugin>
            <plugin>
                   <groupId>org.apache.tomcat.maven</groupId>
                   <artifactId>tomcat7-maven-plugin</artifactId>
                   <version>2.2</version>
                   <configuration>
                       <port>80</port>
                       <path>/</path>
                   </configuration>
            </plugin>
       </plugins>
      </build>
    </project>

    4 拷贝静态资源
        easymall-ssm的静态文件拷贝到当前工程中,从navigator保存

      这里要关闭eclipse自带的web前端的各种校验

      

      (需要静态资源留言)
    5 准备ssm框架的配置文件
        spring本身的配置文件
        spring整合mybatis配置文件
        springmvc配置文件
        mybatis配置文件

       5.1 web.xml

      tomcat容器启动时会加载当前工程的web.xml文件,会根据web.xml文件中的配置,设置当前加载各种其他资源,listener,初始化参数,配置spring和springmvc配置文件

      

     1     <context-param>
     2         <param-name>contextConfigLocation</param-name>
     3         <param-value>
     4                   classpath:spring/spring*.xml;              
     5         </param-value>
     6     </context-param>
     7     
     8     指定当前tomcat启动时需要加载的配置文件,classpath=target/classes;
     9     成功加载配置文件之后,如果有依赖的jar包,就可以正确启动spring springmvc容器了;
    10     
    11     <servlet>
    12             <servlet-name>springmvc</servlet-name>
    13             <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    14             <init-param>
    15                 <param-name>contextConfigLocation</param-name>
    16                 <param-value>classpath:spring/spring_mvc.xml</param-value>
    17             </init-param>
    18             <load-on-startup>1</load-on-startup>
    19     </servlet>
    20     <servlet-mapping>
    21         <servlet-name>springmvc</servlet-name>
    22         <url-pattern>/</url-pattern>
    23     </servlet-mapping>
      创建springmvc中的dispatcherServlet,实现读取springmvc的配置文件,当前的servlet就会提供给springmvc的逻辑使用;
      当前dispatcherServlet接收所有的请求地址 "/"

      web.xml是通知tomcat在启动时加载所有的需要配置的文件;SSM框架

      5.2 spring.xml

      

     1     <bean
     2             class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
     3             <!-- 允许JVM参数覆盖 -->
     4             <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
     5             <!-- 忽略没有找到的资源文件 -->
     6             <property name="ignoreResourceNotFound" value="true" />
     7             <!-- 配置资源文件 -->
     8             <property name="locations">
     9                 <list>
    10                     <value>classpath:mysql.properties</value>
    11                 </list>
    12             </property>
    13         </bean>
    14     <!-- 扫描所有com.jt的包-->
    15    <context:component-scan base-package="com.jt"></context:component-scan>

      利用加载的spring容器,创建一个PropertyPlaceHolder的对象,读取mysql.properties的数据(key-value键值对),其中的数据就是配置加载的datasource的内容,在配置的指定上进行解耦,可以修改properties变动连接数据库的信息.

      扫描包的路径,所有当前工程已com.jt开始的包中只要存在注解都会被spring容器扫描到,像@Component,@Service等就会自动创建对象

      5.3 spring_mvc.xml

       

    <!-- 在restful模式下,添加静态资源 如果删除导致页面没有js效果-->
            <mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
            <mvc:resources location="/" mapping="/**"></mvc:resources>

          
        保持当前jsp等页面资源加载成功js,css等内容

           
        <!-- 扫描spring的组件 -->
            <context:component-scan base-package="com.jt.easymall.controller"></context:component-scan><!-- 扫描 spring mvc的注解 @RequestMapping @ResponseBody -->
            <mvc:annotation-driven></mvc:annotation-driven>
            

       springmvc扫描的spring创建的对象,完成和spring的整合;requestMapping映射就可以加载所有com.jt.easymall.controller的类中;
        启动responseBody requestMapping requestParam requestBody
        

        <!-- spring mvc处理响应的jsp -->
            <bean id="viewResolver"
                class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <property name="prefix" value="/WEB-INF/views/"></property>
                <property name="suffix" value=".jsp"></property>
            </bean>


        页面渲染时拼接的前后缀名称,/WEB-INF/views/保存着所有页面;
        

        <!-- spring mvc 文件上传 -->
            <bean id="multipartResolver"
                class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
                <!--能配置多少个property,可以查文档和查询源代码 -->
                <!--最大上传文件的大小 -->
                <property name="maxUploadSize" value="8388608"></property>
                <property name="resolveLazily" value="true"></property>
            </bean>


        MultipartFile是springmvc的包中的类,处理页面上传的文件;
        大小定义,和懒加载,接收的实际上是流对象;

      5.4 spring-mybatis整合

     1     <!-- 数据库连接池 commons-dbcp ,c3p0,proxool,阿里巴巴druid -->
     2         <bean id="alibabaDataSource"
     3               class="com.alibaba.druid.pool.DruidDataSource"
     4               init-method="init"
     5               destroy-method="close">
     6             <!-- 数据库连接的4项 -->
     7             <property name="driverClassName">
     8                 <value>${jdbc_driverClass}</value>
     9             spring启动时,PropertiesPlaceHolder加载了mysql.properties文件 定义的jdbc_driverClass
    10             </property>
    11             <property name="url">
    12                 <value>${jdbc_url}</value>
    13             </property>
    14             <property name="username">
    15                 <value>${jdbc_userName}</value>
    16             </property>
    17             <property name="password">
    18                 <value>${jdbc_userPassword}</value>
    19             </property>
    20             <!-- 连接池中的最大连接数 -->
    21             <property name="maxActive">
    22                 <value>5</value>
    23             </property>
    24             <!-- 初始化的连接数 -->
    25             <property name="initialSize">
    26                 <value>2</value>
    27             </property>
    28             <!-- 获取连接的最大等待时间 -->
    29             <property name="maxWait">
    30                 <value>6000</value>
    31             </property>
    32             <!-- 连接池的最大空闲 -->
    33             <property name="maxIdle">
    34                 <value>2</value>
    35             </property>
    36             <!-- 连接池的最小空闲 -->
    37             <property name="minIdle">
    38                 <value>2</value>
    39             </property>
    40             <!-- 自动清除无用的连接 -->
    41             <property name="removeAbandoned">
    42                 <value>true</value>
    43             </property>
    44             <!-- 自动清除无用的连接的等待时间 -->
    45             <property name="removeAbandonedTimeout">
    46                 <value>180</value>
    47             </property>
    48             <!-- 连接属性 -->
    49             <property name="connectionProperties">
    50                 <value>clientEncoding=UTF-8</value>
    51             </property>      
    52         </bean>
    53     
    54     <!-- 实例化MyBatis的SqlSessionFactoryBean对象-->
    55         <!--mybatis配置,读取配置文件(扫描配置文件)-->
    56         <bean id="sqlSessionFactory"
    57             class="org.mybatis.spring.SqlSessionFactoryBean"
    58             p:dataSource-ref="alibabaDataSource" //绑定的数据源
    59             p:mapperLocations="classpath:mapper/*.xml"> //映射文件mapper.xml的位置 src/main/resources
    60             <!-- mybatis-config.xml -->
    61             <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/> //指向mybatis的内容配置文件
    62             <!-- 定义当前工程的别名包 -->
    63             <property name="typeAliasesPackage" value="com.jt.easymall.pojo"/> //持久层封装对象时,无需指定类的全路径名称 resultType="Product"
    64         </bean>

      spring管理的整合持久层对象sqlSession;没有这个对象动态代理无法完成接口类方法的实现和xml映射文件中sql语句的绑定关系

      5.5 mybatis.xml

      

            <settings>
                <!-- 开启驼峰自动映射 -->
                <setting name="mapUnderscoreToCamelCase" value="true" />
                <!-- 二级缓存的总开关  redis完成缓存的功能.不使用数据库自身的缓存-->
                <setting name="cacheEnabled" value="false" />
    </settings>

      到此SSM项目框架搭建成功(搭建过程中可能会出现不同的问题,一些常见的问题已经整理好 请查看https://www.cnblogs.com/nanlinghan/p/9973495.html解决)

    七 测试工程(easymall首页显示)

      逻辑:
      首页index.jsp存储在 WEB-INF/views/index.jsp
      访问url:localhost:port/直接访问

      代码逻辑
      编写在一个被spring和springmvc扫描到的controller里

     1 @RequestMapping("/")
     2 public String goIndex(){
     3     return "index";}
     4     
     5 package com.jt.easymall.controller;
     6 @Controller
     7 public class IndexController {
     8     
     9     //添加首页的映射地址"/"
    10     @RequestMapping("/")
    11     public String goIndex(){
    12         return "index";//WEB-INF/views/index.jsp
    13 }}

    Maven的tomcat插件

      maven内部可以引入tomcat的插件,执行当前工程的启动功能,无需外部的tomcat容器来加载当前工程的war包执行了;
      pom中通过描述信息,引入maven的tomcat插件

        

      配置启动maven工程的debug模式

     

     

     

     

     

     完成配置之后,可以点击debug测试当前工程的启动

  • 相关阅读:
    【Java】【IDE】【Jetbrain Idea】Intellij IDEA 快捷键整理
    【Linux】【Services】【KVM】virsh命令详解
    【Linux】【Services】【KVM】安装与简单配置
    【Linux】【Services】【Docker】Docker File
    【Linux】【Services】【Docker】网络
    【Linux】【Services】【Docker】应用
    【Linux】【Services】【Docker】基础理论
    【Python】【Module】json and pickle
    【Python】【Module】hashlib
    Highcharts 对数组的要求
  • 原文地址:https://www.cnblogs.com/nanlinghan/p/9968871.html
Copyright © 2011-2022 走看看