其实我们昨天的项目也已经初步整合的三个框架,只差最后一步就是对应的控制器controller编写,以及数据传值等。各位读者可以自己去尝试一下,那么我们今天要进行全新的Web项目开发。
有以下几个选题:
1.超市订单管理系统(先开发这个,将前面学过的全部知识都串起来)
2.学生信息管理系统
3.二手书店售卖系统
(我都会发出文章来讲解整个项目,帮助读者中的各位初学者从0到1的完成整个项目)
运行环境: 该系统需要以下运行环境:
项目背景:随着电子商务的快速发展和消费者对在线购物的需求不断增加,超市和零售店铺也需要适应这一变化。传统的超市和零售业务已经意识到,在线订单管理系统是提高效率、满足客户需求以及扩展市场份额的重要工具。这个背景下,我们创建了基于SSM技术栈的超市订单管理系统,该系统的目标是为超市提供一个全面的解决方案,使其能够适应市场变化,提高竞争力,并在数字化时代保持竞争力。
项目简介: 基于SSM(Spring + Spring MVC + MyBatis)技术栈开发的超市订单管理系统,旨在帮助开发者和学习者了解如何使用SSM框架构建复杂的企业级Web应用程序。通过学习这个资源,您将深入了解订单管理系统的设计、开发和部署过程,以及如何应用SSM框架来实现各种功能和特性。
应用场景: 该超市订单管理系统适用于各种零售业和电子商务应用场景,包括但不限于:
第一天目标:
这些都是前面我们有讲过的,那么这就开始今天的任务吧。
新建完的项目是这样的,其他依赖和配置文件全无。
这里的话,除了一些框架依赖的版本跟我们昨天的不一致,其他的大致都相同,代码如下
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>org.examplegroupId>
<artifactId>SuperMarketartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>warpackaging>
<build>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
<filtering>truefiltering>
resource>
resources>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.8.1version>
<configuration>
<source>1.8source>
<target>1.8target>
configuration>
plugin>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
<configuration>
<port>8080port>
<path>/path>
<uriEncoding>UTF-8uriEncoding>
<server>tomcat7server>
configuration>
plugin>
plugins>
build>
<properties>
<project.build.sourceEncoding>GBKproject.build.sourceEncoding>
properties>
<dependencies>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.2version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.11version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>compilescope>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>5.2.8.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>5.2.8.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.2.8.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-expressionartifactId>
<version>5.2.8.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>5.3.19version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.3.19version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatis-springartifactId>
<version>2.0.1version>
dependency>
<dependency>
<groupId>commons-logginggroupId>
<artifactId>commons-loggingartifactId>
<version>1.2version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aopartifactId>
<version>5.2.8.RELEASEversion>
dependency>
<dependency>
<groupId>org.aspectjgroupId>
<artifactId>aspectjrtartifactId>
<version>1.9.1version>
dependency>
<dependency>
<groupId>org.aspectjgroupId>
<artifactId>aspectjweaverartifactId>
<version>1.9.6version>
dependency>
<dependency>
<groupId>commons-poolgroupId>
<artifactId>commons-poolartifactId>
<version>1.6version>
dependency>
<dependency>
<groupId>commons-dbcpgroupId>
<artifactId>commons-dbcpartifactId>
<version>1.4version>
dependency>
<dependency>
<groupId>org.apache.commonsgroupId>
<artifactId>commons-dbcp2artifactId>
<version>2.0.1version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.2.8.RELEASEversion>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.servlet.jspgroupId>
<artifactId>jsp-apiartifactId>
<version>2.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.apache.taglibsgroupId>
<artifactId>taglibs-standard-specartifactId>
<version>1.2.5version>
dependency>
<dependency>
<groupId>org.apache.taglibsgroupId>
<artifactId>taglibs-standard-implartifactId>
<version>1.2.5version>
dependency>
dependencies>
project>
编写完成以后,记得要刷新maven引入依赖文件。
例如mybatis-config.xml、springmvc-servlet.xml、spring-config.xml、web.xml、log4j.properties、db.properties等
这里创建webapp文件夹和其他的配置文件前面的文章都有,想要了解的可以去看。
嫌麻烦的可以直接下载项目资源文件,里面都是配套好的了,并且写上了注释帮助理解。
如图,基本的项目结构是这样的,记得这里的配置文件,要根据自己的项目配置进行修改。
简单运行一下项目,查看一下是否部署成功
然后再重新运行Maven插件就可以运行起tomcat服务了,但是这里先缓缓,等会再进行。
这里我们除了controller包下新建了一个UserController控制器,其他都还是空包。
先创建一个控制器,看看前后端的传值测试,能不能正常的根据预期网址映射跳转出我们想要的页面。
PS:这里要注意我们的包结构要与springmvc-servlet.xml中设置的扫描包结构一致
不然后面报错就会提示找不到controller
UserController代码如下:
package com.steveDash.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {
@RequestMapping("/default")
public String hello(){
System.out.println("访问到Controller");
return "default";
}
}
再根据我们pom设置好的tomcat插件配置如下:
俩者组合起来:我们的预期网址就是http://localhost:8080/SuperMarket/deafult,即可访问我们的default页面。
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/9/13
Time: 16:53
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
SSM项目开发的第一天
你好呀,Stevedash的各位读者
点击进行Java学习
这样子就可以了。
前面的文章也是有详细讲解的,这里就不讲了。直接运行
然后在这个终端往上面翻一下,就可以看到部署后的起始网址了,也有根路由这一说法。
这里直接点击跳转,就是我们部署起来的根网址路由了。看着是不是跟我们前面预期的一样?
这里的话很正常,因为我们还没有进行传值,所以没办法定位到我们想要跳转的页面,所以显示404。但是呢,我们前面写了一个测试的controller,那就是default,输入进行测试看看
可以看到这跟我们预期的是一毛一样,那么说明部署正确。因此,到这里的话呢,任务一:使用Maven方式创建Web项目已经完成,并且项目能够正常启动部署在tomcat上了。
那么如何进行一个前后端传递值呢?在项目开发中很多的时候需要用输入框,然后用POST方式向后端传值。就是典型的搜索框,请输入xxx然后搜索,那我们就来进行一个简单的传值操作。
代码如下:
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/9/13
Time: 19:22
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
搜索页面
这里代码稍微解释一下:form标签说明这是一个表单,action指的是点击按钮后转向的网址,这里${pageContext.request.contextPath}
表示的是网址根目录/根路由,/dosearchUser
表示点击搜索提交后转向的页面。
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/9/13
Time: 20:06
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
接收展示信息页面
你要查找的用户${username}在2班
${username}用来接收传递过去来的username这个属性的值。
@RequestMapping("/searchUser")
public String search(){
System.out.println("欢迎访问搜索页");
return "searchUser";
}
@RequestMapping("/dosearchUser")
public String searchUser(@RequestParam("username") String username, Model model){
System.out.println("用户想要查询的用户名是:"+username);
model.addAttribute("username",username);//把值放到model中传到前端
return "result";
}
这里的代码意思是:
这段代码是一个简单的Spring MVC控制器,它接受用户的HTTP请求,处理请求中的参数,然后返回相应的视图。在搜索页面上,用户输入用户名,然后点击按钮,该用户名将作为参数传递到searchUser()
方法中,在result
视图中显示出来。
@RequestParam
是Spring MVC注解,用于从HTTP请求中获取参数的值。在这里,它从请求中获取名为"username"的参数,并将其存储在username
变量中
Model
是Spring MVC框架提供的一个对象,用于向视图传递数据。在这里,model.addAttribute("username", username)
将username
的值存储在模型中,以便在视图中使用。
其他传值也是基本上一样的。这里的话还有一个小知识点:web.xml中我们设置了一部分代码用于识别资源文件和处理解决表单中文乱码的问题。
那顺便再讲一个吧,我们前面在web.xml中设置了一个默认的页面展示,就是将打开网站的根目录替换成我们想要展示的一个页面。
这里的话呢,因为我们的default.jsp是在pages文件夹下的,因此没办法找到。
所以我们要修改一下路径:
文件的路径对应起来,然后重新运行服务就可以看到变化了。
已经修改成功了。
好这里的话,就正常开始了项目开发。实现登录功能之外,还得要制作出精美的登录页面,这里涉及到前端的网页技术,就不细讲,前端有很多模板可以直接套用的。所以可以自己创作出属于自己的UI设计。
如图:与WEB-INF在同一级目录中
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/9/13
Time: 22:25
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
系统登录 - 超市订单管理系统
超市订单管理系统
可以看到我们这里为了页面的美观,引用了statics中的一些CSS样式。
@RequestMapping(value="/login")
public String showLoginPage(){
System.out.println("进入登录页面");
return "login";
}
@RequestMapping(value="/dologin")
public String doLogin(@RequestParam("userCode") String userCode, @RequestParam("userPassword") String userPassword, Model model, HttpSession session){
//读取用户和密码
System.out.println("帐号和密码是"+userCode+"-"+userPassword);
if(userCode.equals("stevedash")&&userPassword.equals("123")){
session.setAttribute("userCode",userCode);//添加session值
return "welcome"; //密码正确就去welcome.jsp
}else{
//登录失败就回到login.jsp
model.addAttribute("error", "用户名或密码不正确");
return "login";
}
}
代码解释:
/login
映射:/login
映射用于展示登录页面。
/dologin
映射:通常,/dologin
映射用于处理用户的登录请求。
上面的方法用于处理用户提交的登录表单,验证用户名和密码。如果验证成功,可以执行登录操作并重定向到welcome页面。如果验证失败,可以返回登录页面并且显示错误信息error。
这里我们使用了Session,是为了在网页中使用全局变量Session,让后面其他的页面也能使用到用户名这些全局变量。
这里我们进行简单操作,因为读取用户和密码要对照数据库进行读取,要涉及到spring+mybatis的整合,因此现在先简单处理,完成页面的正确转向,再完善业务逻辑。
welcome是我们登录成功后的展示页面,因此需要制作精美点,不可以太简约简单。良好的用户体验也是一个合格项目的标准。
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/9/13
Time: 22:41
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="/WEB-INF/pages/common/head.jsp"%>
${sessionScope.userCode}
欢迎来到超市订单管理系统!
<%@include file="/WEB-INF/pages/common/foot.jsp" %>
代码解释:
我们这里使用了<%@include file=" "%>
,通过这种方式,把通用的页面部分head头部页面和foot底部页面嵌入到我们的主页面中,实现代码的重用和维护的便利性。这对于保持页面的一致性和减少代码冗余非常有用。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
,表示设置该JSP页面的内容类型(contentType
),语言(language
)以及字符编码(charset
)。
这部分设置了页面的内容类型为HTML(text/html
),并指定了字符编码为UTF-8。这意味着该JSP页面将生成HTML内容,并使用UTF-8字符编码,这是一种常用于处理多语言字符的编码方式
。
有助于确保生成的HTML页面在浏览器中正确地呈现,并且字符编码正确处理
,以避免出现乱码
等问题。这是编写符合国际化和多语言要求的JSP页面时常见的设置。
foot.jsp代码如下:
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/9/13
Time: 23:03
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>