使用SpringMVC进行表现层开发

常见的AXI总线仲裁器概述-AXI协议理解(一) SoC 设计广泛采用共享总线式的片上通信,其中的仲裁器是共享总线的关键技术之一。AMBA AXI 总线协议以高性能、高频率的系统设计为目标,适合高带宽、低延迟的系统设计,可以达到高频率的操作而不需要复杂的总线桥,满足众多部件的接口要求,具备高度灵活的互联结构,并且向后兼容 AHB 和 APB 接口。 阅读详情

SpringMVC简介

SpringMVC是基于Model2实现的技术框架,spring MVC是围绕(DispatcherServlet)分发器设计的,其作用就是将请求分发到不同的控制器。

Spring MVC的工作原理
image

Maven 依赖

spring:
    beans,
    context,
    context-support,
    core,
    aop,
    aspect,
    expression,
    web,
    webmvc

aspectj:
    aspectjweaver
    aopalliance

commons:
    logging
    fileupload

控制器处理输入参数

请求映射方式

  1. 根据请求方式 method = GET
  2. Ant风格的URL路径
    • 支持?//*三种匹配符
    • ?—— 匹配一个字符
    • /*/path —— 匹配文件名的任意字符,即匹配一层路径
    • ** —— 匹配多层路径
  3. Restful风格的路径

请求参数接收

  1. 直接接收参数(Get))
/**
     * 1.直接把表单的参数写在Controller相应的方法的形参中
      * @param username
     * @param password
     * @return
     */
    @RequestMapping("/addUser1")
    public String addUser1(String username,String password) {
        System.out.println("username is:"+username);
        System.out.println("password is:"+password);
        return "demo/index";
    }

url形式:http://localhost/SSMDemo/demo/addUser1?username=lixiaoxi&password=111111 提交的参数需要和Controller方法中的入参名称一致。

  1. @PathVariable接收参数
/**
     * 4、通过@PathVariable获取路径中的参数
      * @param username
     * @param password
     * @return
     */
    @RequestMapping(value="/addUser4/{username}/{password}",method=RequestMethod.GET)
public String addUser4(@PathVariable String username,@PathVariable String password) {
        System.out.println("username is:"+username);
        System.out.println("password is:"+password);
        return "demo/index";
    }

例如,访问http://localhost/SSMDemo/demo/addUser4/lixiaoxi/111111 路径时,则自动将URL中模板变量{username}和{password}绑定到通过@PathVariable注解的同名参数上,即入参后username=lixiaoxi、password=111111。

  1. @RequestParam接收参数
    当请求参数username不存在时会有异常发生,可以通过设置属性required=false解决,例如: @RequestParam(value=”username”, required=false)
  2. HttpServletRequest接收参数(Get/Post)
/**
     * 2、通过HttpServletRequest接收
      * @param request
     * @return
     */
    @RequestMapping("/addUser2")
    public String addUser2(HttpServletRequest request) {
        String username=request.getParameter("username");
        String password=request.getParameter("password");
        System.out.println("username is:"+username);
        System.out.println("password is:"+password);
        return "demo/index";
    }
  1. 通过Bean来接收参数(Get/Post)

Bean

···
package demo.model;

public class UserModel {

private String username;
private String password;
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}

}
···

通过Bean获取参数

/**
     * 3、通过一个bean来接收
      * @param user
     * @return
     */
    @RequestMapping("/addUser3")
    public String addUser3(UserModel user) {
        System.out.println("username is:"+user.getUsername());
        System.out.println("password is:"+user.getPassword());
        return "demo/index";
    }
  1. @ModelAttribute获取POST请求参数
    pojo
public class Pojo{  
    private String a;  
    private int b;  

    //setter...
}

通过pojo获取参数

@RequestMapping(method= RequestMethod.POST)  
public String processSubmit(@ModelAttribute( " pojo " ) Pojo pojo) {  
    return " helloWorld " ;  
 }  

注意:
Restful——@PathVariable,主要指向资源,当指向状态时,用@RequestParam.

控制器处理返回值类型

  1. ModelMap类型
@RequestMapping(value = "getModel",method = RequestMethod.GET)
public ModelMap getModel(){
    ModelMap modelMap = new ModelMap();

    modelMap.put("1","hello world");
    return modelMap;
}
  1. Map类型
@RequestMapping(value = "/getMethod",method = RequestMethod.GET)  //二级URL
public Map<String,Object> getMethod(){
    Map data = new HashMap<String,Object>();

    data.put("1","hello world");

    return data;
}
  1. ModelAndView类型

保存模型到HttpSession

通过控制器(类)上标记@SessionAttributes注解,可将模型数据保存到HttpSession中,以便多个请求之间共用该模型属性。

@SessionAttributes(“key”)

控制器类型转换,格式化和数据校验

通过@InitBinder实现数据格式化

通过在属性上添加相应注解实现格式化

pom.xml

    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.0.9.Final</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
    <dependency>
      <groupId>javax.validation</groupId>
      <artifactId>validation-api</artifactId>
      <version>2.0.1.Final</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.jboss.logging/jboss-logging -->
    <dependency>
      <groupId>org.jboss.logging</groupId>
      <artifactId>jboss-logging</artifactId>
      <version>3.3.2.Final</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml/classmate -->
    <dependency>
      <groupId>com.fasterxml</groupId>
      <artifactId>classmate</artifactId>
      <version>1.4.0</version>
    </dependency>

Person.java

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birth;

在属性上添加相应注解实现数据校验

package cn.edu.scnu.po;


import org.hibernate.validator.constraints.Range;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
public class Person {

    @NotNull
    private Integer id;
    @Size(min = 6,max = 16)
    private String name;
    @NotNull
    @Range(min = 18,max = 45)
    private Integer age;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birth;
    @Email
    @NotNull
    private String email;

    //setters和getters
}

Spring MVC实现Restful接口

SpringMVC 实现文件上传和下载

Pom.xml

文件上传与下载——基于springboot

文件上传本质上是文件复制,即将获得的MultiPartFile复制到服务器。

文件下载也是一个文件复制过程,即将服务器上的文件复制到response中。

package cn.edu.scnu.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.*;

@RestController
@RequestMapping("/file")
public class FileController {

    /**
     * w
     * @param srcFile
     * @return
     *
     * 文件上传本质上就是一个文件复制过程
     */
    @RequestMapping(value = "/upload",method = RequestMethod.POST)
    public String fileUpload(@RequestParam("file")MultipartFile srcFile) throws IOException {

        if(!srcFile.isEmpty()){
            String path = "D://text";
            String fileName = srcFile.getOriginalFilename();

            //获取源文件输入流
            InputStream inputStream = srcFile.getInputStream();
            //获取输出流
            OutputStream outputStream = new FileOutputStream(new File(path));

            int value = 0;
            while((value=inputStream.read())!=-1){
                outputStream.write(value);
            }
            inputStream.close();
            outputStream.close();

            return "文件上传成功";


        }else {
            return "文件上传失败";
        }
    }

    @RequestMapping("downloadFile")
    public void downloadFile(HttpServletResponse response){
        //下载的文件

        File downloadFile = new File("C:\\Users\\lay77\\Pictures\\timgbjn.jpg");

        //输入流\
        InputStream inputStream =null;
        //输出流是response
        OutputStream outputStream = null;
        try {
            inputStream =  new FileInputStream(downloadFile);
            outputStream = response.getOutputStream();

            //文件复制_通过缓存数组复制
            byte[] bytes = new byte[1024];
            int len = 0;
            while((len = inputStream.read(bytes))!=-1){
                outputStream.write(bytes,0,len);
            }
            System.out.println("下载成功");
        } catch (Exception e) {
            e.printStackTrace();
        }finally {

            try {
                inputStream.close();
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

SpringMVC 的国际化

【QNX Hypervisor 2.2 用户手册】2.6 处理qvm终止 你可以注册通知,以在qvm进程实例退出时得到通知。这样你就可以采取相应的措施来响应这种终止事件。 阅读详情

相关推荐

手把手教你用示波器搞定PCIe 5.0 REFCLK时钟信号测量(附完整参数解读)

本文详细介绍了如何使用示波器进行PCIe 5.0 REFCLK时钟信号测量,包括示波器与探头的选择、关键参数的测量方法及解读,以及实战中的常见问题与解决方案。通过手把手教学和完整参数解读,帮助硬件工程师高效完成时钟信号测量,确保系统稳定性。

weixin_28704565的博客 359

spring MVC层处理方式的汇总

@Component @RequestMapping("jsp/test") public class TestSpring {     protected final Logger log = LoggerFactory.getLogger(getClass());     @RequestMapping(params = "method=getjson")     @Response

RodJohnsonDoctor的专栏 1165

微信小程序实现锚点效果 scroll-view的scroll-into-view属性

小程序中实现锚点效果,可以直接使用scroll-view的scroll-into-view属性就可以实现锚点效果,比较方便简单。那么需要用到scroll-view那些参数呢,下面具体讲讲:效果展示: wxml **注意:**viewid值是动态的,通过setData设置即可。js wxss......

FaxMiao的博客 5449

SpringMVC表述层

Spring MVC简单介绍、作用以及快速构建javaEE项目基于Servlet API构建的原始Web框架,从一开始就包含在Spring Framework中,作为Java EE项目表述层开发的首选方案。Spring 家族原生产品,与IOC容器等基础设施无缝对接。

qq_51076441的博客 402

Windows 10/11一键搞定HDF5文件查看:HDFView 3.4.1免配置安装指南(附中文路径避坑技巧)

本文详细介绍了HDFView 3.4.1在Windows 10/11上的免配置安装方法及中文路径优化技巧。作为HDF5文件查看的专业工具,HDFView 3.4.1简化了安装流程,提升了科研数据处理效率,特别适合遥感、气象等领域的研究人员使用。

qsc9012345的博客 1146

C++学习(四六六)Multiple parse contexts are available for this file

Note: Multiple parse contexts are available for this file. Choose the preferred one from the editor menu 参考: "Multiple parse contexts" in Qt creator | Qt ForumHi Do you use sessions? https://bugreports.qt.io/browse/QTCREATORBUG-18521 Anyway, its not.

hankern的专栏 4610

SSM进阶(六)SpringMvc---表现层框架

SpringMvc---表现层框架     首先来对两个概念进行区分: 1.三层架构和MVC框架(二者都可采用分层思想)   三层架构(应用程序):三层是从整个应用程序架构的角度来分的三层,他将整个应用程序分为表现层、业务逻辑层、数据访问层 MVC模式:是基于表现层的框架。MVC把用户界面独立的到一些文件中(View),把一些和用户交互的程序逻辑(Controller)独立到一些文件...

qq_42112846的博客 3378

SAP和Oracle EBS作为全球顶级的ERP系统,在中国市场深耕数十年,尤其是在大型国企、央企和跨国企业中,已经形成了强大的用户习惯和“舒适区”依赖

国产ERP替代国际系统的关键挑战在于打破用户对SAP/Oracle的操作习惯和心理依赖。需采取多维策略:战略上明确价值主张、分阶段实施;产品上优化用户体验、确保数据迁移;实施上加强情景化培训、流程再造。成功替代70%取决于变革管理,需将"被动替换"转为"主动升级",让用户在新系统中建立更优的舒适区。

金牌架构师 383

表现层-SpringMVC笔记

平时是C/S或B/S架构,web开发是用B/S架构;服务端经常分为三层架构;

qq_41180996的博客 776

SAP S/4HANA Public Cloud 配置全景实践

本文提供SAP S/4HANA Public Cloud配置的实用指南,重点介绍三大核心工具:CBC(范围界定与配置)、SAP Activate(方法论与路线图)和Cloud ALM(项目执行与运维)。文章详解了不同系统架构(2SL/3SL)的配置路径,并以制造企业案例说明端到端实施流程。同时提供了工具协同操作方法、初始访问安全建议和常见问题的专家意见,帮助项目团队高效完成实施工作。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 562

SAR成像概述

1. 发展概述 雷达是英文Radar(Radio detection and ranging)的音译,原意为“无线电探测与测距”。雷达的发明是无线电发展史上的里程碑,二战时,英国急需通过雷达探测空中金属物体来帮助搜寻德国飞机,这期间,雷达技术飞速发展,发展出了地对空、空对地轰炸、空对空火控、敌我识别等功能。雷达在第二次世界大战中发挥了重大作用,至今仍是军用和许多民用领域的重要传感器。 早期雷达系统通过时间延迟来测距,通过天线指向来测角,通过多普勒频移测速。1951年,Carl Wiley发现,通..

5074

springmvc(表现层/Web层框架)

1 springmvc工作原理 &nbsp;&nbsp;&nbsp;&nbsp;Spring mvc和Struts2都属于表现层的框架,它是Spring框架的一部分.(表现层框架,学习如何从页面(web端)取数据,如何与后台服务交互,交互后如何把数据绑定,在前端显示)。 1、客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的...

weixin_42975605的博客 5447

区块链技术与应用 【全国职业院校技能大赛国赛题目解析】Caliper从0到使用

技能大赛样题解析,caliper题目从0到使用

weixin_52865146的博客 2076

java 表现层_使用SpringMVC进行表现层开发

SpringMVC简介SpringMVC是基于Model2实现的技术框架,spring MVC是围绕(DispatcherServlet)分发器设计的,其作用就是将请求分发到不同的控制器。Spring MVC的工作原理Maven 依赖spring:beans,context,context-support,core,aop,aspect,expression,web,webmvcaspectj:a...

weixin_34803466的博客 311

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

开发中SpringMVC(表现层)

用@RequestBody注解修饰自定义对象 接受前端json对象封装的数据时 出现miss request body 问题 原因 :@RequestBody是需要http请求体的,而get请求中是不包含请求体的。所以必须指定为post请求方式 ...

weixin_41075660的博客 778

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

DAY05_SpringMVC—SSM整合&表现层数据封装&异常处理器&项目异常处理方案&SSM整合页面开发&拦截器

SpringMVC—SSM整合、表现层数据封装、异常处理器、项目异常处理方案、SSM整合页面开发、拦截器

m0_57075290的博客 266

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

三层架构与mvc的区别与联系 以及SpringMVC

SpringMVC属于表现层的框架,强化注解的开发

qq_30347133的博客 557

SpringMVC -- 三层架构和MVC

三层架构 开发服务器端程序,一般都基于两种形式,一种C/S架构程序,一种B/S架构程序 使用Java语言基本上都是开发B/S架构的程序,B/S架构又分成了三层架构 三层架构 1. 表现层:WEB层,用来和客户端进行数据交互的。表现层一般会采用MVC的设计模型 我们常说的web层。它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求web 层, web 需要接收 http 请求,...

xzzz2020的博客 2726

【SSM框架探索】第二篇——SSM整合与表现层数据封装优化

这篇博客将详细介绍SSM(Spring + SpringMVC + MyBatis)框架的整合过程以及如何通过定义Result类来优化表现层数据的响应格式,确保前后端交互的一致性和简便性。我们将从创建工程、添加必要的依赖开始,逐步完成Spring、MyBatis、SpringMVC的整合配置,并探讨如何通过自定义的结果封装类来统一API的响应格式,提升开发效率和用户体验。适合对SSM框架有一定了解,希望深入了解其整合细节及最佳实践的开发者阅读。

2301_80237574的博客 956

java表现层框架_【Java劝退师】SpringMVC 知识脑图 - 表现层开源框架

SpringMVC表现层开源框架一、解决的问题根据用户输入来构造 Bean自动转换数据类型校验 用户输入URL 到 控制器 的灵活映射支持 Restful 风格目的 : 简化 Servlet 开发二、架构1. 经典三层表现层 Controller : 接收客户端请求、响应结果业务层 Service : 处理业务逻辑、控制事务持久层 Dao : 访问数据库2. MVC 架构模式Model 模型 : ...

weixin_29080843的博客 221

SpringMVC概念

1.关于三层架构和MVC ​ 1.1三层架构 ​ 1.咱们开发服务器端程序,一般都基于两种形式,一种C/S架构程序,一种B/S架构程 ​ 2.使用Java语言基本上都是开发B/S架构的程序,B/S架构又分成了三层架构 ​ 3.三层架构 ​ 表现层:WEB层,用来和客户端进行数据交互的。表现层一般会采用MVC的设计模型 ​ 业务层:处理公司具体的业务逻辑的 ​ 持久层:用来操作数据库的 ​ 1.2MVC模型 ​ MVC全名是Model View

kaszxc的博客 322

SpringMVC简介

1、SpringMVC是什么 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来,如下图 2、SpringMVC简单处理流程 3、详细架构图 说明:在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc的三大组件。 需要用户开发的组件有handler、...

玉爷的博客 170

SpringMVC(看这一篇就够了)

Web程序通过浏览器访问前端页面,前端页面使用异步提交方式发送请求到后端服务器-后端服务器采用表现层、业务层、数据层三层架构形式开发-页面发送的请求由表现层接收-获取用户请求参数后将参数传递到业务层-业务层访问数据层-得到用户需要访问的数据后将数据返回给表现层-表现层将数据-表现层拿到数据后将数据转换为json格式返回给前端页面 -前端页面接收数据后解析数据并组织成用户浏览的最终页面信息交给浏览器 数据层:JDBC-Mybatis

fanTuanye的博客 513

Spring——SSM 整合(纯注解开发)

在数据层中定义一个接口,接口中定义一个方法,查询图书表的所有信息把接口定义成Bean对象交给容器管理,在 MybatisConfig 中,定义生成Bean 对象的方法该方法是用来把数据层的接口定义成Bean对象交给容器管理业务层接口该接口的实现类,需要注入数据层的接口,从而调用数据层接口中的方法表现层需要有请求路径,注入业务层的接口,调用业务层的方法。

m0_61632590的博客 1414

springmvc入门基础

三层架构 我们的开发架构一般都是基于两种形式,一种是 C/S 架构,也就是客户端/服务器,另一种是 B/S 架构,也就 是浏览器服务器。在 JavaEE 开发中,几乎全都是基于 B/S架构的开发。那么在 B/S架构中,系统标准的三层架构 包括:表现层、业务层、持久层。三层架构在我们的实际开发中使用的非常多,所以我们课程中的案例也都是基于三层架构设计的。 三层架构中,每一层各司其职,接下来我们就...

weixin_43283092的博客 236

SpringMVC 的基本概念

三层架构 我们的开发架构一般都是基于两种形式,一种是 C/S 架构,也就是客户端/服务器,另一种是 B/S 架构,也就 是浏览器服务器。在 JavaEE 开发中,几乎全都是基于 B/S 架构的开发。那么在 B/S 架构中,系统标准的三层架构 包括:表现层、业务层、持久层。三层架构在我们的实际开发中使用的非常多,所以我们课程中的案例也都是基于 三层架构设计的。 三层架构中,每一...

weixin_41946004的博客 218
上一篇: Spring框架
下一篇: 人工智能之高等数学1
江城子_Lay
博客等级 码龄9年 19粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值