首页 > 其他分享 >SpringMVC中Controller的运用

SpringMVC中Controller的运用

时间:2022-11-03 20:02:30浏览次数:79  
标签:return RequestMapping SpringMVC 视图 Controller jsp 运用 public

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方法返回值

  1. 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

相关文章

  • springmvc-handlerInterceptor
    HandlerInterceptor接口给我们提供了3个方法:(1)preHandle:在执行controller处理之前执行,返回值为boolean,返回值为true时接着执行postHandle和afterCompletion,如果我们返......
  • 注解 @Component及@Controller等,@Autowired,@Resource
    注解:对于DI使用注解,将不再需要在Spring配置文件中声明bean实例。Spring中使用注解,需要在原有Spring运行环境基础上再做一些改变。需要在Spring配置文件中配......
  • 在登录上运用拦截器
    简述:跟着狂神学Java,使用SpringMVC的拦截器,敲的一个小demo,主要理解拦截器的使用。也可以去看看狂神的笔记  https://www.kuangstudy.com/zl/ssm#header3拦截器拦截器......
  • ABAP-字符串语法综合运用
    *&---------------------------------------------------------------------**&ReportZ10*&*&-----------------------------------------------------------------......
  • 2.什么是SpringMVC
    2.什么是SpringMVC概述:  SpringMVC是SpringFramework的一部分,是基于Java实现MVC的轻量级Web框架官方文档:https://docs.spring.io/spring/docs/5.2.0.RELEASE/spri......
  • SpringMVC源码-创建FormattingConversionServiceFactoryBean
    一、FormattingConversionServiceFactoryBeanFormattingConversionServiceFactoryBean实现了FactoryBean接口,可以通过getObject获取ConversionService。FormattingConver......
  • SpringBoot笔记:控制类Controller
    一个类想要变成控制类,只需要在类上加一个@Controller注解即可,其作用为指定请求路径及其对应的处理方法。一、请求路径常用注解:可以直接使用@RequestMapping、@PostMappi......
  • @RestController注解报红
    详情:创建springboot项目后,如图这两个位置报红   原因:pom文件中依赖的问题   解决:   ......
  • 关于SpringMvc使用@RequstBody报错500的原因
    在使用SpringMvc框架接收前端数据添加到数据库时报500错误,@PostMappingpublicResultsave(@RequestBodyBookbook){booleanflag=bookService.save......
  • SpringMVC
    SpringMVC简述是基于spring的一个框架,实际上就是spring的一个模块,专门做web开发的。可理解为servlet的一个升级。web开发底层是servlet,框架是在servlet基础......