@Controller和@RequestMapping以及映射

一、@Controller和@RequestMapping

复制代码
/*
 * 定义控制器
 */
public class FooController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        //返回一个模型视图对象,指定路径,指定模型的名称为message,值为一段字符串
          	ModelAndView modelView = new ModelAndView();
	//类似于 request.setAttribute()
    	modelView.addObject("message","Hello,我是通过实现接口定义的一个控制器");
	modelView.setViewName("index");
        return modelView;
    }
}
复制代码
<body>
	${message}
</body>

其中name是访问路径,class是自定义的控制器的全名称。运行后的结果如下:

一个控制器中只有一个Action,如果要多个Action则需要定义多个Controller;定义的方式比较麻烦;Spring2.5以后采用注解的方式定义解决这类问题。

org.springframework.stereotype.Controller注解类型用于声明Spring类的实例是一个控制器(在讲IOC时还提到了另外三个注解);

Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你的控制器,需要在配置文件中声明组件扫描。

创建一个名为Bar类,定义为一个控制器,类的具体实现如下:

复制代码
package com.zhangguo.springmvc02.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
/**
 * 定义控制器
 *///BarController类的实例是一个控制器,会自动添加到Spring上下文中@Controller
public class BarController {
    //映射访问路径
    @RequestMapping("/bar")
    public String bar(Model model){
        //Spring MVC会自动实例化一个Model对象用于向视图中传值
        model.addAttribute("message", "这是通过注解定义的一个控制器中的Action");
        //返回视图位置
        return "foo/index";
    }
}

还需要修改Spring MVC配置文件,启动自动组件扫描功能,在beans中增加如下配置:

复制代码
<!-- 自动扫描包,实现支持注解的IOC -->
<context:component-scan base-package="com.zhangguo.springmvc02" />
<body>
	${message}
</body>

base-package 属性用于指定扫描的基础包,可以缩小扫描的范围。运行结果如下:

小结:从代码与运行结果可以看出BarController和FooController同时都指定了一个视图foo/index.jsp,但是页面的结果是不一样的,从这里可以看出视图是被复用的,而控制器与视图之间是弱耦合关系。

@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

二、五种映射

1)标准映射

标准URL映射是最简单的一种映射,例如:

@RequestMapping("/index") 或 @RequestMapping(value="/index")

访问路径:类上面的访问路径+方法上的访问路径

测试:

2)限制请求方法映射

限制请求方法:

3) 限定请求参数

可以防止用户把信息注入进来

总结

1.标准URL映射

2.Ant风格的URL映射

3.占位符映射 Restful风格 @RequsetMapping(show/{userid}/{name}) 方法中 (@PathVariable (userid) String id)

4.限制请求方法映射 @RequestMapping(value="show2",method=requestMehtod.POST)

5.限制参数映射 #RequestMapping(value="show3",params="abc")方法中(@RequestParam("abc") String abcid)

这五种映射都是书写在请求方法上。

三、请求参数乱码问题

相关推荐
shaibdoio1 分钟前
AI主动获客的意图识别工程实现:从规则匹配到模型微调
java·开发语言·人工智能·长沙瞬维ai
for_ever_love__14 分钟前
MySQL 事务隔离级别讲透:MVCC、幻读与四个级别怎么选
java·数据库·mysql·事务·mvcc·不可重复读·幻读
CoderYanger1 小时前
一轮复习——F.动态规划模型总结(入门篇)
java·开发语言·数据结构·算法·leetcode·职场和发展·动态规划
她的男孩1 小时前
打印模板草稿能保存,一点发布就报主从关系:我们把校验拆成了两档
java·spring boot·后端
小鹿的周先生1 小时前
第19章-Agent
java·spring·ai
溪语流沙1 小时前
【Web全栈进阶】FastAPI工程化:APIRouter拆分 + 配置 + 依赖注入
java·前端·fastapi
Frank_refuel1 小时前
【C++】智能指针
开发语言·c++
写后端的胖头鱼1 小时前
Redis 的 RDB 和 AOF
java·数据库·redis
cxoptics1 小时前
LBO 激光损伤阈值 LIDT 典型数值?如何避免晶体打坏?
java
泡海椒1 小时前
JQuick-Excel VALIDATION 实战:用作用范围约束 Excel 导入校验
开发语言·python·excel