SpringMVC实现Controller的三种方式总结

目录
  • 实现Controller的三种方式
    • 1.实现Controller接口
    • 2.实现HttpRequestHandler接口
    • 3.全注解
  • 关于SpringMVC的控制器(Controller)
    • 控制器Controller

实现Controller的三种方式

1.实现Controller接口

实现Controller接口,重写handleRequest方法,ModelAndView对象是一个模型视图对象,既可以添加数据,又可以保存页面信息,并且处理请求的方式是转发。这个对象要拆成两部分来看

model和view。转发到下一个页面之后,会把 model中的数据渲染到view中展示。在页面可以使用el表达式获取。Model中数据的范围是 request。

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * @className: PACKAGE_NAME.MyController1
 * @description: TODO
 * @author: ych
 * @create: 2021-06-02 20:25
 */
public class MyController1 implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        //实例化ModelAndView对象
        ModelAndView modelAndView = new ModelAndView();
        //放数据,相当于request.setAttribute("msg", "我是数据");
        modelAndView.addObject("msg", "我是数据");
        //放视图
        modelAndView.setViewName("forward:/WEB-INF/jsp/show.jsp");
        return modelAndView;
    }
}

Spring-mvc.xml配置文件中添加,如下信息;

<bean class="MyController1" id="controller1"/>

2.实现HttpRequestHandler接口

实现HttpRequestHandler接口,重写 handleRequest方法。这个实现方式与servlet 基本一致。

import org.springframework.web.HttpRequestHandler;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * @className: PACKAGE_NAME.MyController2
 * @description: TODO
 * @author: ych
 * @create: 2021-06-02 20:28
 */
public class MyController2 implements HttpRequestHandler {
    @Override
    public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //共享数据到request
        request.setAttribute("msg", "我是数据");
        //请求转发
        request.getRequestDispatcher("/WEB-INF/jsp/show.jsp").forward(request, response);
    }
}

Spring-mvc.xml配置文件中添加,如下信息;

<bean class="MyController2" id="controller2"/>

3.全注解

全注解,开发中写的@Controller注解必须配合扫描才能变成控制器。扫描组件会把头部带有注解的类管理起来。

@RequestMapping是提供请求访问路径的注解,比如UserController上添加的@RequestMapping(“/”),这是相对路径,相对于整个程序来说的,所以可以在项目下直接访问到这个控制器类。

方法 test的头部添加@RequestMapping(“/test.do”),表示访问到这个控制器类之后,在访问路径上再添加上“/test.do”才能访问到这个方法。

一个注解控制器类中可以定义很多的方法,只需要在方法头部添加不同的@RequestMapping 的值就可以吧这些方法作为不同的控制器使用,所以注解模式在开发中最常用。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
/**
 * @className: PACKAGE_NAME.MyController3
 * @description: TODO
 * @author: ych
 * @create: 2021-06-02 20:32
 */
@Controller
@RequestMapping("/")
public class MyController3 {
    @RequestMapping("/test1.do")
    public ModelAndView test(){
        //创建模型视图对象
        ModelAndView modelAndView = new ModelAndView();
        //添加模型数据,相当于request.setAttribute("msg", "helloworld");
        modelAndView.addObject("msg", "helloworld");
        //放视图
        modelAndView.setViewName("forward:/WEB-INF/jsp/show.jsp");
        return modelAndView;
    }
}

在spring-mvc.xml文件中必须增加上扫描组件:

<context:component-scan base-package="需要扫描的包路径"/>

关于SpringMVC的控制器(Controller)

控制器Controller

控制器负责解析用户的请求并将其转换为一个模型

在SpringMVC中一个控制器可以包含多个方法

SpringMVC中对于Controller的配置方式

  • 实现Controller接口
  • 注解实现Controller

1、实现Controller接口

1、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

2、springmvc-servlet.xml

    <context:component-scan base-package="com.springmvc.controller"/>
    <mvc:default-servlet-handler/>
    <mvc:annotation-driven/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

3、创建Controller类

package com.springmvc.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 Test1Controller implements Controller {
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg","Controller");
        modelAndView.setViewName("test");
        return modelAndView;
    }
}

在springmvc-servlet.xml中为Test1Controller注册bean

<bean id="/test1" class="com.springmvc.controller.Test1Controller"/>

2、注解实现Controller

1、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

2、springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!-- 自动扫描指定的包,下面所有注解类交给IOC容器管理 -->
    <context:component-scan base-package="com.springmvc.controller"/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
<!--    <bean id="/test1" class="com.springmvc.controller.Test1Controller"/>-->
</beans>

3、Test2Controller

      //被这个注解的类中的所有方法,如果返回值是String,并且有具体页面可以跳转,那么就会被视图解析器解析;
      @Controller
      public class Test2Controller {
      
          @RequestMapping("/t2")
          public String test2(Model model){
              model.addAttribute("msg","注解实现Controller");
              return "test";
          }
      }

4、test.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • springMVC不扫描controller中的方法问题

    目录 springMVC不扫描controller 下面是正确的spring-mvc.xml文件 那我遇到这个问题的原因是什么呢? springMVC包扫描问题 为什么@COntroller要放在springMVC中? springMVC不扫描controller 最近把之前的一个Maven项目在一个新的电脑环境上导入Eclipse,启动时却发现不扫描 controller 中的方法 下面是正确的 spring-mvc.xml 文件 <?xml version="1.0" enc

  • 关于SpringMVC在Controller层方法的参数解析详解

    目录 自定义参数解析器 实现效果 实现和配置 Spring提供解析器 一些使用Tricky 总结 使用版本: spring-boot: 2.1.6.RELEASE sping: 5.1.8.RELEASE java: openjdk 11.0.13 自定义参数解析器 为了能够实现自定义参数解析器,只需要实现 HandlerMethodArgumentResolver 并将添加到 WebMvcConfigurer#addArgumentResolvers 即可. 实现效果 下面以添加一个获取请求头

  • Springmvc工程跳转controller无效的解决

    目录 Springmvc跳转controller无效 1.springmvc-servlet.xml 2.web.xml,在改配置文件中将 springmvc无法进入controller.后台也不报错 1.检查是否配置 2.是否配置 3.controller类是否加上 4.视图解析器 5.web.xml文件是否配置 Springmvc跳转controller无效 在实际搭建Springmvc工程,通过controller进行业务处理和逻辑跳转,经常发现接口URL拼写正确但是访问不到控制层,这里

  • SpringMVC项目访问controller时候报404的解决

    目录 SpringMVC访问controller时候报404 在网上搜各种方法都没有解决 终于解决 SpringMVC 无法访问到controller的可能原因 从网上查的资料 SpringMVC访问controller时候报404 自己写的SpringMVC项目,突然发现访问controller路径的时候页面显示404,看控制台也没有报严重错误,只是说该路径找不到,并且单独访问jsp也能正常访问. 控制台报这种错误 No mapping found for HTTP request with

  • SpringMVC对自定义controller入参预处理方式

    目录 Spring Mvc对自定义controller入参预处理 HandlerMethodArgumentResolver接口说明 初学者一般喜欢类似下面的代码 我们需要定义如下的一个参数分解器 注册自定义分解器 SpringMVC技巧之通用Controller 1. 前言 2. 问题 3. 解决方案 4. 使用 5. 特殊需求 6. 完善 Spring Mvc对自定义controller入参预处理 在初学springmvc框架时,我就一直有一个疑问,为什么controller方法上竟然可以放

  • SpringMVC中@controllerAdvice注解的详细解释

    目录 1.全局异常处理 2.全局数据绑定 3.全局数据预处理 总结 这是一个增强的 Controller.使用这个 Controller ,可以实现三个方面的功能: 1.全局异常处理: 2.全局数据绑定 3.全局数据预处理 1.全局异常处理 使用 @ControllerAdvice 实现全局异常处理,只需要定义类,添加该注解即可定义方式如下: @ControllerAdvice public class MyGlobalExceptionHandler { @ExceptionHandler(E

  • springmvc不进入Controller导致404的问题

    目录 一.摘要 二.出现404的分类以及会导致的原因 1.启动项目后,无法访问主页出现的404 2.项目启动并且成功进入主页后,访问其他页面出现的404 三.分情况详细说明 3.1.先附上并简单介绍一下我的工程结构目录图 3.2.启动项目后,无法访问主页出现404 ​ 一.摘要 emmmm.. 对springmvc不太熟练的情况下,如果不出意外的话,项目启动后出现404页面是很烦人. 在这里,我记录一下可能会导致出现这种情况的原因<因为之前的文章结构不算是很清晰,所以这次做一些修改> 二.出现

  • SpringMVC实现Controller的三种方式总结

    目录 实现Controller的三种方式 1.实现Controller接口 2.实现HttpRequestHandler接口 3.全注解 关于SpringMVC的控制器(Controller) 控制器Controller 实现Controller的三种方式 1.实现Controller接口 实现Controller接口,重写handleRequest方法,ModelAndView对象是一个模型视图对象,既可以添加数据,又可以保存页面信息,并且处理请求的方式是转发.这个对象要拆成两部分来看 mod

  • SpringMVC全局异常处理的三种方式

    在 JavaEE 项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大. SpringMvc 对于异常处理这块提供了支持,通过 SpringMvc 提供的全局异常处理机制,能够将所有类型的异常处理从各个处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护. SpringMVC全局异常处理的三

  • SpringMVC返回json数据的三种方式

    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等. 1.第一种方式是spring2时代的产物,也就是每个json视图controller配置一个Jsoniew. 如:<bean

  • springmvc url处理映射的三种方式集合

    目录 一.SpringMVC简介 二.工作流程与介绍 三.代码截图 以下组件通常使用框架提供实现: 1.DispatcherServlet:前端控制器 2.HandlerMapping:处理器映射器 3.Handler:处理器 4.HandlAdapter:处理器适配器 5. ViewResolver:视图解析器 6.View:视图 四.适配器作用 一.SpringMVC简介 SpringMVC是一种基于Spring实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC架构模

  • 解决SpringBoot跨域的三种方式

    一.什么是跨域 1.1.为什么会出现跨域问题 出于浏览器的同源策略限制.同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现.同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互.所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port) 简单说A应用只能访问

  • 浅谈Java 三种方式实现接口校验

    本文介绍了Java 三种方式实现接口校验,主要包括AOP,MVC拦截器,分享给大家,具体如下: 方法一:AOP 代码如下定义一个权限注解 package com.thinkgem.jeesite.common.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import j

  • 详解如何在ASP.NET Core Web API中以三种方式返回数据

    在 ASP.NET Core 中有三种返回 数据 和 HTTP状态码 的方式,最简单的就是直接返回指定的类型实例,如下代码所示: [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { [HttpGet] public IEnumerable<WeatherForecast> Get() { var rng = new Random()

  • SpringMVC异步处理的 5 种方式示例详解

    前段时间研究了下 diamond 的原理,其中有个重要的知识点是长连接的实现,用到了 servlet 的异步处理.异步处理最大的好处是可以提高并发量,不阻塞当前线程.其实 Spring MVC 也支持了异步处理,本文记录下相关的技术点. 异步处理 demo 如果要启用异步返回,需要开启 @EnableAsync.如下的代码中,使用 DeferredResult 进行异步处理. 请求进来后,首先创建 DeferredResult 对象,设置超时时间为 60 秒.然后指定DeferredResult

  • 详解Springboot下载Excel的三种方式

    汇总一下浏览器下载和代码本地下载实现的3种方式. (其实一般都是在代码生成excel,然后上传到oss,然后传链接给前台,但是我好像没有实现过直接点击就能在浏览器下载的功能,所以这次一起汇总一下3种实现方式.)

  • 详解SpringBoot禁用Swagger的三种方式

    目录 摘要 方法 禁用方法1: 禁用方法2: 禁用方法3: 摘要 在生产环境下,我们需要关闭swagger配置,避免暴露接口的这种危险行为. 方法 禁用方法1: 使用注解 @Value() 推荐使用 package com.dc.config; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Be

随机推荐