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

一)搭建环境

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

SSM项目思路整合NEW的更多相关文章

  1. SSM项目思路整合NEW2

    上接于 https://www.cnblogs.com/shijinglu2018/p/10374541.html ...... 三)客户管理模块开发 说明:其实大致思路差不太多,都是首先根据前端页面 ...

  2. SSM框架的整合思路&功能实现

    这是我第一篇博客,关于SSM框架的整合思路以及简单功能实现. 首先,最近刚刚学习Spring+SpringMVC+Mybatis,在开发时遇到形形色色的问题,周遭人也为我提供了一些思路,我会一点点整理 ...

  3. SSM项目整合基本步骤

    SSM项目整合 1.基本概念 1.1.Spring Spring 是一个开源框架, Spring 是于 2003  年兴起的一个轻量级的 Java  开发框架,由 Rod Johnson  在其著作  ...

  4. SSM项目整合Quartz

    一.背景 SSM项目中要用到定时器,初期使用Timer,后来用spring 的schedule,都比较简单,所以功能比较单一而且他们不能动态的配置时间.后来就研究quartz,准备整合到项目中.Qua ...

  5. SSM 项目整合

    SSM整合:spring + springmvc + mybatis 1.1 生成Maven项目:ar_ssm 1.2 添加jar包 <dependencies> <!-- 单元测试 ...

  6. 优雅地搭建整合ssm项目

    spring + spring mvc + mybatis 三大框架建议观看 黑马程序员出品的 Springmvc+Mybatis由浅入深全套视频教程 Spring框架2016版视频 观看顺序 ,我个 ...

  7. SSM项目整合第一步 注册登陆实现

    SSM项目整合第一步  注册: 项目目录: 一.数据库建表: 源码: ; -- ---------------------------- -- Table structure for t_user - ...

  8. ssm项目框架搭建(增删改查案例实现)——(SpringMVC+Spring+mybatis项目整合)

    Spring 常用注解 内容 一.基本概念 1. Spring 2. SpringMVC 3. MyBatis 二.开发环境搭建 1. 创建 maven 项目 2. SSM整合 2.1 项目结构图 2 ...

  9. SpringMVC详解(四)------SSM三大框架整合之登录功能实现

    为了后面讲解的需要,我们取数据都会从数据库中获取,所以这里先讲讲三大框架(Spring.SpringMVC.MyBatis)的整合.前面讲解 MyBatis 时,写了一篇 MyBatis 和 Spri ...

随机推荐

  1. css3 - 纯css实现一个轮播图

    这是我上一次的面试题.一晃两个月过去了. 从前都是拿原理骗人,把怎么实现的思路说出来. 我今天又被人问到了,才想起来真正码出来.码出来效果说明一切: 以上gif,只用到了5张图片,一个html+css ...

  2. python set和get实现

    import math class Square: # 正方形 def __init__(self, l): self.length = l # 边长 def __setattr__(self, ke ...

  3. poj 3126 Prime Path(搜索专题)

    Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20237   Accepted: 11282 Desc ...

  4. 布局fixed和sticky

    sticky非常非常非常好用怎么用看代码: 这里为什么没有设置高度呢,因为这个高度应该是浏览器高度,浏览器高度在时刻变化怎么办? js处理: 此JS里面会有执行方法一步一步看 这个里面有JS方法 这个 ...

  5. 剑指offer——python【第14题】链表中倒数第k个节点

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路 注意,看清楚,是输出节点,而不是输出节点值 可以先求出链表总长度,然后正向遍历得到第n个节点 解答 class Solution: def ...

  6. css的小知识4

    ---恢复内容开始--- 一.单位 1.px就是一个基本单位     像素 2.em也是一个单位      用父级元素的字体大小乘以em前面的数字.如果父级没有就继承上一个父级直到body,如果bod ...

  7. INFO Dispatcher:42 - Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir

    INFO Dispatcher:42 - Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax ...

  8. ZOJ 4070 - Function and Function - [签到题][2018 ACM-ICPC Asia Qingdao Regional Problem M]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5840 Time Limit: 1 Second Mem ...

  9. bug修复记录

    telnet 网址 ping netaddr traceroute netaddr ,这是一个linux下的命令可以通过Vmmap观察程序运行时所需要的依赖库协议里面涉及到数组的, 一定要判断最大值 ...

  10. rebuild online时意外中断 再次重建时报错解决方法

    rebuild online时意外中断 再次重建时报错 SQL> alter index PARTY.IDX_CM_INDIV_CUSTOMER_4 rebuild online; alter ...