zoukankan      html  css  js  c++  java
  • ssm整合

    1.1.1.   第一部分:搭建项目环境

    1.1.1.1. 第一步:创建数据库

    注意事项:使用utf8mb4-general 编码。不要使用utf8-general。

    因为如果需要支持一些不规则的符号,如:表情符号!!utf8-general不支持。

     

    1.1.1.2. 第二步:将页面修改成JSP页面

    注意事项,先在页面里面加入

    再修改页面后缀。

     

    1.1.1.3. 第三步:将页面的超链接修改好

    1.1.2.   第二部分:SpringMVC的配置

    1.1.2.1. 配置步骤

    1. 导入包
    2. 编写一个请求
    3. 配置web.xml的核心控制器
    4. 编写一个业务控制器
    5. 编写一个配置类(或配置文件)

    1.1.2.2. 第一步:导入包

        <properties>

             <spring.version>4.3.7.RELEASE</spring.version>

             <jsp.version>2.2.1</jsp.version>

             <servlet-api.version>3.0.1</servlet-api.version>

        </properties>

     

        <!-- 依赖 -->

        <dependencies>

             <!-- jsp -->

             <dependency>

                 <groupId>javax.servlet.jsp</groupId>

                 <artifactId>javax.servlet.jsp-api</artifactId>

                 <version>${jsp.version}</version>

             </dependency>

             <!-- servlet api -->

             <dependency>

                 <groupId>javax.servlet</groupId>

                 <artifactId>javax.servlet-api</artifactId>

                 <version>${servlet-api.version}</version>

             </dependency>

     

             <!-- spring mvc -->

             <dependency>

                 <groupId>org.springframework</groupId>

                 <artifactId>spring-webmvc</artifactId>

                 <version>${spring.version}</version>

             </dependency>

     

        </dependencies>

    1.1.2.3. 第二步:编写请求页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"

        pageEncoding="UTF-8"%>

    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">

    <title>Insert title here</title>

    </head>

    <body>

      <a href="${pageContext.request.contextPath }/admin/addAdmin.do" >add admin</a>

    </body>

    </html>

    1.1.2.4. 第三步:编写web.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_0.xsd ">

     

       <!-- 配置核心控制器 -->

       <servlet>

         <servlet-name>dispatcherServlet</servlet-name>

         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

         <!-- 指定配置类的位置 -->

         <init-param>

           <param-name>contextConfigLocation</param-name>

           <param-value>cn.gzsxt.edu.config</param-value>

         </init-param>

         <!-- 修改容器加载类 -->

         <init-param>

           <param-name>contextClass</param-name>

           <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>

         </init-param>

       </servlet>

      

       <servlet-mapping>

         <servlet-name>dispatcherServlet</servlet-name>

         <url-pattern>/</url-pattern>

       </servlet-mapping>

     

    </web-app>

    1.1.2.5. 第四步:编写Controller

    package cn.gzsxt.edu.controller;

     

    import org.springframework.context.annotation.Scope;

    import org.springframework.stereotype.Controller;

    import org.springframework.web.bind.annotation.RequestMapping;

     

    @Controller

    @Scope(value="request")

    @RequestMapping(value="/admin")

    public class AdminController {

       

        @RequestMapping(value="/addAdmin")

        public void addAdmin() {

             System.out.println("增加管理员");

        }

     

    }

    1.1.2.6. 第五步:编写配置类

    package cn.gzsxt.edu.config;

     

    import org.springframework.context.annotation.ComponentScan;

    import org.springframework.context.annotation.Configuration;

     

    @Configuration

    @ComponentScan(basePackages="cn.gzsxt.edu")

    public class MvcConfig {

     

    }

    1.1.2.7. 第六步:增加编码处理过滤器

    --在web.xml配置

        <!-- 配置编码处理过滤器 -->

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

    1.1.2.8. 第七步:配置请求不需要后缀

    --配置类的配置

    @Configuration

    @ComponentScan(basePackages="cn.gzsxt.edu")

    @EnableWebMvc

    //注意事项:SpringMVC注解是通过WebMvcConfigurerAdapter适配器来配置<mvc:xxxx>组件

    public class MvcConfig extends WebMvcConfigurerAdapter {

     

        //<mvc:default-servlet-hanlder>

        @Override

        public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {

             configurer.enable();

        }

    }

    --web.xml的配置

        <servlet-mapping>

             <servlet-name>dispatcherServlet</servlet-name>

            <url-pattern>/</url-pattern>

        </servlet-mapping>

    1.1.3.   第三部分:Mybatis配置

    --Mybatis整合Spring框架

    1.1.3.1. 配置步骤

    1. 导入包
    2. 创建一个Mapper
    3. 配置Mybatis与Spring的整合
    4. 单元测试,插入数据
    5. 配置事务代理

    1.1.3.2. 第一步:导入包

             <!-- spring jdbc -->

             <dependency>

                 <groupId>org.springframework</groupId>

                 <artifactId>spring-jdbc</artifactId>

                 <version>${spring.version}</version>

             </dependency>

             <!-- dbcp2  -->

             <dependency>

                 <groupId>org.apache.commons</groupId>

                 <artifactId>commons-dbcp2</artifactId>

                 <version>${dbcp2.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>${mybatis-spring.version}</version>

             </dependency>

             <!-- mysql driver -->

             <dependency>

                 <groupId>mysql</groupId>

                 <artifactId>mysql-connector-java</artifactId>

                 <version>${mysql-driver.version}</version>

             </dependency>

    1.1.3.3. 第二步:创建一个Mapper映射接口

    package cn.gzsxt.edu.mapper;

     

    import java.util.Map;

     

    import org.apache.ibatis.annotations.Insert;

    import org.apache.ibatis.annotations.Mapper;

    import org.apache.ibatis.annotations.Options;

     

    /**

     * 管理员表,映射操作接口

     * @author ranger

     */

    @Mapper

    public interface AdminMapper {

       

        /**

         * 插入管理员记录

         * @param entity 数据实体

         * @return 插入影响行号

         */

        @Insert(value="INSERT INTO tb_admin   (admin_name, admin_account, admin_pwd, admin_status, role_id)    VALUES (#{admin_name}, #{admin_account}, #{admin_pwd}, #{admin_status}, #{role_id})")

        @Options(useGeneratedKeys=true,keyProperty="admin_id",keyColumn="admin_id")

        int insert(Map<String, Object> entity);

     

    }

    1.1.3.4. 第三步:整合Mybatis与Spring

    package cn.gzsxt.edu.config;

     

    import javax.sql.DataSource;

     

    import org.apache.commons.dbcp2.BasicDataSource;

    import org.apache.ibatis.annotations.Mapper;

    import org.apache.ibatis.session.SqlSessionFactory;

    import org.mybatis.spring.SqlSessionFactoryBean;

    import org.mybatis.spring.mapper.MapperScannerConfigurer;

    import org.springframework.context.annotation.Bean;

    import org.springframework.context.annotation.Configuration;

    import org.springframework.jdbc.datasource.DataSourceTransactionManager;

    import org.springframework.transaction.annotation.EnableTransactionManagement;

     

    @Configuration

    @EnableTransactionManagement

    public class DataConfig {

       

        //1.获得数据源

        @Bean(name="dataSource")

        public DataSource getDataSource() {

             BasicDataSource dataSource=new BasicDataSource();

             dataSource.setDriverClassName("org.gjt.mm.mysql.Driver");

             dataSource.setUrl("jdbc:mysql://localhost:3306/edu-system");

             dataSource.setUsername("root");

             dataSource.setPassword("123456");

             return  dataSource;

        }

       

        //2.获得会话工厂

        @Bean(name="sqlSessionFactory")

        public SqlSessionFactory getSqlSessionFactory() {

             SqlSessionFactoryBean factoryBean=new SqlSessionFactoryBean();

             factoryBean.setDataSource(this.getDataSource());

             try {

                 //设置参数后,必须要填充

                 factoryBean.afterPropertiesSet();

                 return factoryBean.getObject();

             } catch (Exception e) {

                 e.printStackTrace();

             }

             return null;

        }

       

        //3.创建Mapper的动态对象,并且注入到容器里面

        @Bean

        public static MapperScannerConfigurer getMapperScannerConfigurer() {

             MapperScannerConfigurer configurer=new MapperScannerConfigurer();

             //指定会话工厂

             configurer.setSqlSessionFactoryBeanName("sqlSessionFactory");

             //指定映射接口

             configurer.setBasePackage("cn.gzsxt.edu.mapper");

             //指定扫描的注解

             configurer.setAnnotationClass(Mapper.class);

             return configurer;

        }

       

        //4.事务代理类

        @Bean

        public DataSourceTransactionManager getTransactionManager() {

             DataSourceTransactionManager dstm=new DataSourceTransactionManager();

             dstm.setDataSource(this.getDataSource());

             return dstm;

        }

    }

    1.1.3.5. 第四步:单元测试插入

    package cn.gzsxt.edu.service.test;

     

    import java.util.HashMap;

    import java.util.Map;

     

    import org.junit.Test;

    import org.springframework.beans.BeansException;

    import org.springframework.context.annotation.AnnotationConfigApplicationContext;

     

    import cn.gzsxt.edu.config.DataConfig;

    import cn.gzsxt.edu.mapper.AdminMapper;

     

    public class AdminMapperTest {

     

        @Test

        public void insert() {

             try {

                 AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(DataConfig.class);

                 AdminMapper adminMapper = context.getBean(AdminMapper.class);

                 Map<String, Object> entity=new HashMap<String, Object>();

                 entity.put("admin_name", "zhangsan");

                 adminMapper.insert(entity);

                 context.close();

             } catch (BeansException e) {

                 e.printStackTrace();

             }  

        }

    }

    1.1.4.   第四部分:基础公共配置

    1.1.4.1.    配置说明

    1. 请求编码的支持
    2. 配置数据库信息支持Properties配置文件
    3. 配置Log4j的支持
    4. 视图解释器的配置
    5. 编写所需要公共类
    6. 实现一条流程从页面到时数据库-插入

    1.1.4.2. 第一步:实现从表单到数据库-插入(测试)

    --页面测试代码

    <%@ page language="java" contentType="text/html; charset=UTF-8"

        pageEncoding="UTF-8"%>

    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">

    <title>Insert title here</title>

    </head>

    <body>

      <img  src="${pageContext.request.contextPath }/lib/ace-admin/images/avatars/avatar.png">

      <form action="${pageContext.request.contextPath }/admin/addAdmin.do" method="post" >

          管理员名: <input name="admin_name" type="text">

        <input type="submit" value="增加学生">

      </form>

    </body>

    </html>

    --Controller代码

        @RequestMapping(value="/addAdmin")

        public void addAdmin(@RequestParam Map<String,Object> entity) {

             System.out.println("增加管理员");

             Map<String, Object> admin = adminService.addAdmin(entity);

             if(admin!=null) {

                 System.out.println("-增加成功-");

             }

        }

    1.1.4.3. 第二步:数据库的信息放在Properties文件里面

    --sys.properties配置文件

    #数据库信息

    db.driver=org.gjt.mm.mysql.Driver

    db.url=jdbc:mysql://localhost:3306/edu-system

    db.username=root

    db.password=123456

    --DataConfig配置类如下:

        @Value(value="${db.driver}")

        private String driver;

        @Value(value="${db.url}")

        private String url;

        @Value(value="${db.username}")

        private String username;

        @Value(value="${db.password}")

        private String password;

       

        //1.获得数据源

        @Bean(name="dataSource")

        public DataSource getDataSource() {

             BasicDataSource dataSource=new BasicDataSource();

             dataSource.setDriverClassName(driver);

             dataSource.setUrl(url);

             dataSource.setUsername(username);

             dataSource.setPassword(password);

             return  dataSource;

        }

    注意事项:ContextConfig已经配置了@PropertySource

     

    1.1.4.4. 第三步:Log4j日志的支持

    --导入Log1.2的jar包

        <!-- log4j  -->

             <dependency>

                 <groupId>log4j</groupId>

                 <artifactId>log4j</artifactId>

                 <version>${log4j.version}</version>

             </dependency>

    --编写log4.property。注意放在classpath根目录,文件名必须为log4j.properties

    log4j.rootLogger=DEBUG, A1

    log4j.appender.A1=org.apache.log4j.ConsoleAppender

    log4j.appender.A1.layout=org.apache.log4j.PatternLayout

    log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

    1.1.4.5. 第四步:配置视图解释器

    --导入jstl的包

        <!-- jstl -->

             <dependency>

                 <groupId>javax.servlet</groupId>

                 <artifactId>jstl</artifactId>

                 <version>1.2</version>

             </dependency>

    --增加MvcConfig配置类的代码

        //视图解释器的配置

        @Bean

        public InternalResourceViewResolver getViewResolver() {

             InternalResourceViewResolver viewResolver=new InternalResourceViewResolver();

             //1.支持JSTL视图

             viewResolver.setViewClass(JstlView.class);

             //2.设置前缀

             viewResolver.setPrefix("/WEB-INF/views/");

             //3.设置后缀

             viewResolver.setSuffix(".jsp");

            

             return viewResolver;

        }

    1.1.4.6. 第五步:公共类文件以及接口文件的编写

     

    1.1.5.   第五部分:将HTML视图页面修改为JSP

    《将HTML修改为JSP,忽略》

    1.1.5.1. 第一步:将页面公共代码抽象

    --header.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />

    <meta charset="utf-8" />

    <title>后台系统-后台用户管理-列表</title>

    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />

    <!-- bootstrap & fontawesome -->

    <link rel="stylesheet" href="${pageContext.request.contextPath}/lib/ace-admin/css/bootstrap.min.css" />

    <link rel="stylesheet" href="${pageContext.request.contextPath}/lib/ace-admin/font-awesome/4.5.0/css/font-awesome.min.css" />

    <!-- page specific plugin styles -->

     

    <!-- text fonts -->

    <link rel="stylesheet" href="${pageContext.request.contextPath}/lib/ace-admin/css/fonts.googleapis.com.css" />

     

    <!-- ace styles -->

    <link rel="stylesheet" href="${pageContext.request.contextPath}/lib/ace-admin/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" />

    <link rel="stylesheet" href="${pageContext.request.contextPath}/lib/ace-admin/css/ace-skins.min.css" />

    <link rel="stylesheet" href="${pageContext.request.contextPath}/lib/ace-admin/css/ace-rtl.min.css" />

    <script src="${pageContext.request.contextPath}/lib/ace-admin/js/ace-extra.min.js"></script>

    --navbar.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

    <div id="navbar" class="navbar navbar-default          ace-save-state">

        <div class="navbar-container ace-save-state" id="navbar-container">

             <div class="navbar-header pull-left">

                 <a href="index.html" class="navbar-brand">

                      <small>

                          <!--

                           系统Logo

                          <i class="fa fa-leaf"></i>

                          -->

                          后台系统

                      </small>

                 </a>

             </div>

     

             <div class="navbar-buttons navbar-header pull-right" role="navigation">

                 <ul class="nav ace-nav">

                

     

     

     

                      <li class="light-blue dropdown-modal">

                          <a data-toggle="dropdown" href="#" class="dropdown-toggle">

                              <img class="nav-user-photo" src="${pageContext.request.contextPath}/lib/ace-admin/images/avatars/user.jpg" alt="Jason's Photo" />

                              <span class="user-info">

                                  <!--系统角色-->

                                   <small>超级管理员,</small>

                                   <!--管理员名称-->

                                   admin

                              </span>

     

                              <i class="ace-icon fa fa-caret-down"></i>

                          </a>

     

                          <ul class="user-menu dropdown-menu-right dropdown-menu dropdown-yellow dropdown-caret dropdown-close">

                              <li>

                                   <a href="setting.html">

                                       <i class="ace-icon fa fa-cog"></i>

                                       修改密码

                                   </a>

                              </li>

                              <li class="divider"></li>

     

                              <li>

                                   <a href="#">

                                       <i class="ace-icon fa fa-power-off"></i>

                                       注销

                                   </a>

                              </li>

                          </ul>

                      </li>

                 </ul>

             </div>

        </div><!-- /.navbar-container -->

    </div>

    --sidebar.jsp,菜单列表

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

    <div id="sidebar" class="sidebar responsive ace-save-state">

        <script type="text/javascript">

             try{ace.settings.loadState('sidebar')}catch(e){}

        </script>

        <ul class="nav nav-list">

             <li class="">

                 <a href="index.html">

                      <i class="menu-icon fa fa-tachometer"></i>

                      <span class="menu-text"> 系统首页 </span>

                 </a>

     

                 <b class="arrow"></b>

             </li>

                    

             <!--

                          open:表示菜单打开

                  active:表示菜单选中

             -->

             <li class="open ">

                 <a href="#" class="dropdown-toggle">

                      <i class="menu-icon fa fa-desktop"></i>

                      <span class="menu-text">

                          系统管理模块

                      </span>

     

                      <b class="arrow fa fa-angle-down"></b>

                 </a>

     

                 <b class="arrow"></b>

     

                 <ul class="submenu">

                      <li class="active">

                          <a href="elements.html">

                              <i class="menu-icon fa fa-caret-right"></i>

                              后台用户管理

                          </a>

     

                          <b class="arrow"></b>

                      </li>

                          <li class="">

                          <a href="elements.html">

                              <i class="menu-icon fa fa-caret-right"></i>

                              角色管理

                          </a>

     

                          <b class="arrow"></b>

                      </li>

                          <li class="">

                          <a href="elements.html">

                              <i class="menu-icon fa fa-caret-right"></i>

                              权限管理

                          </a>

     

                          <b class="arrow"></b>

                      </li>

                          <li class="">

                          <a href="elements.html">

                              <i class="menu-icon fa fa-caret-right"></i>

                              模块管理管理

                          </a>

     

                          <b class="arrow"></b>

                      </li>

                          <li class="">

                          <a href="elements.html">

                              <i class="menu-icon fa fa-caret-right"></i>

                              修改密码

                          </a>

     

                          <b class="arrow"></b>

                      </li>

     

                 </ul>

             </li>

     

        </ul><!-- /.nav-list -->

     

        <div class="sidebar-toggle sidebar-collapse" id="sidebar-collapse">

             <i id="sidebar-toggle-icon" class="ace-icon fa fa-angle-double-left ace-save-state" data-icon1="ace-icon fa fa-angle-double-left" data-icon2="ace-icon fa fa-angle-double-right"></i>

        </div>

    </div>

    --footer.jsp页尾

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

    <div class="footer">

        <div class="footer-inner">

             <div class="footer-content">

                 <span class="bigger-80">

                      <span class="blue bolder">Ace</span>

                      Application &copy; 2013-2014

                 </span>

     

             </div>

        </div>

    </div>

    1.1.5.2. 第二步:将所有页面嵌入公共代码

    将所有页面,嵌入公共代码。页面太多,格式是一样的。所以以一个index.jsp页面为例

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html>

    <html lang="en">

        <head>

          <jsp:include page="../commons/header.jsp"></jsp:include>

        </head>

     

        <body class="no-skin">

            <!-- 导航栏 start      -->

              <jsp:include page="../commons/navbar.jsp"></jsp:include>

             <!-- 导航栏 end -->

     

             <div class="main-container ace-save-state" id="main-container">

                 <script type="text/javascript">

                      try{ace.settings.loadState('main-container')}catch(e){}

                 </script>

                <!--- 左边栏-菜单 start -->

                   <jsp:include page="../commons/sidebar.jsp"></jsp:include>

                 <!--- 左边栏-菜单 end -->

     

                 <!--- 内容主体 start -->

                 <div class="main-content">

                      <div class="main-content-inner">

                          <!-- 向导栏 start-->

                            .....(忽略代码)

                          <!-- 向导栏 end-->

     

                          <!-- 内容页 start -->

                          <div class="page-content">

                                 你好世界!!!

                          </div><!-- /.page-content -->

                          <!-- 内容页 end -->

                      </div>

                 </div><!-- /.main-content -->

                 <!--- 内容主体 end -->

     

                  <!--页尾 start -->

                   <jsp:include page="../commons/footer.jsp"></jsp:include>

                  <!--页尾 end -->

             </div><!-- /.main-container -->

             <!-- basic scripts -->

                 .....(忽略代码)

        </body>

    </html>

  • 相关阅读:
    大道至简第一张读后感
    字符串加密
    写一个类,在任何时候都可以向它查询创建了多少个类
    类与对象动手动脑
    2016年读书清单
    2016-09-01
    Spring笔记(五)--注解方式实现AOP
    Spring笔记(三)--代理模式
    Spring笔记(四)--公共属性的配置
    表达式之谜
  • 原文地址:https://www.cnblogs.com/lch-Hao/p/10792832.html
Copyright © 2011-2022 走看看