IDEA如何配置SSM项目--【唐诗300首】

JAVAWEB 系列文章目录

黑马B站视频JAVAWEB部分的知识范围、学习步骤-【思维导图知识范围】


银诗一宿
题西林壁
宋·苏轼
横看成岭侧成峰,远近高低各不同。
不识庐山真面目,只缘身在此山中。

SSM

JAVA技术这么多,就像诗中所提的一样,让人远近高低各不同,学来学去的真迷糊,有一些过度的技术要不要学?就比如SSM。
SSM技术是JAVAWEB技术之后的后续技术。
SSM框架是spring、spring MVC 、和mybatis框架的整合,是标准的MVC模式。标准的SSM框架有四层,分别是dao层(mapper),service层,controller层和View层。

Spring是一个英文单名词、形容词、及物动词、不及物动词,作名词时翻译为“春天;弹簧;泉水;活力;跳跃,人名;(德)施普林;(英、芬、瑞典)斯普林”,作形容词时翻译为“春天的”,作及物动词时翻译
为“使跳起;使爆炸;突然提出;使弹开”,作不及物动词时翻译为“生长;涌出;跃出;裂开”。

错了,如果你百度到这个解释那就差太多了。
spring是一个开源的Java开发框架,它提供了一种全面的解决方案,用于构建企业级应用程序。Spring框架的设计理念是基于面向对象的编程思想和松耦合的架构原则,旨在简化Java应用程序的开发,并提供可扩展性和灵活性。
在这里插入图片描述
Spring框架的核心特性包括:
1、 控制反转(IoC):Spring通过控制反转将对象的创建和管理交给框架来完成,开发人员只需关注业务逻辑的实现。这种解耦的设计模式可以降低组件之间的耦合度,提高代码的可维护性和可测试性。

在这里插入图片描述
2、 依赖注入(DI):Spring通过依赖注入将组件之间的依赖关系注入到对象中,而不是硬编码在代码中。这样可以使得组件之间的关系更加灵活,并方便进行单元测试和模块化开发。
spring会自动的把JAR里的功能加到项目里,不管你用不用得上。过于灵活,导致spring的JAR包依赖成为了一个噩梦。
注意的是,这个是SSM为啥 要升级成springBoot的重大原因
如果用升级成使用maven ,不用springBoot 这种父pom 的办法,那么初学者 把一个项目的JAR的依赖整明白,怕是黄瓜菜都凉了。关公大老爷都可以把1000多个华雄杀一个来回了。:)
在这里插入图片描述
3、 面向切面编程(AOP)
Spring提供了面向切面编程的支持,可以将横切关注点(如事务管理、安全性等)从业务逻辑中分离出来,以提高代码的模块化和重用性。
spring成名之作。SSM的时候,你可以理解为事务的最方便的实现。
springBoot的时候,你可以理解为配置类的各种妙用。
4、 组件化开发:Spring鼓励使用组件化开发的方式,通过将应用程序划分为多个独立的模块(组件),来提高代码的可重用性和可维护性。同时,Spring提供了一些开箱即用的组件(如数据访问、Web开发、消息传递等),简化了开发过程。

Mybatis

M 一般指的是mybatis.
MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。

本文介绍的项目还使用JSP的技术。非前后端分离。

JAVAWEB技术比较杂

韩顺平说:学习JAVA的人有两大难
第一困惑,JAVA能百度到的知识太多太多,完全不知道学啥
第二困惑,就是不知道以什么样的顺序去学,有的时候乱看一堆视频有遗漏,有的时候,两边的视频还有重复。
以下面的黑马的JAVAWEB的内容为例,具体参见《黑马B站视频JAVAWEB部分的知识范围、学习步骤-【思维导图知识范围】》本文最上的链接
在这里插入图片描述
要看这个JAVAWEB的范围,就必须要跟JAVA的知识范围对比一下。
下面拿出的是黑马的JAVA的一个视频的知识范围。
具体参见《黑马B站视频JAVA部分的知识与学习-【思维导图知识范围】
在这里插入图片描述
这里没有任何的一套视频能刚好满足任何人,任何学校的知识点。
那么这个学习很显然就必须要有选择的看。有选择的学习,有选择的练习。

环境及工具:

要注意的是SSM的项目刚好处于maven 的推出之际,所以有一些的SSM用的是pom.xml 引入包的方式,而有一些则是用的JAR包的方式:

本系列环境

环境win11
工具idea 2018
jdk1.8
数据库mysql5.5
maven不用
项目导入方式目录导入
数据库前端工具mysql-front (navicat 也可以)

数据库前端工具:mysql-front (navicat 也可以)
主要是这些跟PHPStudy 2018 整合了,所以有的时候懒的打开navicat
关于环境的重要性,直接看上面的《IDEA如何配置JAVAWEB项目–【唐诗300首】

项目里可能要用到的技术

JAVA

Java
编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程,Java是功能完善的通用程序设计语言,可以用来开发可靠的、要求严格的应用程序。
当编辑并运行一个Java程序时,需要同时涉及到四种方面:(1)Java编程语言(2)Java类文件格式(3)Java虚拟机(4)Java应用程序接口。使用文字编辑软件或集成开发环境(Eclipse或MyEclipse)在Java源文件中定义不同的类,通过调用类(这些类实现Java
API)中的方法来访问资源系统,把源文件编译生成一种二进制中间码,存储在class文件中,然后再通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的Java
API调用。 Java应用程序用户界面开发包
Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
工具包中所有的包都是以swing作为名称,例如javax.swing,javax.swing.event。

JSP

JSP是一种能实现动态网页的技术。Sun公司最先提倡发行,并由多家公司共同开发与完善的。JSP技术通俗来说其实就是在普通的网页HTML文件中首先加上Java程序段来实现具体功能,然后再根据需要添加JSP标记(tag)进行记录,这样二者结合就可以形成JSP文件。其功能特别强大,基本可以实现大多数动态网页所需要的各种效果。用JSP技术所开发的网页具有跨平台的特点,在不同的操作系统,例如Windows,Linux,Winxp等操作系统上都可以运行起来。在服务器端进行大部分复杂的程序操作和功能实现操作,而这些并不需要用户直接参与或操作,最后的结果通过网络传送给用户。这样就减轻了用户工作量的同时也减少了浏览器的负担。因为有些浏览器并不支持Java语言,然而这不影响功能操作的实现,同样能够登录JSP网页,达到预想效果。
Java server page(以下简称JSP)为servlet技术的简化。JSP的功用在于它实现了Html语法中以<%, %>形式的java扩张。但是,值得注意的是,因为JSP与Servlet均在服务器端运行,故而往往以HTML文本为主要形式呈现客户端面前,所以当有 需求时,客户端可以便捷地通过浏览器来实现浏览。当网页服务器(web)遇到访问JSP提出的要求时,需要进行以下两个步骤:首先执行程序段,后将结果与htlm返回,以便系统更好运行。至于为何要进行的Java代码段的插入操作,其主要目的在于进行数据库的连接、网页重定向等等,以满足网页动态实现所需的各类功能。

HTML

Html语言是一种脚本语言,是一种规范和标准,在所有的开发语言中,是较为简单易学的一种,它有很多标签,运用标签就可以实现很多静态页面效果。虽然html语言相对其他语言来说比较简单,但是他能够实现的功能却很强大,因此受到广大用户的热爱。他可以实现静态网页设计,是学习前端设计的一门基础性语言。Html的结构包括头和主体部分,是WWW的描述语言。

TOMCAT

Tomcat服务器是一个免费的应用服务器,他的封面设计以一个动物的素描为灵感,正是因为这个设计理念,所以该项目以一个英文的动物名字为项目名称。因为其免费又好用,功能强大,所以成为大多数程序员的首选。Tomcat是一个小型的,轻量级的软件产品,他在启动运行时占用非常少的内存资源和系统开销,扩展性能比较好,支持多种应用需求,如果一个开发员对某一项功能实现特别感兴趣,他就直接可以将此功能加入到其中。Tomcat可以独立运行,身为网站的服务器,可以加载动态网页。

上代码

http://localhost:8080/login
说了这么多了,还是上点正菜。
这里的JSP是通过映射 访问的。有些类似springboot 的thymeleaf 的技术。也类似于thinkphp的MVC 的方式。

package com.xdcs.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
/**
 * 用户页面访问控制器
 * @author ZYxiao
 *
 */
@Controller
public class VisitorController {
	@RequestMapping("/login")
	public String goIndex(){
		return "login";
	}
	/**
	 * 使重定向时也可以访问WEB-INF下的页面
	 * @param page
	 * @return
	 */
	@RequestMapping("/{page}")
	public String goIndex(@PathVariable String page){
		return page;
	}

}

主页

http://localhost:8080/login

地址是这个。

<%@ 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></title>
<link rel="stylesheet" type="text/css" href="js/jquery-easyui-1.4.1/themes/default/easyui.css" />
<link rel="stylesheet" type="text/css" href="js/jquery-easyui-1.4.1/themes/icon.css" />
<script type="text/javascript" src="js/jquery-easyui-1.4.1/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-easyui-1.4.1/jquery.easyui.min.js"></script>
<script type="text/javascript" src="js/jquery-easyui-1.4.1/locale/easyui-lang-zh_CN.js"></script>
<style type="text/css">
	body {
		background-image: url("img/bg.jpg");
		background-repeat: no-repeat;
		background-size:cover;
	}
	#logdiv{
		text-align:center;
		width:350px;
		margin-left: 850px;
		margin-top: 200px;
		border: 5px solid whitesmoke;
		padding: 30px 0;
	}
	#logbtn{
		background-color: #3385FF;
	}
}
</style>
<script>
	var code = "";
	//验证手机号
	function isPhoneNo(phone) { 
		 var pattern = /^1[34578]\d{9}$/; 
		 return pattern.test(phone); 
	}
	/* 定时器 */
	var iTime = 60;
	var Account;
	function RemainTime(){
		$("#codebtn").linkbutton("disable");
		if (iTime >= 0){
			if(iTime==0){
				clearTimeout(Account);
				iTime = 60;
				code="";
				$("#timeSpan").html('获取验证码');
				$("#codebtn").linkbutton("enable");
			}else{
				$("#codebtn").linkbutton("disable");
				Account = setTimeout(RemainTime,1000);
				iTime=iTime-1;
				$("#timeSpan").html("("+iTime+")");
			}
			
		}
	}	
	function get_mobile_code(){
		var tel = $("#uTel").val();
		if(isPhoneNo(tel)){
			RemainTime();
	        $.post('message', {'mobile':jQuery.trim(tel)}, function(res) {
				code = res;
				console.log(res);
	        });
		}else{
			$.messager.alert("提示","输入的手机号不合法");
		}
	};
	function submitForm(){
		var inp = $("#codeInp").val();
		var tel = $("#uTel").val();
		if(tel==null||tel==""){
			$.messager.alert("提示","手机号不能为空");
			return;
		}
		if(inp==null||inp==""){
			$.messager.alert("提示","验证码不能为空");
			return;
		}
		// if(code != inp){
		// 	$.messager.alert("提示","验证码不正确");
		// 	return;
		// }
		$("#loginForm").form('submit', {
			url: "userLogin",
			success: function(){
				window.location.href="index";	// 如果提交成功则隐藏进度条
			}

		});
	}
</script>
</head>
<body>
	${noUser}
	<div id="logdiv">
		<form id="loginForm">
		<span style="color:white">手机号:</span>&nbsp;&nbsp;<input id="uTel" class="easyui-textbox" data-options="iconCls:'icon-man'" name="uTel" style="width:230px;height:35px"/><br /><br />
		<span style="color:white">验证码:</span>&nbsp;&nbsp;<input id="codeInp"  class="easyui-textbox" style="width:140px;height:35px" />
		<a id="codebtn" href="javascript:void(0);" class="easyui-linkbutton" style="width:80px;height:35px" onClick="get_mobile_code();"><span id="timeSpan">获取验证码</span></a> <br /><br />
		<a id="logbtn" href="javascript:void(0);" class="easyui-linkbutton"style="width:290px;height:35px" onClick="submitForm();">登录</a>
	</form>
	</div>
	
</body>
</html>

再看登 陆的这个后台代码

package com.xdcs.web.controller;

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 用户登录Controller
 * @author Administrator
 */
@Controller
public class UsersLoginController {
	@RequestMapping("userLogin")
	@ResponseBody
	public String userLogin(String uTel,HttpSession session){
		session.setMaxInactiveInterval(60*60*24);
		session.setAttribute("uTel", uTel);
		return "ok";
	}
}

这里的后台返回OK之后,就回到了login.jsp 里的AJAX里。
然后,跳到/index 的路径。

在这里插入图片描述
这样,又映射到了 index.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>
<title>EasyUI</title>
<link rel="stylesheet" type="text/css" href="js/jquery-easyui-1.4.1/themes/default/easyui.css" />
<link rel="stylesheet" type="text/css" href="js/jquery-easyui-1.4.1/themes/icon.css" />
<script type="text/javascript" src="js/jquery-easyui-1.4.1/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-easyui-1.4.1/jquery.easyui.min.js"></script>
<script type="text/javascript" src="js/jquery.edatagrid.js"></script>
<script type="text/javascript" src="js/datagrid-detailview.js"></script>
<script type="text/javascript" src="js/jquery-easyui-1.4.1/locale/easyui-lang-zh_CN.js"></script>
<script src="js/highcharts.js"></script>
	<script type="text/javascript">
		$(function(){
			$("#tt").tree({
				onClick:function(node){
					var flag = $("#tt").tree("isLeaf",node.target);
					var flag2=$("#tab").tabs("getTab",node.text);
					if(flag){
						if(!flag2){
							$('#tab').tabs('add',{    
							    title:node.text,    
							    href:node.url,
							    closable:true  
							});
						}else{
							$("#tab").tabs("select",node.text);
						}
					}
				},
			});
		});
	</script>
</head>
<body class="easyui-layout">
	<div data-options="region:'north',title:'仓库管理',split:true" style="height: 100px;">
			<h2>学到猝死-仓库管理系统</h2>
	</div>
	<div data-options="region:'south',title:'版权声明',split:true" style="height: 100px;">
		<h2 align="center">XDCS</h2>
	</div>
	<div data-options="region:'west',title:'菜单',split:true" style="width: 200px;">
		<ul id="tt" class="easyui-tree" data-options="animate:'true'">
			<li data-options="animate:'true',state:'closed'"><span>基本信息管理</span>
				<ul>
					<li data-options="url:'customer'">客户信息</li>
					<li data-options="url:'supplier'">供货商信息</li>
					<li data-options="url:'employee'">仓库员工信息</li>
				</ul>
			</li>
			<li data-options="animate:'true',state:'closed'"><span>入库管理</span>
				<ul>
					<li data-options="url:'showAllInList'">查看入库单</li>
				</ul>
			</li>
			<li data-options="animate:'true',state:'closed'"><span>出库管理</span>
				<ul>
					<li data-options="url:'showAllOutList'">查看出库单</li>
				</ul>
			</li>
			<li data-options="animate:'true',state:'closed'"><span>系统设置</span>
				<ul>
					<li data-options="url:'repertory'">仓库信息</li>
					<li data-options="">备份和还原数据</li>
				</ul>
			</li>
			<li data-options="animate:'true',state:'closed'"><span>在库管理</span>
				<ul>
					<li data-options="url:'goods'">管理在库的物品</li>
					<li data-options="url:'showCharts'">记录盘点信息</li>
				</ul>
			</li>
			<li data-options="animate:'true',state:'closed'"><span>退货信息管理</span>
				<ul>
					<li data-options="url:'showAllBackList'">我要退货</li>
					<li data-options="url:'showMyBackList'">接收退货</li>
				</ul>
			</li>
			<li data-options="animate:'true',state:'closed'"><span>报表信息管理</span>
				<ul>
					<li data-options="url:'excel'">打印报表</li>
					<li data-options="">查看报表</li>
				</ul>
			</li>
		</ul>
	</div>
	<div id="tab" class="easyui-tabs" data-options="region:'center',closable:true">
	</div>
</body>

串成一个图就是这样的。
1 浏览器输出login地址。
2 后台有一个controller 截到了这个请求。
这个类把这个请求转发给了login.jsp 页面。
3 用户在页面里点击了登陆。
4 后台正确的返回了Ok。回到ajax 里。
5 ajax 转发至/index 的这个地址。
6 后台的类再次截到了这个请求 ,然后转发至index.jsp 的这个页面上。
在这里插入图片描述
有人可能就感觉奇怪了,为啥不直接跳到jsp 的页面上,而是要到后台绕这么一圈呢?
1 JSP页面,放在WEB-INF 下面安全,黑客访问不到。
2 经过了这么一个后台的类,让很多的不良请求都自动死掉。
就这么一个小小的改进,当时SSM就轻松的获得了最安全框架的称号。
当然了,性能的损失也是比较大的。
这么安全的框架技术,springBoot 自然也是直接就继承了。所以,默认的情况下,template 里的内容也是不允许访问的,也是在controller 里这样绕一圈。
这里还可以参考《SpringBoot项目中MVC使用–【JSB系列之010】

再给一下项目里的各配置。

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
lib 下的JAR包要引入进来!
在这里插入图片描述
WEB目录的设置,注意的是不是默认。
看好了web.xml的位置。还有就是web根目录的位置。
在这里插入图片描述
这个界面里的一般idea 会有提示,你直接确定就可以了。
运行Tomcat必须的。
在这里插入图片描述

跑起来

这里先配置一个tomcat 的服务器,按下图的即可。
在这里插入图片描述

访问如下的URL:
http://localhost:8080/login

浏览器界面

验证码随意填。手机号合法即可。如:18123459876
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
项目里的细节也比较多,等到下一文里再讲解吧。

好,一步成功点亮,关电,拉闸,领盒饭!走人。

总结

提示:IT是一个要多动手的职业,一定要多练不要贪快:
SSM是一个历史上的辉煌一刻,是现在的springBoot 的基础,springBoot 其实,仅仅是把SSM的JAR包的问题简化了,事实上,各种的思想都还在。spring 还是那个spring。SpringMVC 还是那个 SpringMVC 。

配套资源

IDEA如何配置SSM项目–【唐诗300首】
https://download.csdn.net/download/dearmite/88191978

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

项目花园范德彪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值