热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javamvc注解_SpringMVC注解开发入门

注解式开发初步常用的两个注解:Controller:是SpringMVC中最常用的注解,它可以帮助定义当前类为一个Spring管理的bean,同时指定该

注解式开发初步

常用的两个注解:

@Controller:是SpringMVC中最常用的注解,它可以帮助定义当前类为一个Spring管理的bean,同时指定该类是一个控制器,可以用来接受请求。标识当前类是控制层的一个具体的实现

@requestMapping:放在方法上面用来指定某个方法的路径,当它放在类上的时候相当于命名空间需要组合方法上的requestmapping来访问

扩充:

注解名称

作用

@Controller

注解标明该类需要Spring容器自动加载,将一个类成为 Spring 容器的 Bean。

@RequestMapping

可以标注在类定义处,将 Controller 和特定请求关联起来;还可以标注在方法签名处。所以在类声明处标注的 @RequestMapping 相当于让 POJO 实现了 Controller 接口,而在方法定义处的 @RequestMapping 相当于让 POJO 扩展 Spring 预定义的 Controller(如 SimpleFormController 等)。

@Resource

用来注解该属性的SETTER方法参数来源于Spring Bean

@ModelAttribute

①绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用;

②暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对象,如注册时需要选择的所在城市等,而且在执行功能处理方法(@RequestMapping注解的方法)之前,自动添加到模型对象中,用于视图页面展示时使用;

③暴露@RequestMapping方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展示时使用。

@SessionAttributes

代表被注解对象会被存放到HttpSession作用域

@PathVariable

用于将请求URL中的模板变量映射到功能处理方法的参数上

@requestParam

用于将请求参数区数据映射到功能处理方法的参数上

前提是:配置一个包扫描器

案例:使用@Controller和@RequestMapping()实现欢迎程序

配置包扫描器:

2c53513b8e7bd0ec60b7e64dfe5ae4b7.png

59b3ed14e10826b52526cec2e6813dbc.png

FirstController:

packagecn.controller;

import org.springframework.web.bind.annotation.RequestMapping;importorg.springframework.stereotype.Controller;/***

*@author景佩佩

**/@Controllerpublic classFirstController{

@RequestMapping("/dofirst.do")publicString doFirst(){return "/WEB-INF/index.jsp";

}

}

bf8fd5a264537e4bc553d9b04e99559f.png

一个处理类中定义N个处理器方法

packagecn.controller;

import org.springframework.web.bind.annotation.RequestMapping;importorg.springframework.stereotype.Controller;/***

*@author景佩佩

**/@Controllerpublic classFirstController{

@RequestMapping("/dofirst.do")publicString doFirst(){return "/WEB-INF/index.jsp";

}

@RequestMapping("/dosecond.do")publicString doSecond(){return "/WEB-INF/index.jsp";

}

}

463d88426ac28312575e7c0be568dbb1.png

命名空间:

ab723c904e2a78da8450d13a2bcef346.png

请求中的通配符用法

packagecn.controller;importjava.util.HashMap;importjava.util.Map;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;/***

*@author景佩佩

**/@Controller//命名空间

@RequestMapping("/hr")public classFirstController{

@RequestMapping("/dofirst.do")publicString doFirst(){return "/WEB-INF/index.jsp";

}

@RequestMapping("/dosecond.do")publicString doSecond(){return "/WEB-INF/index.jsp";

}

@RequestMapping("/*third.do") //*代表的0个或者N个字符,匹配上的所有以third结尾的格式

publicString doThird(){return "/WEB-INF/index.jsp";

}

@RequestMapping ("/fourth*.do") //*代表的0个或者N个字符,匹配所有以fourth开头的地址格式

publicString doFour(){return "/WEB-INF/index.jsp";

}

@RequestMapping("/**/fiveth.do") //必须以fiveth结尾,前面可以有N级别目录,也可以是0级

publicString doFive(){return "/WEB-INF/index.jsp";

}

@RequestMapping("/*/sixth*.do") //在hr和sixth之前必须存在一级路径。并且只能是一级

publicString doSix(){return "/WEB-INF/index.jsp";

}

}

dd9d45bcae5986800f50e4a21119c556.png

98cea7b38b3096e655f0eaf0f188e067.png

7e4a7154f013acb1cd21ea9b95afd4f8.png

127dba2b6f5fccd6080d2cb6d1ad1957.png

请求中方式的定义

对于@RequestMapping,有一个属性method,用于对被注解方法所处理请求的提交方式进行限制,只有满足该method属性指定的提交方式,才会执行被注解方法。 method属性的取值为RequestMethod,是一个枚举常量。常用值为 RequestMethod.GET 与 RequestMethod.POST

packagecn.controller;importjava.util.HashMap;importjava.util.Map;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;/***

*@author景佩佩

**/@Controller//命名空间

@RequestMapping("/hr")public classFirstController{

@RequestMapping(value="/dofirst.do",method=RequestMethod.GET)publicString doFirst(){return "/WEB-INF/index.jsp";

}

}

默认是GET,POST的话会报错405

97d6e5963fdb616409ff1cc4d30b4243.png

处理器方法的参数

处理器方法中常用的参数有五类,这些参数会在系统调用时由系统自动赋值,即程序员可在方法内直接使用

1)HttpServletRequest

2)HttpServletResponse

3)HttpSession

4)用于承载数据的Model

5)请求中所携带的请求参数

我们先用前三种

packagecn.controller;importjava.util.HashMap;importjava.util.Map;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;/***

*@author景佩佩

**/@Controller//命名空间

@RequestMapping("/hr")public classFirstController{

@RequestMapping(value="/dofirst.do",method=RequestMethod.GET)publicString doFirst(HttpServletRequest request,HttpServletResponse response,HttpSession session,Model model){

System.out.println("request\t"+request);

System.out.println("response\t"+response);

System.out.println("session\t"+session);

System.out.println("model\t"+model);return "/WEB-INF/index.jsp";

}

}

21f65d2dd688c34dbcde99562e3c6cd4.png

请求中所携带的请求参数——零散参数

@RequestMapping(value="/dofirst.do",method=RequestMethod.GET)publicString doFirst(Model model){

Map datas=new HashMap();

datas.put("uname", "火狐");

model.addAllAttributes(datas);

System.out.println(model);return ""/WEB-INF/index.jsp";

}

97af40dab3e73c5615c41a9b38184949.png

86eb583e350e09148c2eeb32ea9f9c7c.png

对象参数:装配成实体

自定义实体类:UserInfo

packagecn.entity;public classUserInfo {privateString uname;publicString getUname() {returnuname;

}public voidsetUname(String uname) {this.uname =uname;

}

}

FirstController控制器类方法参数是实体类对象:

packagecn.controller;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importcn.entity.UserInfo;

@Controller//命名空间

@RequestMapping("/hr")public classFirstController{

@RequestMapping(value="/dofirst.do")publicString doFirst(UserInfo info){

System.out.println(info.getUname());return "/WEB-INF/index.jsp";

}

}

appliactiobContext.xml

eab23646209976558b7e53b1c7be9976.png

jsp页面form表单提交:

21c68578be8e20e7221ca0a804cefd4f.png

35692180178294ce68c633dc5294eeae.png

c2e8c7478694dbc97da77fa4f7c26aa0.png

解决乱码问题:Web.xml配置编码过滤器---CharacterEncodingFilter

6cbeb74fae3e2b20a41c3641a7ac467c.png

1f220cabbd93315250873d4325e166bc.png

0af10dc958eeff8b42adfad6229150a8.png



推荐阅读
  • (三)多表代码生成的实现方法
    本文介绍了一种实现多表代码生成的方法,使用了java代码和org.jeecg框架中的相关类和接口。通过设置主表配置,可以生成父子表的数据模型。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 集合的遍历方式及其局限性
    本文介绍了Java中集合的遍历方式,重点介绍了for-each语句的用法和优势。同时指出了for-each语句无法引用数组或集合的索引的局限性。通过示例代码展示了for-each语句的使用方法,并提供了改写为for语句版本的方法。 ... [详细]
author-avatar
好富饶_152
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有