`
wx1568520008
  • 浏览: 20351 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

第三节 SpringMVC

 
阅读更多

客户端传递数据到服务端时,在接触到的知识中,我们会采用

A.普通的传递方式:

        如果是说你传递的数据的名称跟控制层中的形参的名称不一致的情况下需要使用 注解: @RequestParam()如果存在在注解的话,那么一定要传递对应的名称,除非设置required="false"  如下情况      个人建议是保存名称一致

 @RequestMapping("/client01")
    public ModelAndView client01(@RequestParam(name="id",required=false)Integer userId){
      System.out.println(userId);
                  return null;
                   }
  @RequestMapping("/client01")
      public ModelAndView client01(Integer id){
                  System.out.println(id);//前台传递的是id
                    return null;
                  }

B.传递的数据为表单的数据

1)使用普通的表单进行提交,那么你需要注意的是 name="类中的数据",如果是说我的类中有关联的类型那么name="role.role_id",表单中含有name属性才是传递数据

2)使用Jquery中的表单序列化操作,该操作比较方便,但是如果是日后工作当中,会只用客户端传递JSON的数据形式的字符串,注意:JQuery中的serialize()表单中的序列化函数

   $(function(){                            
           $("input[type='button']").click(function(){
                 $.post("ajax",$("#myForm").serialize(),function(data){
                     });
                         });
                });

C.使用的是占位符

                   使用占位符操作,那么你一般情况下需要传递简单的数据,形式如下/sys/100/tomcat

                    控制层当中,一定为如下的格式 /sys/{id}/{name},并且对应的形参中一定要含有@PathVariable注解

@RequestMapping("/client01/{user_id}/{name}")                    
          public ModelAndView 占位符传值(@PathVariable String user_id,@PathVariable String name){
            System.out.println("++++"+user_id+"----"+name);
            return null;
                    }

        服务端传递数据到客户端:

            1.一共介绍了5种形式

            (1)使用原生的二阶段用request进行传递数据,需要你再方法(HttpServletRequest)形式

            (2)ModelAndView

            (3)方法名(Map<String,Object> map)注意这些形参对进行实例化操作

                     (4)方法名(ModelMap modelMap)注意你可以使用 Ctrl+T的快捷键进行查看继承的关系

            (5)方法名(Model model)

            (6)返回客户端的数据为JSON的格式

   2.单纯传递日期的数据:当在如下的操作中,在接受数据时只有在2016/4/9这种形式中客户端才能接受到,而当我们想接受这样的形式2016-04-09或者是这样的形式2016.04.09就没办法这样显示,所以我们需要解决这件事情。

    <h2>日期传递</h2>
         <form action="client01" method="get">
            <input type="text" name="mydate" placeholder="输入日期格式">
             <input type="submit" value="提交日期数据">
          </form>
                    
    @RequestMapping("/client01")
          public ModelAndView test01(@RequestParam(name="mydate") @DateTimeFormat(pattern="yyyy-MM-dd")Date date){
              System.out.println(date);
                return null;
             }

                            向上述这样的形式,我们只能单纯的解决固定的一种形式,不能将你输入的任意一种形式都完美的显示,暂且留下悬念。

                       3.单纯的传递金钱的显示,一般页面上显示的金钱都会以这种形式1,000,000,000,而我们以这种形式输入时,不添加任何转换的代码时,是不会被接受的。所以我们需要设置让它识别这种写法。需要注意的是这里我们传递的参数的数据类型只是为了演示,实际开发中金钱的参数类型不会使用这个。

    @RequestMapping("/client02")                
         public ModelAndView 金钱(@NumberFormat(pattern="#,###.#")Double money){
                System.out.println(money);
                return null;
              }

                        4.当你有客户数据传递的时候,那么我会进入含有标注@InitBinder的方法中

 package com.shxt.controller;
 
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.beans.PropertyChangeListener;
import java.beans.PropertyEditor;
import java.beans.PropertyEditorSupport;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Map;
 
import javax.servlet.http.HttpServletRequest;
 
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.NumberFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
 
import com.shxt.model.User;
 
@Controller//如果是你没有命名,那么id=类名的首字母小写
public class ClienDataController {
@RequestMapping("/client01")
public ModelAndView test01(@RequestParam(name="mydate") @DateTimeFormat(pattern="yyyy-MM-dd")Date date){//有接收客户端数据,进入@InitBinder注解的方法内部
System.out.println(date);
return null;
}
@RequestMapping("/client02")
public ModelAndView test02(@NumberFormat(pattern="#,###.##")Double money){//有接收客户端数据,进入@InitBinder注解的方法内部
System.out.println(money);
return null;
}
@RequestMapping("/client03")
public ModelAndView test03(){//没有接收客户端数据,不进入@InitBinder注解的方法内部
System.out.println("test03");
return null;
}
@RequestMapping("/client04")
public ModelAndView test04(User user){//有接收客户端数据,进入@InitBinder注解的方法内部
System.out.println("test04");
return null;
}
@RequestMapping("/client05")
public ModelAndView test05(HttpServletRequest request){//没有接收客户端数据,不进入@InitBinder注解的方法内部
System.out.println("test05");
return null;
}
@RequestMapping("/client06")
public ModelAndView test06(Map<String,Object> map){//没有接收客户端数据,不进入@InitBinder注解的方法内部
System.out.println("test06");
return null;
}
@RequestMapping("/client07")
public ModelAndView test07(String shxt) throws UnsupportedEncodingException{
//如果是GET请求解决中文乱码问题,有两种方式:请自己总结一下
/*System.out.println("test07---->>"+
new String(shxt.getBytes("ISO8859-1"),"UTF-8"));*/
System.out.println("test07---->>"+shxt);
return null;
}
  
@InitBinder
//当客户端传递数据的时候,并且我的控制器中的方法要接收之前,会进入该标注的方法内部进行处理
public void shxt(WebDataBinder binder){
System.out.println("请注意观察该输入语句,在上面情况下输出?");
//String.class为客户端传递的数据要转换成形参所对应的那个类
binder.registerCustomEditor(String.class, new PropertyEditorSupport(){
//内部类-->>什么是Java内部类,如何使用?
@Override
public void setAsText(String text) throws IllegalArgumentException {
System.out.println("客户端传递的数据为:"+text);
setValue(text+":齐天大圣");//重新赋值
}
});
}
 
}

        配置工具类,进行对日期的解决方案

    @InitBinder//当客户端传递数据的时候,并且我的控制器中的方法要接收之前,会进入该标注的方法内部进行处理        
        public void shxt(WebDataBinder binder){
                binder.registerCustomEditor(Date.class, new PropertyEditorSupport(){
                @Override
                public void setAsText(String text) throws IllegalArgumentException {
                setValue(DateUtils.parseDate(text));
                }
                });
        }
        
            /注意使用这种方式去实现,自己的工具类的方式?
             //可以回去自己去实现继承Map接口,实现一个HashMap,很好玩
             public class DateUtils extends org.apache.commons.lang.time.DateUtils {
            private static String[] parsePatterns = {
            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", 
            "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
            "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};

@ModelAttribute注解方式用法:当传递的修改数据中并没有包括数据库中的所有字段,如果只是简单的修改而且也没有进行数据的校验时,只能是将我们传递的数据进行修改了,其余的数值都将变成null,现在当我们采用@ModelAttribute注解方式,就将不需要修改的值直接传送回去,只是将要修改的值进行修改。

<h2>用户更新</h2>
<form action="user/update" method="post">
<input type="hidden" name="_method" value="put">
<input type="text" name="account" value="wukong">
<input type="text" name="user_id" value="1000">
<input type="submit" value="用户更新">
</form>

package com.shxt.controller;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
 
import com.shxt.model.User;
 
@Controller
public class UserController {
@RequestMapping(value="/user/update",method=RequestMethod.PUT)
public ModelAndView update(@ModelAttribute(value="user_data")User user){
System.out.println(user);
return null;
}
@RequestMapping("/shxt")
public ModelAndView test01(){
System.out.println("哈哈哈");
return null;
}
@ModelAttribute
public void init2(){
System.out.println("******");
}
 
@ModelAttribute
public void init1(Integer user_id,Map<String,Object> map){
//System.out.println("======"+user_id);
if(user_id!=null){
//查询数据库,模拟通过主键查询数据库操作
System.out.println("我进来了");
User user = new User();
user.setUser_id(1000);
user.setAccount("wukong");
user.setPassword("123456");
user.setUser_name("悟空");
map.put("user_data",user);
}
}
 
}






 





                




转载于:https://my.oschina.net/courage123/blog/655734

分享到:
评论

相关推荐

    SpringMvc 第5讲

    在本节SpringMvc的第五讲中,我们将深入探讨SpringMvc框架的核心概念和关键特性,以及如何在实际开发中有效利用这些知识。SpringMvc是Spring框架的一部分,它为Web应用程序提供了模型-视图-控制器(MVC)架构的支持...

    第5节 完整版 Java开发实训课程系列-SpringMVC框架技术 全套PPT课件资源 共9个章节 含案例源码.rar

    完整版 Java开发实训课程系列-SpringMVC框架技术教程 第3章 映射请求和返回值 (共18页).pptx 完整版 Java开发实训课程系列-SpringMVC框架技术教程 第4章 参数绑定 (共20页).pptx 完整版 Java开发实训课程系列-...

    SpringMvc 第五讲 2

    在本节SpringMvc教程的第五讲中,我们将深入探讨SpringMvc框架的核心概念和技术,以便更好地理解和应用这个强大的MVC(Model-View-Controller)框架。SpringMvc是Spring框架的一个重要组成部分,它为Java web开发...

    SpringMVC第三天【随堂笔记】1

    【SpringMVC第三天【随堂笔记】1】章节主要涉及了如何搭建一个基于Spring、SpringMVC和MyBatis的SSM整合环境。这里我们将深入探讨这些知识点,并详细阐述搭建过程。 首先,SSM整合是指Spring、SpringMVC和MyBatis三...

    (代码)SpringMVC第8讲:多视图支持

    在本节SpringMVC教程中,我们将探讨"多视图支持"这一核心概念,这是构建Web应用程序时不可或缺的一部分。SpringMVC作为一个强大的MVC框架,提供了丰富的功能来处理多种类型的视图技术,使得开发者能够灵活地选择最...

    SpringMVC-9 处理JSON数据

    在现代Web开发中,JSON(JavaScript Object Notation)已经成为一种广泛使用的数据交换格式,它轻量级、易于读写,并且被...在实际项目中,可以根据需求自定义转换逻辑,或者扩展其他第三方库如Gson,以适应各种场景。

    (代码)SpringMVC第7讲:json支持

    在本节中,我们将深入探讨SpringMVC框架对JSON的支持,这是现代Web应用程序开发中不可或缺的一部分。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成...

    SpringMVC基础篇笔记.docx基础篇笔记.docx

    本节主要介绍如何快速搭建一个SpringMVC项目,并完成一个简单的“Hello World”示例。 - **步骤**: 1. **加入必要的JAR包**:首先需要在项目的lib目录下添加SpringMVC所需的依赖库。 - `commons-logging-1.1.3....

    spring3.0_mvc框架_03_基于spring3.0的注解_项目开发(包含整合hibernate).flv

    这里是我自学 springmvc 框架的基本教程,按照这个教程可以轻松的掌握SpringMvc的搭建和使用,同时下一步本人会将 SpringMVC和数据库操作集成学习也进行分项,本次学习共八节,这里是第三节。

    java面试题第三部分:框架

    控制反转指的是,这种控制权不由当前对象管理了,由其他(类、第三方容器)来管理。对象 A 运行需要对象 B,由主动创建变为 IOC 容器注入,这便是控制反转。获得依赖对象的过程被反转了,获取依赖对象的过程由自身...

    Guns 技术文档 v1.0 + 完整视频教程

    3. **SpringMVC支持**:Guns深度整合SpringMVC,提供了强大的控制器和视图层处理能力,支持RESTful API设计,增强了前后端分离的能力。 4. **MyBatis增强**:通过封装MyBatis,Guns提供了一套便捷的数据库操作接口...

    Java项目:基于SSM框架实现的教务管理系统(ssm+B/S架构+源码+数据库+毕业论文)

    一、项目简介 本项目是一套ssm813基于SSM框架实现的教务管理系统,主要针对...第几节管理 院系管理 职称管理 专业管理 公告管理 课程管理 成绩管理 详见 https://flypeppa.blog.csdn.net/article/details/135996957

    跟我学spring

    【第三章】DI(依赖注入)是实现IoC的方式之一,它允许对象定义它们依赖的其他对象。在Spring中,依赖注入可以通过构造器注入或设值注入的方式实现。3.1节介绍了DI的配置使用方法,3.2节讨论循环依赖问题及其解决...

    SpringBoot企业级博客系统(未加密+源码)

    第3章 一个Hello World项目 本章是正式开始动手敲代码了。依照惯例,会先编写一个最简单的Hello World程序。从项目配置,应用的编写,再到测试用例,最后运行项目。方面学员了解整个编码的流程。 第4章 开发环境的...

    Spring Boot带前后端 渐进式开发企业级博客系统

    第3章 一个Hello World项目 本章是正式开始动手敲代码了。依照惯例,会先编写一个最简单的Hello World程序。从项目配置,应用的编写, 再到测试用例,最后运行项目。方面学员了解整个编码的流程。 第4章 开发环境...

    Java架构资源文档

    本节介绍了基于Spring+SpringMVC+Hibernate的经典三层架构模式,并详细阐述了各个组成部分的作用及其配置方式。 **项目整体结构:** - **Dao**:负责处理与数据库相关的逻辑,通常包含增删改查等基本操作。 - **...

    1.SSM环境搭建与产品操作1

    总结一下,本节内容涵盖了使用Oracle数据库创建用户、授权以及创建产品表的基础操作,这是SSM环境下进行数据管理的第一步。之后,你需要配置Spring、SpringMVC和MyBatis的依赖,搭建Maven工程,并编写相应的Java代码...

    SpringBoot3

    - **自动配置**:基于约定优于配置的原则,自动配置 Spring 和第三方库。 - **生产级特性**:包括监控指标、健康检查、外部化配置等功能。 #### 二、快速入门指南 ##### 2.1 快速体验 本节将演示如何快速搭建一个...

    基于ssm+mysql+vue的汽车租赁管理系统源码数据库.docx

    - **SSM框架技术**:SSM是Spring + SpringMVC + MyBatis三个框架的缩写,它们共同构成了一个强大的企业级应用开发框架。Spring负责依赖注入和配置管理;SpringMVC用于处理HTTP请求;MyBatis则实现了ORM(对象关系...

Global site tag (gtag.js) - Google Analytics