[手把手教程][JavaWeb]优雅的SpringMvc+Mybatis应用(一)

SSM_用户登录注册,管理员查改删用户(spring+springmvc+mybatis),学习了一个学期写出来的 时间:2019年6月20日 一、 SSM框架的简单介绍应用 1.1、Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的Ja... 阅读详情

工具

  • IDE为idea16
  • JDK环境为1.8
  • maven版本为maven3
  • gradle构建,版本:2.14.1
  • Mysql版本为5.5.27
  • Tomcat版本为7.0.52
  • 流程图绘制(xmind)

本期目标

  • java学习交流qun:925895158
  • 简单更改项目的构建工具
  • 列表分页
  • 简易用户角色控制
  • 拦截器的使用

简单更改项目的构建工具

最近发现电脑突然变得很卡,所以专门把系统清理,顺带把Idea升级为16。接着事情就来了,发现在idea16里面能把项目升级为gradle构建,一番升级后,项目突然不能运行==,那么问题来了。整了半天也没发现问题所在,百度、谷歌也没找到答案,然后放出大招:

  • 新建同样包名和项目名称的gradle构建的web工程
  • 把上一个项目中gradle自动生成的build.gradle中的支援库代码拷贝下来,如下:
  • java学习交流qun:925895158

 

compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.1.1'
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.6'
compile group: 'com.alibaba', name: 'druid', version: '1.0.25'
compile group: 'org.mybatis', name: 'mybatis', version: '3.4.1'
compile group: 'org.mybatis', name: 'mybatis-spring', version: '1.3.0'
compile group: 'taglibs', name: 'standard', version: '1.1.2'
compile group: 'jstl', name: 'jstl', version: '1.2'
compile group: 'com.google.code.gson', name: 'gson', version: '2.7'
compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
compile group: 'org.springframework', name: 'spring-core', version: '4.3.2.RELEASE'
compile group: 'org.springframework', name: 'spring-beans', version: '4.3.2.RELEASE'
compile group: 'org.springframework', name: 'spring-context', version: '4.3.2.RELEASE'
compile group: 'org.springframework', name: 'spring-jdbc', version: '4.3.2.RELEASE'
compile group: 'org.springframework', name: 'spring-tx', version: '4.3.2.RELEASE'
compile group: 'org.springframework', name: 'spring-web', version: '4.3.2.RELEASE'
compile group: 'org.springframework', name: 'spring-webmvc', version: '4.3.2.RELEASE'
compile group: 'org.springframework', name: 'spring-test', version: '4.3.2.RELEASE'
compile group: 'redis.clients', name: 'jedis', version: '2.7.3'
compile group: 'com.dyuproject.protostuff', name: 'protostuff-core', version: '1.0.8'
compile group: 'com.dyuproject.protostuff', name: 'protostuff-runtime', version: '1.0.8'
compile group: 'commons-collections', name: 'commons-collections', version: '3.2.2'
compile group: 'commons-fileupload', name: 'commons-fileupload', version: '1.3.2'
compile group: 'commons-io', name: 'commons-io', version: '2.5'
runtime group: 'mysql', name: 'mysql-connector-java', version: '5.1.37'
//关于具体的gradle构建,请百度一下。 一般来说在maven仓库里面有gradle引用的代码的,直接拷贝就行
//可能我们的gradle构建包很难下载,建议直接用迅雷去下载对应的gradle版本,然后把gradle的压缩包放到我们程序的下载目录就可以了。

等项目构建完成后,我们把以前的项目直接把源码和资源文件什么的都直接拷贝过来,对应着目录就行了,然后接着build项目,最后就可以了。

角色控制

前面和读者交流了一下,他们建议在项目中加入角色控制。好吧,我们先看看简单的角色控制。

角色控制,顾名思义就是不同的用户角色依赖于他的身份属性而做出具体的行为控制。具体的行为控制,往往取决于用户界面的操作。而还有一些更加复杂的东西,我们在以后的项目实战中再来阐述。

在这个项目中,我们用户的角色分为以下几类:

  • 超级管理员
  • 出入库人员
  • 仓库管理人员
  • 台账管理(账单汇总)

按照我们以前开发的一些经验来说,我们大概解决方法有下面的几种:

用户访问路径举例说明
前端页面设定路径网页顶部的导航栏的操作跳转
后端接口控制路径不同职位的用户登录后显示的界面

前端界面设置路径,也就是一个a标签写入地址为:http://acheng1314.cn 这样就能实现跳转。

后端接口控制路径,我们还是拿登录接口来说,我们在用户类中加入一个nextUrl字段,说明是下一步的地址,然后我们在控制器中完成写入,如下:

 

微xuanwo013 java架构基础资料
/**
 * 用户请求相关控制器
 * <br/>Created by acheng on 2016/9/26.
 */
@Controller
@RequestMapping("/userAction")
public class UserController {

    @Autowired
    private UserServiceImpl userService;    //自动载入Service对象
    private ResponseObj responseObj;

    /**
     * 为什么返回值是一个ModelAndView,ModelAndView代表一个web页面<br/>
     * setViewName是设置一个jsp页面的名称
     *
     * @param response http响应
     * @param user     发起请求后,spring接收到请求,然后封装的bean数据
     * @return 返回一个web页面
     * @throws Exception
     */
    @RequestMapping(value = "/reg"
            , method = RequestMethod.POST
            , produces = "application/json; charset=utf-8")
    @ResponseBody
    public Object reg(HttpServletRequest request, HttpServletResponse response, User user, HttpSession session) throws Exception {
        Object result;
        responseObj = new ResponseObj<User>();
        if (null == user) {
            responseObj.setCode(ResponseObj.FAILED);
            responseObj.setMsg("用户信息不能为空!");
            result = new GsonUtils().toJson(responseObj);
            return result;
        }
        if (StringUtils.isEmpty(user.getLoginId()) || StringUtils.isEmpty(user.getPwd())) {
            responseObj.setCode(ResponseObj.FAILED);
            responseObj.setMsg("用户名或密码不能为空!");
            result = new GsonUtils().toJson(responseObj);
            return result;
        }
        if (null != userService.findUser(user)) {
            responseObj.setCode(ResponseObj.FAILED);
            responseObj.setMsg("用户已经存在!");
            result = new GsonUtils().toJson(responseObj);
            return result;
        }
        try {
            userService.add(user);
        } catch (Exception e) {
            e.printStackTrace();
            responseObj.setCode(ResponseObj.FAILED);
            responseObj.setMsg("其他错误!");
            result = new GsonUtils().toJson(responseObj);
            return result;
        }
        responseObj.setCode(ResponseObj.OK);
        responseObj.setMsg("注册成功");
        user.setPwd(session.getId());   //单独设置密码为sessionId 误导黑客,前端访问服务器的时候必须有这个信息才能操作
        user.setNextUrl(request.getContextPath() + "/mvc/home");    //单独控制地址
        responseObj.setData(user);
        session.setAttribute("userInfo", user); //将一些基本信息写入到session中
        result = new GsonUtils().toJson(responseObj);
        return result;
    }

    /**
     * 登录接口
     *
     * @param request
     * @param user
     * @return
     */
    @RequestMapping(value = "/login"
            , method = RequestMethod.POST
            , produces = "application/json; charset=utf-8")
    @ResponseBody
    public Object login(HttpServletRequest request, HttpServletResponse response, User user, HttpSession session) throws Exception {
        Object result;
        if (null == user) {
            responseObj = new ResponseObj<User>();
            responseObj.setCode(ResponseObj.EMPUTY);
            responseObj.setMsg("登录信息不能为空");
            result = new GsonUtils().toJson(responseObj);
            return result; //返回json
        }
        if (StringUtils.isEmpty(user.getLoginId()) || StringUtils.isEmpty(user.getPwd())) {
            responseObj = new ResponseObj<User>();
            responseObj.setCode(ResponseObj.FAILED);
            responseObj.setMsg("用户名或密码不能为空");
            result = new GsonUtils().toJson(responseObj);
            return result;
        }
        //查找用户
        User user1 = userService.findUser(user);
        if (null == user1) {
            responseObj = new ResponseObj<User>();
            responseObj.setCode(ResponseObj.EMPUTY);
            responseObj.setMsg("未找到该用户");
            result = new GsonUtils().toJson(responseObj);
        } else {
            if (user.getPwd().equals(user1.getPwd())) {
                user1.setPwd(session.getId());
                user1.setNextUrl(request.getContextPath() + "/mvc/home");
                responseObj = new ResponseObj<User>();
                responseObj.setCode(ResponseObj.OK);
                responseObj.setMsg(ResponseObj.OK_STR);
                responseObj.setData(user1);
                session.setAttribute("userInfo", user1);
                result = new GsonUtils().toJson(responseObj);
            } else {
                responseObj = new ResponseObj<User>();
                responseObj.setCode(ResponseObj.FAILED);
                responseObj.setMsg("用户密码错误");
                result = new GsonUtils().toJson(responseObj);
            }
        }
        return result;
    }

}

我们前端接收到具体的json数据后,我们解析json数据,并实现相关功能,如下:

 

    function webLogin() {
        if (checkLoginInfo()) {
            var loginname = $("#u").val();
            var password = $("#p").val();
            $.ajax({
                type: "POST",
                url: '<%=request.getContextPath()%>/userAction/login',
                data: {loginId: loginname, pwd: password},
                dataType: 'json',   //当这里指定为json的时候,获取到了数据后会自己解析的,只需要 返回值.字段名称 就能使用了
                cache: false,
                success: function (data) {
                    if (data.code == 1) {
                        window.location.href = data.data.nextUrl;   //这里拿到服务器返回的地址,然后进行跳转操作
                    } else {
                        alert(data.msg);
                        $("#u").focus();
                    }
                }
            });
        }
    }
    
    //其他前端的相关代码省略,具体详情,请查看我们的放出的源码包。

拦截器的使用

首先,在我们的spring-web.xml中配置拦截器,整体代码如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
    <!-- 配置SpringMVC -->
    <!-- 1.开启SpringMVC注解模式 -->
    <!-- 简化配置:
        (1)自动注册DefaultAnootationHandlerMapping,AnotationMethodHandlerAdapter
        (2)提供一些列:数据绑定,数字和日期的format @NumberFormat, @DateTimeFormat, xml,json默认读写支持
    -->
    <mvc:annotation-driven/>
    <!-- 2.静态资源默认servlet配置
        (1)加入对静态资源的处理:js,gif,png
        (2)允许使用"/"做整体映射
     -->
    <mvc:resources mapping="/css/**" location="/static/css/"/>
    <mvc:resources mapping="/images/**" location="/static/images/"/>
    <mvc:resources mapping="/view/**" location="/static/view/"/>
    <mvc:resources mapping="/js/**" location="/static/js/"/>
    <mvc:resources mapping="/fonts/**" location="/static/fonts/"/>
    <mvc:default-servlet-handler/>

    <!-- 访问拦截  -->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**/**"/>
            <bean class="cn.acheng1314.intercepter.LoginHandlerInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

    <!-- 3.配置jsp 显示ViewResolver -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10000000"/>
    </bean>

    <!-- 4.扫描web相关的bean -->
    <context:component-scan base-package="cn.acheng1314.mvc">
        <!-- 制定扫包规则 ,只扫描使用@Controller注解的JAVA类 -->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

</beans>

具体的拦截器代码如下,因为我们已经在代码中加入了注释,所以不需要再次说明什么东西之类的。

 

package cn.acheng1314.intercepter;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class LoginHandlerInterceptor extends HandlerInterceptorAdapter {
    String NO_INTERCEPTOR_PATH = ".*/((login)|(reg)|(logout)|(code)|(app)|(weixin)|(static)|(main)|(websocket)).*";    //不对匹配该值的访问路径拦截(正则)

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // TODO Auto-generated method stub
        String path = request.getServletPath();
        if (path.matches(NO_INTERCEPTOR_PATH)) {    //匹配正则表达式的不拦截
            return true;
        } else {    //不匹配的进行处理
            try {
                if (request.getSession().getAttribute("userInfo") == null) { //session中是否存在用户信息,不存在则是未登录状态
                    response.sendRedirect(request.getContextPath() + "/mvc/login");
                    return false;
                }
            } catch (IOException e) {
                response.sendRedirect(request.getContextPath() + "/mvc/login");
                e.printStackTrace();
                return false;
            }
        }
        return true;    //默认是不拦截···当然具体的还看一些需求设计啊  之类的
    }

}

看了下时间,已经是四点过了,今天只能先这样,这两天补一篇列表分页。这段时间很忙,快要毕业了,老师也找做东西,以前的团队项目做不过来也找我,然后还在准备考研的事情咨询,很多很多,望大家理解下,该做的事情,一定会完成,另外以后我们尽量缩短篇幅,但是,更多的是多次发文章,这样的话,相对来说感觉可能稍微舒服点。


总结:

  • springMvc拦截器的基本使用
  • 简单的过滤器可以拦截简单的非法请求,防止越界操作
  • gradle比maven更加方便配置
  • 角色控制的简单实现方式

 

SpringBoot Web开发完全指南:从基础到高级实战 SpringBoot是Pivotal团队基于Spring框架推出的全新框架,旨在简化Spring应用的初始搭建和开发过程。其核心优势包括自动配置、起步依赖、命令行界面和生产级监控功能。与传统Spring相比,SpringBoot采用约定优于配置的方式,自动管理依赖,并内置服务器,支持直接运行可执行JAR文件。创建SpringBoot项目可通过Spring Initializr、IDE或命令行完成,基础代码结构包括主启动类、控制器层、服务层和数据访问层。 阅读详情

相关推荐

分享一套java基于SSM(spring+springMVC+MyBatis)开发的仓库管理系统

分享一套java基于SSM(spring+springMVC+MyBatis)开发的仓库管理系统。 写在前面的话,评论中说的图片显示问题解决了,原因是文件被拦截了,感谢帮忙解决问题的同学!) 基于SSM(spring+springMVC+MyBatis)技术开发的仓库管理系统,是我这学期期末综合课设项目,新鲜热乎,用的是:eclipse+Tomcat8+mysql+jdk1.8,里面有项目源文件直接导入即可,还有数据库sql文件,还有课程设计报告。系统的功能都好用,如果有啥疑问可以跟我私信。 推荐一下这个课设的姊妹篇-------------基于SSH(struts-spring-hibernate)开发的学生成绩管理系统,https://download.youkuaiyun.com/download/qq_33654685/10850113 本系统为仓库管理系统,系统功能较为基础,同时操作又比较简单。系统开发的总体任务是实现基础的供应商管理模块、经销商管理模块、商品管理模块、库存管理模块、订货单管理模块、出库单管理模块。 供应商管理模块:为管理员提供实现对供应商信息的管理维,包括对供应商的查询、添加、修改和删除等操作。 经销商管理模块:为管理员提供实现对经销商信息的管理维,包括对供应商的查询、添加、修改和删除等操作。 商品管理模块:为管理员提供实现对商品信息的管理维,包括对商品的查询、添加、修改和删除出库等操作; 库存管理模块:为管理员提供实现对库位信息的管理维,包括对库位信息的查询、添加、修改和删除等操作; 订货单管理模块:为管理员提供实现对订货单信息的管理维,包括对订货单信息的查询、添加、修改和删除等操作; ---------------------------------------------分割线--------------- 评论中说的图片显示问题解决了,原因是文件被拦截了,css调用的时候掉不到资源,自带的字体库找不到,调用不了,就变成那个方框框了 需要在web.xml配置下就行,加入以下代码。感谢帮忙解决问题的同学! java ssm 仓库管理系统 java课设

Spring Web MVC介绍及详细教程

MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分。本文总结了Spring MVC从概念到使用的大致用法,包括建立连接、参数获取、数据响应。

关关的博客 3742

基于javaweb的档案管理系统+Spring+SpringMVC+MyBatis

项目基于javaweb,jar都是maven下面的,采用的mvc的设计模式,是本人的毕业设计,数据库牵扯到档案的信息,所以没有上传。

Spring框架——springweb(一篇包会)

本篇是有关spring框架中有关springweb部分知识的详细介绍。

2301_78341216的博客 3657

【Python 实战基础】如何绘制热力图来模拟绘制北京景区热度图

Python如何绘制热力图来模拟绘制北京景区热度图 文件读写 基础语法 字符串处理 文件生成 数据构建

菜鸟实战的博客 3403

kaggle——信用卡欺诈检测项目实战

笔记第一步:了解题目,确定任务第二步:场景分析第三步:数据预处理看是否有缺失值查看样本类别分布数据不均衡解决办法数据值标准化/归一化第四步:特征工程1)查看特征分布情况,把不同类别下特征分布相差不大的特征删除掉2)特征缩放第五步:模型训练处理不平衡样本交叉验证求取最好的模型参数第六步:模型评估使用下采样数据训练与测试使用下采样数据训练与测试(不同的阈值对结果的影响)使用下采样数据训练,原始数据进行测试原始数据进行K折交叉验证使用原始数据进行训练和测试查看ROC曲线逻辑回归阈值选择过采样总结 第一步:了解题目

weixin_45942265的博客 1万+

【JavaEE】(13) Spring Web MVC 入门

但是现在为了提高开发效率,Spring Web 中直接没有 View 这一部分了,View 是前端的任务,我们负责的只是 Controller 和 Model:浏览器访问一个地址,能够调用我们的 Sring 程序。获取到浏览器传入的参数。执行业务逻辑后,把结果返回给浏览器。HTTP 协议是“无状态”的,即没有记忆,客户端和服务器的通信数据,在下一次是记不住的。我们就可以用Cookei/Session 搭配,让 HTTP 协议能够将多次的通信联系起来。

2401_86272648的博客 985

【技术纵览】行为识别前沿模型演进:从CNN到多模态大模型

本文全面解析了行为识别技术从CNN到多模态大模型的演进历程,重点介绍了SlowFast、TimeSformer、VideoMAE和InternVideo等SOTA模型的核心创新与应用实践。通过对比分析各代模型在Kinetics-400等数据集上的表现,揭示了自监督学习和多模态融合如何推动行为识别准确率突破85%,并探讨了工业部署中的技术选型策略与优化方向。

weixin_29169505的博客 155

SpringWeb(SpringMVC)详解

SpringWeb(SpringMVC)详解

weixin_71243923的博客 6487

FFmpeg + Qt 实现摄像头采集与 MP3 背景音乐 RTSP 推流

在直播或视频监控场景中,我们经常需要将摄像头画面与背景音乐混合后推送到 RTSP 服务器。本文将详细介绍如何使用Qt框架结合摄像头实时采集(Windows 下使用dshow,Linux 使用v4l2视频预览(显示为 QImage)视频 H.264 编码 + RTSP 推流从 MP3 文件读取音频,重采样为 AAC 编码并推流循环播放音频文件解决中文文件路径打开失败的问题文章将剖析每个技术环节的关键代码,并给出完整的类实现。

weixin_45397344的博客 504

PCL 点云八叉树射线相交

PCL 点云八叉树射线相交

dayuhaitang1的博客 851

[手把手教程][JavaWeb]优雅的SpringMvc+Mybatis整合之路

[手把手教程][JavaWeb]优雅的SpringMvc+Mybatis整合之路 手把手教你整合最优雅SSM框架:SpringMVC + Spring + MyBatis 前面网友说我为啥很久不更新博客了,我告诉他们我准备潜修.其实是我的博客被人批评是在记流水账(~一脸尴尬~). 再次安利一波,博客地址:acheng1314.cn 本文中的图片用了个人服务器存储,网速较慢,各...

andaren6337的博客 111

网红商品数据抓取:基于Python的高效爬虫实战

本篇博客介绍了从爬取到存储、分析和可视化网红商品数据的完整流程。通过Python的强大生态,我们能够轻松完成复杂的数据抓取任务。在实际应用中,还可以将此爬虫与机器学习模型结合,进一步挖掘数据价值。

2201_76125261的博客 1478

idea springmvc_手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路

手把手教你整合最优雅SSM框架:SpringMVC + Spring + MyBatis本文中的图片用了个人服务器存储,网速较慢,各位老司机耐心等待.文章开始之前,小编准备先来一波福利youhuo一下你们java成神之路不可缺少的资料,小编已经准备好了,大家可以节省一些上网搜索资料的时间用在学习上获取资料的方式很简单,转发+关注私信小编【java web】即可免费获取工具IDE为idea15JDK...

weixin_39719042的博客 106

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

[手把手教程][JavaWeb]优雅的SpringMvc+Mybatis应用(二)

第二期文章也到了,其实这应该算是第一期续的。毕竟上次的列表分页还没做。 上一期是:[手把手教程][JavaWeb]优雅的SpringMvc+Mybatis应用(一) java学习交流 行走的java全栈 工具 IDE为idea16 JDK环境为1.8 gradle构建,版本:2.14.1 Mysql版本为5.5.27 Tomcat版本为7.0.52 流程图绘制(xmind) 本期目标 列表分页 列表分页 前面很早就说了列表分页,一直没怎么做,这一次就做一个登录的主机信息的分.

rexuejava的博客 193

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java web ssi框架_[手把手教程][JavaWeb]优雅的SpringMvc+Mybatis整合之路

[手把手教程][JavaWeb]优雅的SpringMvc+Mybatis整合之路手把手教你整合最优雅SSM框架:SpringMVC + Spring + MyBatis前面网友说我为啥很久不更新博客了,我告诉他们我准备潜修.其实是我的博客被人批评是在记流水账(一脸尴尬).本文中的图片用了个人服务器存储,网速较慢,各位老司机耐心等待.工具IDE为idea15JDK环境为1.8maven版本为mave...

weixin_39652646的博客 168

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java web mvc 教程_[手把手教程][JavaWeb]优雅的SpringMvc+Mybatis应用(四)

优雅的SpringMvc+Mybatis应用(四)转眼间文章已经到了第四期了。坚持做一件事,确实是很难的。特别是要不断的转换思维,一个习惯前端开发的人,做什么还是前端的考虑的多一点,后端的架构设计之类的,现在还谈不上,一切稳稳的前进就行了。关于上一期,本来是投了首页的,后来不知道什么原因没上,检查了一下,也就是推荐了下自己的博客和github,有点惆怅。工具IDE为idea15JDK环境为1.8m...

weixin_29128689的博客 126

JavaWeb项目实战一(Servlet+Jsp项目项目搭建及登录界面)

之前 JavaWeb 学的不是太好,准备从下边列的三个发展阶段,每个阶段以项目形式去补充基础 JavaWeb 发展阶段: Servlet + Jsp SSM:SpringMVC + Spring + MyBatis 其实在中间阶段还存在 SSH(Struts + Spring + Hibernate),SSM 框架其实就是用: SpringMVC 可以完全替代 Struts,配合注解的方式,编程非常快捷,而且通过 restful 风格定义 url,让地址看起来非常优雅 MyBatis 替换 Hib.

Love&Share 2万+

对ssm(spring,springmvc,mybatis)的了解总结

ssm框架现在是java web开发的三个主流框架 ,其实严格来算只算是两个框架,因为springmvc属于spring框架 ,是spring的一个mvc子框架 那么我们下面就来了解一下三大框架把 ** 一 .Spring ** spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。 spring主要的核心依赖有 beans , code , contex...

sssyyyy7的博客 1902

SSM框架详解,实现高效优雅的Java Web开发

SSM框架(Spring+SpringMVC+MyBatis)是目前Java Web开发的主流框架之一,它集成了Spring的依赖注入和AOP切面编程、SpringMVC的MVC架构和MyBatis的持久化框架,能够帮助开发者快速构建出高效优雅的Web应用。在本文中,我们将会深入探析SSM框架的三个核心组件和它们之间的工作原理,以及如何利用它们来打造高效的Web应用。

canshanyin的博客 2182

Spring SpringMvc Mybatis 架构整合 简单图书管理

Spring ①Spring是一个开源框架 ②Spring为简化企业级开发而生,使用Spring开发可以将Bean对象,Dao组件对象,Service组件对象等交给Spring容器来管理,这样使得很多复杂的代码在Spring中开发却变得非常的优雅和简洁,有效的降低代码的耦合度,极大的方便项目的后期维护、升级和扩展。 ③Spring是一个IOC(DI)和AOP容器框架。 ④Spring的优良特性 [1]非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API [2]控制反转:IOC——In

Li68686的博客 402

JavaWeb中Mybatis使用笔记

0 本文主要涉及 在基于 Spring 和 SpringMVC 的前后端分离的 JavaWeb 项目中使用 Mybatis,以及一些相关的笔记。 1 Mybatis简介 Mybatis官网:http://www.mybatis.org/mybatis-3/zh/index.html Mybatis-Spring官网:http://www.mybatis.org/spring/zh/index...

ZBH的博客 491
上一篇: 终结篇:史上最全MyBatis源码深入解析底层原理实战
下一篇: [手把手教程][JavaWeb]优雅的SpringMvc+Mybatis应用(二)
Java架构技术官
博客等级 码龄6年 9粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值