• SSM


    • u  三大框架基本概念

                     spring、SpringMVC、Mybatis

    • u  整合思路
    • u  环境准备
    • u  工程结构
    • u  SPRING + SPING MVC + MYBATIS 三大框架整合
      • ü  Mybatis和spring进行整合
      • ü  Spring整合service
      • ü  整合springMVC
      • ü  配置前端控制器
      • ü  编写登录页面
      • ü  数据库配置和日志配置
      • ü  项目部署

    1      三大框架基本概念

    • spring:

    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

    • SpringMVC:

    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

    • Mybatis:

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

    2      整合思路

    SSM系统架构 :

     

    spring将各层进行整合

    • 通过spring管理持久层的mapper(相当于dao接口)
    • 通过spring管理业务层service,service中可以调用mapper接口。
    • spring进行事务控制。
    • 通过spring管理表现层Handler,Handler中可以调用service接口。

    mapper、service、Handler都是javabean。

    第一步:整合dao层

    ü     mybatis和spring整合,通过spring管理mapper接口。

    ü     使用mapper的扫描器自动扫描mapper接口在spring中进行注册。

    第二步:整合service层

    ü     通过spring管理service接口。

    ü     使用配置方式将service接口配置在spring配置文件中。

    ü     实现事务控制。

    第三步:整合springMVC

    ü     由于springMVC是spring的模块,不需要和spring整合,直接把springMVC加入到项目中即可。

     3.      示例:

    1.

    2. login.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'login.jsp' starting page</title>
        
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
    
      </head>
      
      <body>
           <form action="<%=path %>/login.action" method="post">
               用户名:<input type="text" name="username" ><br/>
               密码:<input type="text" name="password"><br/>
               <input type="submit" value="提交">
           </form>
           ${message }
      </body>
    </html>

    3. success.jsp 

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'sucess.jsp' starting page</title>
        
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
    
      </head>
      
      <body>
        id:${user.id }<br>
        username:${user.username }<br/>
        password:${user.password }<br/>
      </body>
    </html>

    4. web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
      <display-name></display-name>    
      
      <!-- 加载Spring容器 -->
      <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:/spring/applicationContext-*.xml</param-value>
      </context-param>
      <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      
      <!-- springmvc前端控制器 -->
      <servlet>
          <servlet-name>springmvc_rest</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 初始化时加载配置文件 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:/spring/springmvc.xml</param-value>
        </init-param>
        <!-- 表示容器在启动时立即加载Servlet -->
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
          <servlet-name>springmvc_rest</servlet-name>
          <url-pattern>/</url-pattern>
      </servlet-mapping>
      
      <!-- 解决post请求的中文乱码问题 -->
      <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>
      
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

    5. springmvc.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:p="http://www.springframework.org/schema/p"
        xmlns:mvc="http://www.springframework.org/schema/mvc" 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/mvc  
                            http://www.springframework.org/schema/mvc/spring-mvc.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">
        <!-- 指定需要扫描的包 -->
        <context:component-scan base-package="com.inspur.ssm.*"></context:component-scan>
    
        <!-- 使用mvc注解驱动,代替注解映射器和注解适配器配置 -->
        <mvc:annotation-driven></mvc:annotation-driven>
        
        
        <!-- 视图解析器  -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
    
    </beans>

    6. (1)applicationContext-dao.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:p="http://www.springframework.org/schema/p"  
        xmlns:mvc="http://www.springframework.org/schema/mvc"  
        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/mvc  
                            http://www.springframework.org/schema/mvc/spring-mvc.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"> 
        <!-- 加载配置文件db.properties中的内容,db.properties文件中key命名要有一定命名规则 -->
        <context:property-placeholder location="classpath:db.properties"></context:property-placeholder>
        
        <!-- 配置数据源 -->
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value="${jdbc.driver}"></property>
            <property name="url" value="${jdbc.url}"></property>
            <property name="username" value="${jdbc.username}"></property>
            <property name="password" value="${jdbc.password}"></property>
        </bean>
        
        <!-- 配置Mybatis工厂:sqlSessionFactory -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 注入数据源 -->
            <property name="dataSource" ref="dataSource"></property>
            <!-- 指定核心配置文件位置:加载mybatis的配置文件 -->
            <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml"></property>
        </bean>
        
        <!-- Mapper代理开发(基于MapperScannerConfigurer):mapper批量扫描 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.inspur.ssm.mapper"></property>
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
        </bean>
    
        
    
    </beans>

     (2)applicationContext-transaction.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:p="http://www.springframework.org/schema/p"
        xmlns:mvc="http://www.springframework.org/schema/mvc" 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/mvc  
                            http://www.springframework.org/schema/mvc/spring-mvc.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">
          <!-- 事务管理器,依赖于数据源:事务管理器,对mybatis操作数据库的事务控制,spring使用jdbc的事务控制类 -->
          <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                  <!-- 数据源dataSource在 applictaionContext-dao.xml配置了 -->
                  <property name="dataSource" ref="dataSource"></property>
          </bean>                   
                            
    </beans>

    7. sqlMapConfig.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="com.inspur.ssm.pojo"/>
        </typeAliases>
    </configuration>

    8. LoginController.java

    package com.inspur.ssm.controller;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import com.inspur.ssm.pojo.Userssm;
    import com.inspur.ssm.service.LoginService;
    
    
    @Controller
    public class LoginController {
        @Autowired
        private LoginService loginService;
        //登录
        @RequestMapping("/login")
        public String login(HttpServletRequest request,Userssm userssm) throws Exception{
            Userssm user=null;
            try {
                user=loginService.findUser(userssm);
                
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
                request.setAttribute("message", e.getMessage());
            }
            if(user!=null){
                HttpSession session = request.getSession();
                //在session中保存用户信息
                session.setAttribute("user", user);
                //重定向到登录成功页面
                return "success";
            }
            return "login";
            
        }
    
    }

    9. UserssmMapper.java

    package com.inspur.ssm.mapper;
    
    import com.inspur.ssm.pojo.Userssm;
    
    public interface UserssmMapper {
        Userssm findUser(Userssm userssmQuery);
    
    }

    10. UsessmrMapper.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="com.inspur.ssm.mapper.UserssmMapper">
        <select id="findUser" resultType="userssm" parameterType="userssm">
            select * from userssm where username=#{username} and password=#{password}
        </select>
    </mapper>

    11. Userssm.java

    package com.inspur.ssm.pojo;
    
    public class Userssm {
        private String id;
        private String username;
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        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;
        }
        private String password;
        
    
    }

    12. LoginService.java

    package com.inspur.ssm.service;
    
    import javax.annotation.Resource;
    
    import com.inspur.ssm.pojo.Userssm;
    
    @Resource
    public interface LoginService {
        //查询用户列表
        public Userssm findUser(Userssm userssm) throws Exception;
    
    }

    13. LoginServiceImpl.java

    package com.inspur.ssm.serviceImpl;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.inspur.ssm.mapper.UserssmMapper;
    import com.inspur.ssm.pojo.Userssm;
    import com.inspur.ssm.service.LoginService;
    
    @Service("loginService")
    public class LoginServiceImpl implements LoginService {
        @Autowired
        private UserssmMapper userssmMapper;
        @Override
        public Userssm findUser(Userssm userssmQuery) throws Exception {
            // TODO Auto-generated method stub
            Userssm userssm = userssmMapper.findUser(userssmQuery);
            if(userssm==null){
                throw new Exception("用户信息不存在");
            }else{
                return userssm;
            }
        }
    
    }

    14.  db.properties

    jdbc.driver=oracle.jdbc.driver.OracleDriver
    jdbc.url=jdbc:oracle:thin:@localhost:1521:inspur
    jdbc.username=scott
    jdbc.password=tiger

    15. log4j.properties

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p [%t] %c{1}:%L - %m%n
    #在开发环境下日志级别要设置成DEBUG,生产环境设置成info或error
    log4j.rootLogger=DEBUG, stdout

    4.     对应数据库语言

    create table USERSSM
    (
      ID   NUMBER(6) not null,
      userNAME VARCHAR2(100) not null,
      role VARCHAR2(10),
      realname VARCHAR2(10),
      password VARCHAR2(10)
    
    )
    select * from userssm for update

     5.        浏览器运行结果

    查询成功:

    查询失败:

     

  • 相关阅读:
    [Unity热更新]04.卸载方式
    [Unity热更新]03.加载方式
    [Unity热更新]02.依赖关系
    [Unity热更新]01.打包与加载基础
    [Unity优化]批处理05:UGUI
    [Unity优化]gc02:StringBuilder
    [Unity优化]gc01:字符串常量池
    虚拟机中安装centos系统的详细过程
    零基础学习java------40---------Maven(maven的概念,安装,maven在eclipse中使用),springboot(spring整合springmvc(注解),spring整合mybatis(常见的配置文件)),前端页面(bootstrap软件)
    零基础学习java------39---------json格式交互,Restful(不懂),静态资源映射,SSM整合(ssm整合思想,application.xml文件详解(声明式事务管理),)
  • 原文地址:https://www.cnblogs.com/sunxiaoyan/p/9227425.html
Copyright © 2020-2023  润新知