注解式开发初步

常用的两个注解:

@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()实现欢迎程序

配置包扫描器:

FirstController:

package cn.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
/**
*
* @author 景佩佩
*
*/
@Controller
public class FirstController{
@RequestMapping("/dofirst.do")
public String doFirst(){ return "/WEB-INF/index.jsp";
} }

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

package cn.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
/**
*
* @author 景佩佩
*
*/
@Controller
public class FirstController{
@RequestMapping("/dofirst.do")
public String doFirst(){ return "/WEB-INF/index.jsp";
} @RequestMapping("/dosecond.do")
public String doSecond(){
return "/WEB-INF/index.jsp";
} }

命名空间:

请求中的通配符用法

package cn.controller;

import java.util.HashMap;
import java.util.Map; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
*
* @author 景佩佩
*
*/
@Controller
//命名空间
@RequestMapping("/hr")
public class FirstController{
@RequestMapping("/dofirst.do")
public String doFirst(){ return "/WEB-INF/index.jsp";
} @RequestMapping("/dosecond.do")
public String doSecond(){
return "/WEB-INF/index.jsp";
} @RequestMapping("/*third.do") // *代表的0个或者N个字符,匹配上的所有以third结尾的格式
public String doThird(){
return "/WEB-INF/index.jsp";
} @RequestMapping ("/fourth*.do") //*代表的0个或者N个字符,匹配所有以fourth开头的地址格式
public String doFour(){
return "/WEB-INF/index.jsp";
} @RequestMapping("/**/fiveth.do") //必须以fiveth结尾,前面可以有N级别目录,也可以是0级
public String doFive(){
return "/WEB-INF/index.jsp";
} @RequestMapping("/*/sixth*.do") //在hr和sixth之前必须存在一级路径。并且只能是一级
public String doSix(){
return "/WEB-INF/index.jsp";
} }

请求中方式的定义

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

package cn.controller;

import java.util.HashMap;
import java.util.Map; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
*
* @author 景佩佩
*
*/
@Controller
//命名空间
@RequestMapping("/hr")
public class FirstController{ @RequestMapping(value="/dofirst.do",method=RequestMethod.GET)
public String doFirst(){
return "/WEB-INF/index.jsp";
} }

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

处理器方法的参数

处理器方法中常用的参数有五类,这些参数会在系统调用时由系统自动赋值,即程序员可在方法内直接使用
1)HttpServletRequest
2)HttpServletResponse
3)HttpSession
4)用于承载数据的Model
5)请求中所携带的请求参数

我们先用前三种

package cn.controller;

import java.util.HashMap;
import java.util.Map; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
*
* @author 景佩佩
*
*/
@Controller
//命名空间
@RequestMapping("/hr")
public class FirstController{
@RequestMapping(value="/dofirst.do",method=RequestMethod.GET)
public String 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";
} }

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

@RequestMapping(value="/dofirst.do",method=RequestMethod.GET)
    public String doFirst(Model model){
     
        Map<String,Object> datas=new HashMap<String, Object>();
        datas.put("uname", "火狐");
        model.addAllAttributes(datas);
        System.out.println(model);
         
        return ""/WEB-INF/index.jsp";
    }

对象参数:装配成实体

自定义实体类:UserInfo

package cn.entity;

public class UserInfo {
private String uname; public String getUname() {
return uname;
} public void setUname(String uname) {
this.uname = uname;
} }

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

package cn.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import cn.entity.UserInfo; @Controller
//命名空间
@RequestMapping("/hr")
public class FirstController{ @RequestMapping(value="/dofirst.do")
public String doFirst(UserInfo info){
System.out.println(info.getUname()); return "/WEB-INF/index.jsp";
} }

appliactiobContext.xml

jsp页面form表单提交:

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

Spring MVC注解开发入门的更多相关文章

  1. Spring _day02_IoC注解开发入门

    1.Spring IoC注解开发入门 1.1 注解开发案例: 创建项目所需要的jar,四个基本的包(beans core context expression ),以及两个日志记录的包,还要AOP的包 ...

  2. Spring MVC 注解开发详解

    @Controller控制器定义 1.Controller是单利模式,被多个线程请求共享,因此设计成无序状态. 2.通过@controller标注即可将class定义为一个controller类.为使 ...

  3. Spring的IOC注解开发入门1

    基本知识点如下: 引入注解约束,配置组件扫描 类上的注解: @Conponent  @Controller @Service @Repository 普通属性的注解   @value 对象属性的注解  ...

  4. spring mvc 注解入门示例

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=" ...

  5. Spring MVC 教程,快速入门,深入分析

    http://elf8848.iteye.com/blog/875830/ Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: ...

  6. MyBatis+Spring+Spring MVC整合开发

    MyBatis+Spring+Spring MVC整合开发课程观看地址:http://www.xuetuwuyou.com/course/65课程出自学途无忧网:http://www.xuetuwuy ...

  7. spring mvc 注解@Controller @RequestMapping @Resource的详细例子

    现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过 ...

  8. Spring MVC注解的一些案列

    1.  spring MVC-annotation(注解)的配置文件ApplicationContext.xml <?xml version="1.0" encoding=& ...

  9. spring mvc(注解)上传文件的简单例子

    spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...

随机推荐

  1. gentoo 安装

    加载完光驱后 1进行ping命令查看网络是否通畅 2设置硬盘的标识为GPT(主要用于64位且启动模式为UEFI,还有一个是MBR,主要用于32位且启动模式为bois) parted -a optima ...

  2. [原创]mybatis中整合ehcache缓存框架的使用

    mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...

  3. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

  4. HTML5 sessionStorage会话存储

    sessionStorage 是HTML5新增的一个会话存储对象,用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据.本篇主要介绍 sessionStorage(会话存储) ...

  5. VisualStudio2013 如何打开之前版本开发的(.vdproj )安装项目

    当你的项目使用早于 visualstudio2013 的版本开发并且使用 Visual Studio Installer 制作安装项目时,在升级至 VS2013 后会发现新安装项目无法打开, VS20 ...

  6. iOS逆向工程之Reveal工具的安装、配置与使用

    今天博客内容比较简单,不过还是蛮重要的.经常有小伙伴在QQ上私下问我,说博客中是如何使用Reveal查看AppStore中下载应用的UI层级的,那么就在今天这篇博客中作为一个主题来统一的介绍一下吧.虽 ...

  7. 【转】39个让你受益的HTML5教程

    闲话少说,本文作者为大家收集了网上学习HTML5的资源,期望它们可以帮助大家更好地学习HTML5. 好人啊! 不过,作者原来说的40个只有39个,因为第5个和第8个是重复的. 原文在此! 1. 五分钟 ...

  8. 【热门技术】EventBus 3.0,让事件订阅更简单,从此告别组件消息传递烦恼~

    一.写在前面 还在为时间接收而烦恼吗?还在为各种组件间的消息传递烦恼吗?EventBus 3.0,专注于android的发布.订阅事件总线,让各组件间的消息传递更简单!完美替代Intent,Handl ...

  9. [开发笔记] Graph Databases on developing

    TimeWall is a graph databases github It be used to apply mathematic model and social network with gr ...

  10. 在Visual Studio Code中配置GO开发环境

    一.GO语言安装 详情查看:GO语言下载.安装.配置 二.GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github ...