动力节点SSM框架项目实战|Spring+Mybatis+Springmvc框架项目实战整合-【CRM客户管理系统】_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1tZ4y1d7kg?spm_id_from=333.337.search-card.all.click

1,搭建开发环境:
  1)创建项目:crm-project
              设置JDK.
    创建工程:crm
           补全目录结构:
          设置编码格式:UTF-8
  2)添加jar包:添加依赖---参考课件.
  3)添加配置文件:参考课件.
  4)添加静态页面资源:

为何将静态资源部署到idea中maven的webapp框架下的webapp目录下:maven  webapp框架中的webapp目录,再将项目部署到tomcat服务器下面时,会直接将此目录下的文件拷贝到tomcat的webapps目录下,所以在idea中编写web项目时,静态页面资源直接放置在webapp目录下即可

项目部署到Tomcat服务器上时,会将项目文件添加到tomcat服务器webapps下面。(webapps下面会部署很多项目)

目录结构:

webapps
       |->stumgr(其他项目)
       |->crm(本次项目)
                    |->.html,.css,.js,.img   test.jsp
                    |->WEB-INF(下面有三大件,即web.xml    classes   lib)
                              |->web.xml(核心配置文件)
                              |->classes(我们写好的java程序编译好的class文件)
                              |->lib(放jar包,在项目部署时idea和mave会将仓库里的使用到jar包全部拷贝进去)

**web应用根目录下的内容都是不安全的,外界可以通过url直接访问;
所以,一般为了数据的安全,都会把页面放到WEB-INF下,因为WEB-INF目录下的资源是受保护的,外界不能直接访问,但是内部的java程序例如controller可以访问,controller编译的class文件在WEB-INF目录下,进而可以访问WEB-INF目录下的文件。外界访问的整个的流程就是,外界访问controller的url,进而访问到controller,进而访问到WEB-INF下的一些文件。进而又引入一个问题,如果外界知道controller的url,那么会不会直接访问到WEB-INF目录下的文件呢?答案是会的,但是我们可以对用户进行验证,通过拦截器等进行访问验证,进而对无权限的账号进行拦截。

在部署到Tomcat上时出现了如下问题:

解决办法:将web.xml文件中的监听器部分注释掉(解决问题就解决掉提出问题的人)

做项目的功能时,先做被依赖的功能,例如系统管理功能和业务实现功能,就先做系统管理功能

首页功能

usercontroller类:

@Controller
public class UserController {/*** url要和controller方法处理完请求之后,响应信息返回的页面的资源目录保持一致*/@RequestMapping("/settings/qx/user/toLogin.do")public String toLogin(){//请求转发到登录页面return "settings/qx/user/login";}
}

JAVA WEB项目目录结构以及web应用部署的根目录,编译路径和项目根目录的区别 - 月染霜华 - 博客园 (cnblogs.com)https://www.cnblogs.com/shoshana-kong/p/11419867.html#:~:text=web%E5%BA%94%E7%94%A8%E9%83%A8%E7%BD%B2%E7%9A%84,t%E6%88%96%E8%80%85%E5%88%AB%E7%9A%84%E4%BB%80%E4%B9%88%EF%BC%89

登录功能

1,同步请求和异步请求的区别:
  同步请求:浏览器窗口发出的请求,响应信息返回到浏览器窗口,所以会进行全局刷新。
  异步请求:ajax发出的请求,响应信息返回到ajax的回调函数,既可以进行全局刷新,也可以进行局                     部刷新。

小结:如果需要进行全局刷新,推荐使用同步请求,当然也可以使用异步请求;
             如果需要进行局部刷新,只能使用异步请求;
             如果既可能进行全局刷新,也可能进行局部刷新,也是只能使用异步请求。

异步请求,需要的参数根据usercontroller要执行的操作需要来提供。

浏览器发送请求,接受请求的controller层应该如何创建以及是否要在原来的controller层上加方法,具体看处理后的响应信息返回到哪个页面,一个页面如果占一个独立的资源目录,那这个资源目录对应一个controller类

controller只进行流程控制,不处理具体逻辑,usercontroller层接收到参数以后决定调用哪个service层

一张表对应一个实体类,对应一个dao层(mapper层),对应一个service层

2,mybatis逆向工程:

创建mybatis逆向工程,生成jar包,供crm项目使用。
  1)简介:根据表生成mapper层三部分代码:实体类,mapper接口,映射文件。
  2)使用mybatis逆向工程:
    a)创建模块:crm-mybatis-generator
    b)添加插件:(创建过程中  maven中引入依赖是指引入是jar包,jar包只能是被其他程序去调。插件:是独立的程序,可以独立运行)
      <!--myBatis逆向工程插件-->
    <plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.3.2</version>
    <configuration>
        <verbose>true</verbose>
        <overwrite>true</overwrite>
    </configuration>
    </plugin>
   c)添加配置文件:
     数据库连接信息
     代码保存的目录
     表的信息
   d)运行mybatis的逆向工程,根据指定表生成java代码,保存到指定的目录中。

前面注释掉监听器的代价。。。。在进行网页登录时有了如下一模一样的bug。。

(22条消息) SSM碰到org.springframework.beans.factory.UnsatisfiedDependencyException解决方法_qq_1959227206的博客-CSDN博客https://blog.csdn.net/yjt520557/article/details/86598097

想要把控制层的数据传递给页面,都是通过作用域来传

1,把控制层(controller)代码中处理好的数据传递到视图层(jsp),使用作用域传递:
   pageContext:用来在同一个页面的不同标签之间传递数据。
   request:在同一个请求过程中间传递数据。
   session: 同一个浏览器窗口的不同请求之间传递数据。
   application:所有用户共享的数据,并且长久频繁使用的数据。

在网站地址栏中想查询服务器中的数据,先在地址栏中输入需要的controller对应的的url,controller调用service层方法等操作,查出来之后返回到controller,controller利用request,set等方法将数据传递给

用户登录时,如何验证信息的:验证信息时,以传来的用户名且密码为条件,查询数据库,未查到就返回null的user,查到就返回相应的信息user,mapper文件中如下查询语句进行查询。

 <select id="selectUserByLoginActAndPwd" parameterType="map" resultMap="BaseResultMap">select<include refid="Base_Column_List"/>from tbl_userwhere login_act=#{loginAct} and login_pwd=#{loginPwd}</select>

十天免登录功能实现(cookie)
   访问:login.jsp---->后台:.html:如果上次记住密码,自动填上账号和密码;否则,不填。
                             如何判断上次是否记住密码?`
                 --上次登录成功,判断是否需要记住密码:如果需要记住密码,则往浏览器写cookie;否则,删除cookie。而且cookie的值必须是该用户的loginAct和loginPwd
                 --下次登录时,判断该用户有没有cookie:如果有,则自动填写账号和密码;否则,不写。而且填写的是cookie的值.
                  ----->浏览器显示

在usercontroller中写入cookie

//如果需要记住密码,则往外写cookieif("true".equals(isRemPwd)){Cookie c1=new Cookie("loginAct",user.getLoginAct());c1.setMaxAge(10*24*60*60);response.addCookie(c1);Cookie c2=new Cookie("loginPwd",user.getLoginPwd());c2.setMaxAge(10*24*60*60);response.addCookie(c2);}else{//把没有过期cookie删除//因为后台不能去删除用户已经记录的cookie,所以再重新提交一次用来覆盖原来的cookie,向用户端保存时间为0,账号密码实际值无所谓的cookie,但是要覆盖的属性的属性名要一致Cookie c1=new Cookie("loginAct","1");c1.setMaxAge(0);response.addCookie(c1);Cookie c2=new Cookie("loginPwd","1");c2.setMaxAge(0);response.addCookie(c2);}

获取cookie

使用EL表达式获取cookie:
    ${cookie.loginAct.value}
    ${cookie.loginPwd.value}

安全退出

登录验证:

利用拦截器进行拦截

public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {//如果用户没有登录成功,则跳转到登录页面HttpSession session=httpServletRequest.getSession();User user=(User) session.getAttribute(Contants.SESSION_USER);if(user==null){
//在controller中可以借助框架直接重定向,在这个里边只能调用方法进行重定向//重定向时,url必须加项目的名称。这时候不在框架里,不能用视图解析器,要自己加前后缀httpServletResponse.sendRedirect(httpServletRequest.getContextPath());return false;}return true;}@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {}
}

CRM客户资源管理系统项目——系统管理功能的实现相关推荐

  1. Java Web项目源代码|CRM客户关系管理系统项目实战(Struts2+Spring+Hibernate)解析+源代码+教程

    客户关系管理 (CRM) CRM一般指客户关系管理 客户关系管理是指企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售.营销和服务上的交互,从而提升其管理方式,向客户提供创新 ...

  2. 联系人管理-客户拜访记录| CRM客户关系管理系统项目 实战七(Struts2+Spring+Hibernate)解析+源代码

    联系人管理-客户拜访记录| CRM客户关系管理系统项目 实战七(Struts2+Spring+Hibernate)解析+源代码 客户拜访记录的列表的显示, 客户拜访记录的保存, 客户拜访记录查询(条件 ...

  3. 客户管理模块(保存查询客户)| CRM客户关系管理系统项目实战二(Struts2+Spring+Hibernate)解析+源代码

    引入数据字典,配置一对多的关系 异步加载 (JSON的使用,将list集合封装为json的数据,然后删除部分数据,JSON的数据发送到前端,前端页面获取对应的数据,遍历json的数据) 数据字典(下拉 ...

  4. CRM 客户资源管理系统(三) 合同管理 订单管理

    7.6 合同订单 包括合同管理,订单管理,订单出库,合同(订单)收款四部分. 7.6.1 合同管理 合同管理主要实现对公司与客户己达成的某中利润关系进行文字的记录以便后跟踪与维护. 上图是合同管理模块 ...

  5. CRM客户关系管理系统开发第一讲——搭建开发环境

    这个小项目是我们学习完Spring,Hibernate,Struts2这三个框架后,为了加深对它们的理解所做的SSH项目,为CRM客户关系管理系统. CRM客户关系管理系统的概述 什么是CRM客户关系 ...

  6. Java项目:CRM客户关系管理系统(java+Springboot+maven+mysql)

    源码获取:博客首页 "资源" 里下载! Springboot项目CRM客户关系管理系统: 系统实现了CRM客户关系系统的基本功能,主要有看板(当月参与的业务机会.当月转化情况.将要 ...

  7. crm客户管理系统源码_公司crm客户关系管理系统的功能

    企业的最终目标是服务好客户,赢得客户的青睐.为了实现这一目标,除了扎实的产品和优秀的团队,我们还必须选择科学的管理体系来帮助企业实现这一最终目标.这个系统就是公司crm客户关系管理系统,点镜SCRM公 ...

  8. JavaWeb实训项目:基于SSM框架的CRM客户关系管理系统(文章最后有源码)

    JavaWeb实训项目:基于SSM框架的CRM客户关系管理系统(附部分源码) 一.项目背景 项目演示 二.项目介绍 三.涉及技术 总结 源码地址 一.项目背景 "世上本来没有CRM,大家的生 ...

  9. CRM客户关系管理系统主要有哪些功能?

    一.CRM客户管理系统是什么 客户关系管理(Customer Relationship Management,简称CRM),是指企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在 ...

最新文章

  1. 从pandas resample说起,然后再超越resample,通过pd.Grouper、groupby、agg
  2. 什么是802.11G协议
  3. 一篇来自前端同学对后端接口的吐槽:痛!
  4. python求助神器_python三大神器
  5. JS编程建议——52:建议使用splice删除数组
  6. 部署 Job (第四部分)
  7. 你看得懂的海明码校验和纠错原理
  8. Nginx笔记总结十一:Nginx重写规则指南
  9. 在团队中我的索引卡任务
  10. 大数据之实时数据分析之Apache Doris数据库
  11. 渗透测试工具Nmap从初级到高级
  12. 据说200G网盘资料
  13. FPGA那些事(黑金动力社区)-笔记
  14. 小程序使用video标签
  15. 网易面试总结——面试案例1~面试案例4
  16. C++初学必练基础题【第三期】
  17. php货币2019年12月31日汇率,[外汇]2019年12月31日人民币汇率中间价新公告 今日美元兑人民币行情查询 - 南方财富网...
  18. 成功解决无法写入输出文件,此实现不是Windows平台FIPS验证加密算法的一部分
  19. 《2021中国开源发展蓝皮书》发布——中国开源接近世界先进水平
  20. 哈特曼医用音叉行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)

热门文章

  1. CSP-J 2020 入门组/普及组
  2. python之逆解最大公约数与最小公倍数
  3. 让淘宝流量迅速翻倍的实用技巧
  4. 大疆Tello UDP控制协议接口
  5. 云师大计算机科学与技术,云南师范大学信息学院
  6. centos x64 7安装五笔输入法
  7. Smith Chart - for myself
  8. 爬取豆瓣读书-豆瓣成员常用的标签(Python爬虫实战)
  9. 在OpenJWeb平台中实现主动扫码(商家主动出示支付二维码)
  10. 华为鸿蒙新机2k曲面屏,华为P40系列“登场”:2K曲面屏+前后8摄,鸿蒙系统就别想了...