Controller的运用通常通过接口和注解的方式实现
第一种:实现Controller接口,Controller是一个接口,在org.springframework.web.servlet.mvc包下,接口中只有一个方法;
编写一个Controller类,负责实现Controller接口;
package com.guan.controller; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mv = new ModelAndView(); mv.addObject("msg","helloMVC!"); mv.setViewName("hello"); return mv; } }
编写完毕后,去Spring配置文件中注册请求的bean;name对应请求路径,class对应处理请求的类
<bean name="/hello" class="com.guan.controller.HelloController"/>
编写前端test.jsp,注意在WEB-INF/jsp目录下编写,对应我们的视图解析器
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>title</title> </head> <body> ${msg} </body> </html>
Spring配置文件中视图解析器注册的bean
<!--视图解析器:DispatcherServlet给他的ModelAndView--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver"> <!--前缀--> <property name="prefix" value="/WEB-INF/jsp/"/> <!--后缀--> <property name="suffix" value=".jsp"/> </bean>
第二种:注解方式实现
@Controller注解类型用于声明Spring类的实例是一个控制器
Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你的控制器,需要在Spring配置文件中声明组件扫描。
<!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 --> <context:component-scan base-package="com.guan.controller"/>
创建HelloController.java 类
package com.guan.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/helloController") public class HelloController { public String Hello(Model model){ model.addAttribute("msg","HelloMVC-Annotation!"); System.out.println("hello,哈哈哈"); return "hello"; } }
-
@RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
- Spring MVC 的 @RequestMapping 注解能够处理 HTTP 请求的方法, 比如 GET, PUT, POST, DELETE 以及 PATCH。
也可以这样用
@Controller @RequestMapping("/helloController")//类级别注解 public class HelloController { @RequestMapping("/a")//方法级别注解 public String Hello(Model model){ model.addAttribute("msg","HelloMVC-Annotation!"); System.out.println("hello,哈哈哈"); return "hello"; } }
@RequestMapping和Controller方法返回值
-
Controller方法返回值
Model 只有寥寥几个方法只适合用于储存数据,简化了新手对于Model对象的操作和理解;
ModelMap 继承了 LinkedMap ,除了实现了自身的一些方法,同样的继承 LinkedMap 的方法和特性;
ModelAndView 可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。
- 返回ModelAndView --无敌的,带着数据,返回视图路径()
//注意:这里我们先导入Controller接口 public class HelloController implements Controller { public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { //ModelAndView 模型和视图 ModelAndView mv = new ModelAndView(); //封装对象,放在ModelAndView中。Model mv.addObject("msg","HelloSpringMVC!"); //封装要跳转的视图,放在ModelAndView中 mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp return mv; } }
- 返回void --数据通过形参 Model model 或者 ModelMap model,但是没办法return视图。
(通过ServletAPI , 不需要视图解析器 情况下)
@Controller public class ResultGo { @RequestMapping("/result/t1") public void test1(HttpServletRequest req, HttpServletResponse rsp) throws IOException { rsp.getWriter().println("Hello,Spring BY servlet API");//通过HttpServletResponse 输出 } @RequestMapping("/result/t2") public void test2(HttpServletRequest req, HttpServletResponse rsp) throws IOException { rsp.sendRedirect("/index.jsp");//通过HttpServletResponse 重定向 } @RequestMapping("/result/t3") public void test3(HttpServletRequest req, HttpServletResponse rsp) throws Exception { //通过HttpServletResponse 转发 req.setAttribute("msg","/result/t3"); req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,rsp); } }
(通过SpringMVC,无视图解析器情况下)
@Controller public class ResultSpringMVC { @RequestMapping("/rsm/t1") public String test1(){ //转发 return "/index.jsp"; } @RequestMapping("/rsm/t2") public String test2(){ //转发二 return "forward:/index.jsp"; } @RequestMapping("/rsm/t3") public String test3(){ //重定向 return "redirect:/index.jsp"; } }
(通过SpringMVC,有视图解析器情况下)
@Controller public class ResultSpringMVC2 { @RequestMapping("/rsm2/t1") public String test1(){ //转发 return "test"; } @RequestMapping("/rsm2/t2") public String test2(){ //重定向 return "redirect:/index.jsp"; //return "redirect:hello.do"; //hello.do为另一个请求/ } }
- 返回字符串(官方推荐此种方式) --返回视图路径,数据通过形参 Model model 或者 ModelMap model
(视图逻辑名)
@RequestMapping("/a")//方法级别注解 public String Hello(Model model){ model.addAttribute("msg","HelloMVC-Annotation!"); System.out.println("hello,哈哈哈"); //指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/jsp/hello.jsp return "hello"; }
标签:return,RequestMapping,SpringMVC,视图,Controller,jsp,运用,public From: https://www.cnblogs.com/mo-de/p/16855651.html