前言接口定义实现
基础配置编写一个Controller类springmvc-servlet.xmltest.jsp测试缺点 注解定义实现(推荐)
编写一个ControllerTest2重点好处 RequestMapping
前言控制器Controller
- 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现。控制器负责解析用户的请求并将其转换为一个模型,也就是用model来传输数据。在Spring MVC中一个控制器类可以包含多个方法。在Spring MVC中,对于Controller的配置方式有很多种。
可以看我的上一篇博客进行基础的环境配置
Spring注解版
删除HelloController以及注释掉springmvc-servlet.xml中的扫描类和驱动类,只留下视图解析。
springmvc-servlet.xml
编写一个Controller类
ControllerTest01
package com.cjh.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//只要实现了Controller 接口的类,说明这就是一个控制器了
public class ControllerTest01 implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("msg","ControllerTest01");//添加数据
mv.setViewName("test");//设置视图的名字,跳转的位置
return null;
}
}
这里通过implements Controller实现Controller接口。
通过 mv.addObject来添加访问数据,通过 mv.setViewName来设置视图的名字,即跳转的位置为test.jsp
在Spring配置文件中,添加bean,来设置其访问路径。
test.jsp
在WEB-INF中新建jsp文件夹,这样将视图放入,一定要在WEB-INF/jsp中,对应我们的视图解析器。
<%--
Created by IntelliJ IDEA.
User: CJH
Date: 2022/3/20
Time: 15:38
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
${msg}
测试
访问http://localhost:8000/springmvc_04_controller__war_exploded/hello1
缺点一个控制器中只有一个方法,如果要多个方法则需要定义多个Controller;定义的方式比较麻烦
注解定义实现(推荐) 编写一个ControllerTest2package com.cjh.controller;
import org.springframework.stereotype.Component;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
//代表这个类已经被spring接管了
@Component
public class ControllerTest02 {
@RequestMapping("/hello2")
public String test1(Model model){
//传数据用model来传数据就可以
model.addAttribute("msg","ControllerTest02");
return "test";
}
}
如果返回值是String,像上面返回的是一个test,并且有具体的页面可以跳转,那么就会被视图解析器解析,如果没有,就会报404
重点1、这里我们通过@Component这个注解来实现controller
2、通过 @RequestMapping来设置访问路径
3、通过model.addAttribute来传输数据,以及跳转的视图。
好处这样不需要在spring配置文件中,添加bean文件,简化了操作。
可以在controller中写多个方法,可以共用一个页面。
RequestMapping@RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
为了测试结论更加准确,我们可以加上一个项目名测试 myweb
只注解在方法上面
@Controller
public class TestController {
@RequestMapping("/hello1")
public String test(){
return "test";
}
}
访问路径:http://localhost:8080 / 项目名 / hello1
同时注解类与方法
@Controller
@RequestMapping("/admin")
public class TestController {
@RequestMapping("/hello1")
public String test(){
return "test";
}
}
访问路径:http://localhost:8080 / 项目名/ admin /hello1 , 需要先指定类的路径再指定方法的路径,就是加多一层地址。
最好不要在类上面写路径,报错的话不方便排查,可以直接这样写 @RequestMapping("admin/hello1")。



