• SSM项目思路整合NEW


    #首先进行项目思路整体分析,具体包括哪些模块,如何实现等;

    一)搭建环境

    1.导包;

    (Spring核心包4个 + 面向切面的包4个 + SpringJDBC和事务的包各一个,

       SpringMVC两个包,

       MyBatis包13个,Spring+MyBatis整合包一个,

       JDBC驱动包一个,数据源dbcp和连接池pool各一个

       jstl和fast-jackson共5个

       java工具类包一个

    2.数据库和表和相关开发工具的准备;

       导入数据库;

       create database xxx;

       use xxx;

       source xxxpath;

    3.环境的配置文件;

    applicationContext.xml(数据库、事务、面向切面通知)

    resource.properties  数据库配置

    Spring-config.xml(扫描包、注解驱动、视图解析器)

    web.xml(监听器、编码过滤器、前端控制器、SpringMVC路径解析配置)

    4.引入前端资源;

    -----------------------------------------------------------------------------------------------------------------------------

          说明:从前端到后台,而后台分为控制层、业务层、持久层、数据库;但从实际开发的角度来看,

    是反着的,因为得有数据和相关参数,再有业务处理(设定规则并调用持久层参数等)和逻辑控

    (如登录拦截、密码加密,并调用业务层参数等)。

    -----------------------------------------------------------------------------------------------------------------------------

    二)客户模块开发

    1.用户登录(判断是否登录)

     1)   用户持久化类user.java

     2)用户持久化类接口UserDao.java

    package com.sjl.core.dao;
    import org.apache.ibatis.annotations.Param;
    import com.sjl.core.po.User;
    /**
     * 用户DAO层接口
     */
    public interface UserDao {
        /**
         * 通过账号和密码查询用户
         */
        public User findUser(@Param("usercode") String usercode,
                                @Param("password") String password);
    }

     3)接口的映射文件(去取接口中用户名和密码参数,并查询数据库中内容,又因前面UserDao里参数都是String类型,所以用@Param注解来区分参数)

    <?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.sjl.core.dao.UserDao" >
        <!-- 查询用户 -->
        <select id="findUser" parameterType="String" resultType="user">
            select *
            from sys_user
            where user_code = #{usercode}
            and user_password =#{password}
            and user_state = '1'
        </select>
    </mapper>
    <!--查询可用用户-->

     4)实现业务层并调用持久层传过来的数据。

    package com.sjl.core.service;
    import com.sjl.core.po.User;
    /**
     * 用户Service层接口
     */
    public interface UserService {
        // 通过账号和密码查询用户
        public User findUser(String usercode,String password);
    }

    5)接口的实现类;

    package com.sjl.core.service.impl;
    
    ......
    /** * 用户Service接口实现类 */ @Service("userService") 
    @Transactional
    public class UserServiceImpl implements UserService {
    // 注入UserDao @Autowired private UserDao userDao; // 通过账号和密码查询用户
    @Override
    public User findUser(String usercode, String password) {
    User user
    = this.userDao.findUser(usercode, password); return user; }
    }

    6)控制层

    package com.sjl.core.web.controller;
    
    ......

    /** * 用户控制器类 */ @Controller public class UserController { // 依赖注入 @Autowired private UserService userService; /** * 用户登录 */ @RequestMapping(value = "/login.action", method = RequestMethod.POST) public String login(String usercode,String password, Model model, HttpSession session) { // 通过账号和密码查询用户 User user = userService.findUser(usercode, password); if(user != null){ // 将用户对象添加到Session session.setAttribute("USER_SESSION", user); // 跳转到主页面 // return "customer"; return "redirect:customer/list.action"; } model.addAttribute("msg", "账号或密码错误,请重新输入!"); // 返回到登录页面 return "login"; } }

    前端登录页面

    index.jsp
    <
    %@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- 转发到登录页面 --> <jsp:forward page="/WEB-INF/jsp/login.jsp"/>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE HTML>
    <html>
    <head>
    <title>登录页面</title>

    ......

    // 判断是登录账号和密码是否为空 function check(){ var usercode = $("#usercode").val(); var password = $("#password").val(); if(usercode=="" || password==""){ $("#message").text("账号或密码不能为空!"); return false; } return true; }
    </script> </head> <body leftMargin=0 topMargin=0 marginwidth="0" marginheight="0" background="${pageContext.request.contextPath}/images/rightbg.jpg">

    ......
    <legend> <font style="font-size:15px" face="宋体"> 欢迎使用BOOT客户管理系统 </font> </legend> <font color="red"> <%-- 提示信息--%> <span id="message">${msg}</span> </font> <%-- 提交后的位置:/WEB-INF/jsp/customer.jsp--%> <form action="${pageContext.request.contextPath }/login.action" method="post" onsubmit="return check()"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;号:<input id="usercode" type="text" name="usercode" /> <br /><br />&nbsp;码:<input id="password" type="password" name="password" /> <br /><br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <center><input type="submit" value="登录" /></center> </form> </fieldset> </td> </tr> </table> </div> </body> </html>

    2.登录拦截验证

           (说明:防止控制器中有方法可直接跳转到登录页面,所以这里添加一个session,以保证系统安全)

    1)登录拦截验证

    ......

    public
    class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 获取请求的URL String url = request.getRequestURI(); // URL:除了登录请求外,其他的URL都进行拦截控制 if (url.indexOf("/login.action") >= 0) { return true; } // 获取Session HttpSession session = request.getSession(); User user = (User) session.getAttribute("USER_SESSION"); // 判断Session中是否有用户数据,如果有,则返回true,继续向下执行 if (user != null) { return true; } // 不符合条件的给出提示信息,并转发到登录页面 request.setAttribute("msg", "您还没有登录,请先登录!"); request.getRequestDispatcher("/WEB-INF/jsp/login.jsp") .forward(request, response); return false; }
    ......

    }

    2)在springmvc-config.xml中添加如下内容:
    <!-- 配置拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="com.sjl.core.interceptor.LoginInterceptor" /> </mvc:interceptor> </mvc:interceptors>
    <!--说明:对于所有请求都被该拦截器类拦截,该类在控制器之前执行-->

    3.退出登录

    1.参考customer.jsp

    ......

    <ul class="dropdown-menu dropdown-user"> <li><a href="#"><i class="fa fa-user fa-fw"></i> 用户:${USER_SESSION.user_name} </a> </li> <li><a href="#"><i class="fa fa-gear fa-fw"></i> 系统设置</a></li> <li class="divider"></li> <li> <a href="${pageContext.request.contextPath }/logout.action"> <i class="fa fa-sign-out fa-fw"></i>退出登录 </a> </li> </ul>
    ......

    2.在userController.java中添加如下内容

        /**
         * 模拟其他类中跳转到客户管理页面的方法
         */
        @RequestMapping(value = "/toCustomer.action")
        public String toCustomer() {
            return "customer";
        }
        
        /**
         * 退出登录
         */
        @RequestMapping(value = "/logout.action")
        public String logout(HttpSession session) {
            // 清除Session
            session.invalidate();
            // 重定向到登录页面的跳转方法
            return "redirect:login.action";
        }
        /**
         * 向用户登陆页面跳转
         */
        @RequestMapping(value = "/login.action", method = RequestMethod.GET)
        public String toLogin() {
            return "login";
        }

    三)客户管理模块开发

          说明:该模块主要包含了对用户信息的增删改查,其中查看包含了分页。

                   未完待补充,但是思路类似。

                   https://i.cnblogs.com/EditPosts.aspx?postid=10631576

    成年人的世界没有那么多的童话,也没有那么多的逆袭。
  • 相关阅读:
    mysql系列---【如何利用存储过程,造10万条测试数据?】
    sql_视图和函数
    sql的一些知识_数据分组
    sql的一些知识_函数_汇总数据
    sql的一些知识_计算字段
    sql的一些知识_通配符
    sql的一些知识_where
    sql的一些知识_order by
    sql的一些知识
    chardet的使用
  • 原文地址:https://www.cnblogs.com/shijinglu2018/p/10374541.html
Copyright © 2020-2023  润新知