zoukankan      html  css  js  c++  java
  • 入门级的SSM架构搭建解析

    这里没有用到项目管理工具例如SVN和maven


    1.导入相关jar包
    这里不做多余的解释了下载Spring和SpringMvc相关jar包
    log4j,mysql相关包以及与mybatis-spring整合包,jstl包,数据源包,就可以了
    2.编写目录层级
    eg:
    com.demo.controller
    IndexController.java
    com.demo.dao
    UserMapper.java
    UserMapper.xml
    com.demo.entity
    User.java
    com.demo.service
    UserService.java
    UserServiceImpl.java
    com.demo.test(用来进行测试)

    如果任务需要还可以写一层VO
    (com.demo.vo
    QueryVo.java

    3.创建source文件夹管理xml和一些数据库配置文件以及log4j
    eg:
    applicationContext-dao.xml (dao层管理)

        <bean
            //引用db.properties配置文件
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
            p:location="classpath:db.properties" />
    
            /*这段代码<import resource="applicationContext-service.xml"/>是用来做测试用的,如果确定没有问题不导入也行,区别在于是在哪里看一种在页面上调试一种在IDE控制台中代码上调试*/
            <import resource="applicationContext-service.xml"/>
    
    
            //dbcp数据源找到BasicDataSource类路径
            <bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
                <property name="driverClassName"  value="${driver}"/>
                <property name="url"              value="${url}"/> 
                <property name="username"         value="${username}"/>
                <property name="password"         value="${password}"/>
            </bean>
    
            //通过Spring框架管理sqlsession并注入dataSource,配置一些mybatis中的配置
            <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
            p:dataSource-ref="dataSource"
            p:typeAliasesPackage="com.demo.entity"
            p:configLocation="classpath:mybatis-config.xml"
            />
    
            //开启mapper接口扫描只要mapper接口和mapper.xml在一起默认会采用当前mapper接口名开头小写
            <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" 
            p:basePackage="com.demo.dao" />

    applicationContext-service.xml (service层管理)

      //扫描service层spring注解
      <context:component-scan base-package="com.demo.service" />

    applicationContext-trans.xml (事物管理)

    <!-- 事务管理器 -->
    //开启事物管理器
        <bean id="transactionManager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <!-- 引入数据源 ,因为web.xml中配置了Spring配置扫描,所以这里可以用ref引用-->
            <property name="dataSource" ref="dataSource" />
        </bean>
    
        <!-- 通知 -->
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <!-- 传播行为 -->
                <tx:method name="save*" propagation="REQUIRED" />
                <tx:method name="insert*" propagation="REQUIRED" />
                <tx:method name="delete*" propagation="REQUIRED" />
                <tx:method name="update*" propagation="REQUIRED" />
                <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
                <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
            </tx:attributes>
        </tx:advice>
    
        <!-- 切面 -->
        <aop:config>
            <aop:advisor advice-ref="txAdvice"
            //定义切面
                pointcut="execution(* com.demo.service.*.*(..))" />
        </aop:config>

    mybatis-config.xml (mybatis配置)

    <?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>
    <!-- 加入自己想配置的代码   基础搭建代码为空也即可,前面dao配置已经配置过了-->
    </configuration>

    db.properties (数据库配置文件)
    log4j.properties (log4j文件)
    SpringMvc.xml (SpringMvc的配置控制controller层)

        <!-- 注解扫描 -->
      <context:component-scan base-package="com.demo.controller" />
       <!-- 注解驱动,帮我们配置最新的   处理器适配器  和   处理器解析器 -->
       <mvc:annotation-driven />
            <!-- 视图解析器 ,InternalResourceViewResolver常用于.jsp视图解析-->
            <bean 
            class="org.springframework.web.servlet.view.InternalResourceViewResolver"
            p:prefix="/WEB-INF/jsp/"
            p:suffix=".jsp"
            />
            <!--/WEB-INF/jsp/下   以.jsp结尾的文件 -->

    4.编写web.xml
    (1)首先要进行加载Spring容器加入监听器

    <!-- 加载spring容器 -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            /*扫描applicationContext-*.xml  (*通配符) */
            <param-value>classpath:applicationContext-*.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>

    (2)配置SpringMvc前端控制器

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>SpringProject4</display-name>
      <welcome-file-list>//程序默认地址
        <welcome-file>/WEB-INF/jsp/login.jsp</welcome-file>
      </welcome-file-list>
    
    <!-- SpringMvc配置前端控制器 -->
        <servlet>
            <servlet-name>Spring</servlet-name>
             /*指定SpringMvc前端控制器*/
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
            <init-param>
                <param-name>contextConfigLocation</param-name>
                /*扫面Spring-mvc配置文件,只要是spring配置文件路径全使用classpath: 形式*/
                <param-value>classpath:SpringMvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>Spring</servlet-name>
            <url-pattern>*.action</url-pattern>//路径方式可自定义只要符合规格即可eg:/*
        </servlet-mapping>

    (3)配置基本的 Filter过滤器

    <!-- Filter过滤器 配置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>
        </web-app>

    到此web.xml配置完毕。


    5.编写各个包
    (1)pojo包

    package com.demo.entity;
    
    public class User {
        private int userId;
        private String userName;
        private String password;
        private String email;
        public int getUserId() {
            return userId;
        }
        public void setUserId(int 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;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        private String address;
    }
    

    (2)dao

    package com.demo.dao;
    
    import org.apache.ibatis.annotations.Param;
    
    import com.demo.entity.User;
    import com.demo.vo.QueryVo;
    
    public interface UserMapper {
    
    
        User selectLogin1(User user);
    
        User selectLogin2(@Param("userName")String userName,@Param("password")String password);
    
        User selectLogin3(QueryVo queryVo);
    
    }

    同包下的mapper.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.demo.dao.UserMapper">
    
    <select id="selectLogin1" parameterType="user" resultType="user">
    
    select * from user where userName=#{userName} and password=#{password}
    </select>
    <select id="selectLogin2" resultType="user">
    
    select * from user where userName=#{userName} and password=#{password}
    
    </select>
    
    <select id="selectLogin3" resultType="user" parameterType="com.demo.vo.QueryVo">
    
    select * from user where userName=#{user.userName} and password=#{user.password}
    
    </select>
    </mapper>   

    (3)service下

    package com.demo.service;
    
    import org.apache.ibatis.annotations.Param;
    
    import com.demo.entity.User;
    import com.demo.vo.QueryVo;
    
    public interface UserService {
    
        User selectLogin1(User user);
    
        User selectLogin2(@Param("userName")String userName,@Param("password")String password);
    
    
        User selectLogin3(QueryVo queryVo);
    
    }
    

    service实现类

    package com.demo.service;
    
    import javax.annotation.Resource;
    
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    
    import com.demo.dao.UserMapper;
    import com.demo.entity.User;
    import com.demo.vo.QueryVo;
    
    @Transactional
    @Service(value="userService")
    public class UserServiceImpl implements UserService {
    
        @Resource(name="userMapper")
        private UserMapper userMapper;
    
        @Override
        public User selectLogin1(User user) {
            // TODO Auto-generated method stub
            return userMapper.selectLogin1(user);
        }
    
        @Override
        public User selectLogin2(String userName, String password) {
            // TODO Auto-generated method stub
            return userMapper.selectLogin2(userName, password);
        }
    
        @Override
        public User selectLogin3(QueryVo queryVo) {
            // TODO Auto-generated method stub
            return userMapper.selectLogin3(queryVo);
        }
    
    }
    

    (4)controller

    package com.demo.controller;
    
    import javax.annotation.Resource;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    import com.demo.entity.User;
    import com.demo.service.UserService;
    import com.demo.vo.QueryVo;
    //Spring框架Controller注解也就是action
    @Controller
    @RequestMapping("/user")        //访问地址路径
    public class IndexController {
    
        @Resource(name="userService")//jdk自带注解
        private UserService userService;
    
    
        @RequestMapping("/log1")    //访问地址路径/user/log1
        public String login1(User user,Model model){
            User user1 = userService.selectLogin1(user);
            if(user1!=null){
                model.addAttribute("msg", "登录成功");
            }else{
                model.addAttribute("msg", "登录失败");
            }
            return "msg";  //返回String类型SpringMvc把这个String当成逻辑视图的地址
            //返回值也可以是ModelAndView
        }
    
        //SpringMvc会自动转换基本数据类型但是要求表单name值与下面属性名相同
        @RequestMapping("/log2")
        public String login2(@RequestParam String userName,@RequestParam String password
                ,Model model){
                //RequestParamp配置一些传参数的要求其中有一个默认属性required为true即必须填写
            User user = userService.selectLogin2(userName, password);
            if(user!=null){
                model.addAttribute("msg", "登录成功");
            }else{
                model.addAttribute("msg", "登录失败");
            }
            return "msg";
        }
    
        //
        @RequestMapping("/log3")
        public String login3(QueryVo queryVo,Model model){
    
            User user = userService.selectLogin3(queryVo);
            if(user!=null){
                model.addAttribute("msg", "登录成功");
            }else{
                model.addAttribute("msg", "登录失败");
            }
            return "msg";
        }
    }
    

    (5)Vo

    package com.demo.vo;
    
    import com.demo.entity.User;
    
    /*Vo的作用比较好
    本人理解:
    SpringMvc会自动帮你进行【拆】与【装】
    拆:Mapper.xml中通常传入对象引用直接写对象的属性即可,
    而用了Vo这个类会帮拆除一层那么就到了Vo中的属性
    在mapper.xml中自己写入条件
    eg:userName=#{user.userName}
    装:form表单input标签中的name为Vo属性的属性的属性的属性......
    eg:name="user.userName"
    他就会帮你装入Vo属性中的User类中的userName属性
    */
    public class QueryVo {
    
        private User user;
    
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    }
    

    (6)自定义的测试

    package com.test;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.demo.entity.User;
    import com.demo.service.UserService;
    
    public class UserTest {
    
    //这里面能狗调用applicationContext-dao.xml是因为上面部分导入了service层的XML为了做测试成没成功
    
        @Test
        public void run1(){
            ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dao.xml");
            UserService userService = (UserService)ac.getBean("userService");
    
            User user = userService.selectLogin2("1141193930","12312300a");
            if(user==null){
                System.out.println("用户名密码错误");
            }else{
                System.out.println("登录成功");
            }
    
        }
    }

    WEB-INF/jsp/jsp简单页面
    login.jsp

    
        <form action="${pageContext.request.contextPath }/user/log1" method="post">
    
        账号:<input type="text" name="userName"/><br>
        密码:<input type="text" name="password"/><br>
        <input type="submit" value="登录"/>
    
        </form>
    
        <hr/>
    
        <form action="${pageContext.request.contextPath }/user/log2" method="post">
    
        账号:<input type="text" name="userName"/><br>
        密码:<input type="text" name="password"/><br>
        <input type="submit" value="登录"/>
    
        </form>
        <hr/>
    
        <form action="${pageContext.request.contextPath }/user/log3" method="post">
    
        账号:<input type="text" name="user.userName"/><br>
        密码:<input type="text" name="user.password"/><br>
        <input type="submit" value="登录"/>
    
        </form>

    msg.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>Insert title here</title>
    </head>
    <body>
    消息:${msg}
    
    </body>
    </html>

    层级目录:
    这里写图片描述
    这里写图片描述


    启动程序进行测试
    开启concat服务器

    这里写图片描述

    打开页面成功
    这里写图片描述

    页面跳转并判断成功
    这里写图片描述

  • 相关阅读:
    数据库悲观锁与乐观锁
    windows消息大全
    Ubuntu 16.04 LTS GNOME版本下载
    Spring MVC-表单(Form)处理示例(转载实践)
    Spring MVC-Hello World示例(转载实践)
    Spring MVC-环境设置(转载实践)
    MyBatis在注解上使用动态SQL(@select使用if)
    Ubuntu 16.04安装Ubuntu After Install工具实现常用软件批量安装
    Ubuntu 16.04开机自动挂载硬盘分区(转)
    Spring MVC-概述(转载实践)
  • 原文地址:https://www.cnblogs.com/liclBlog/p/15349591.html
Copyright © 2011-2022 走看看