溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SpringMVC實現(xiàn)Controller的方式有哪些

發(fā)布時間:2022-02-22 10:53:15 來源:億速云 閱讀:148 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了SpringMVC實現(xiàn)Controller的方法有哪些的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇SpringMVC實現(xiàn)Controller的方法有哪些文章都會有所收獲,下面我們一起來看看吧。

實現(xiàn)Controller的三種方式

1.實現(xiàn)Controller接口

實現(xiàn)Controller接口,重寫handleRequest方法,ModelAndView對象是一個模型視圖對象,既可以添加數(shù)據(jù),又可以保存頁面信息,并且處理請求的方式是轉(zhuǎn)發(fā)。這個對象要拆成兩部分來看

model和view。轉(zhuǎn)發(fā)到下一個頁面之后,會把 model中的數(shù)據(jù)渲染到view中展示。在頁面可以使用el表達(dá)式獲取。Model中數(shù)據(jù)的范圍是 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();
        //放數(shù)據(jù),相當(dāng)于request.setAttribute("msg", "我是數(shù)據(jù)");
        modelAndView.addObject("msg", "我是數(shù)據(jù)");
        //放視圖
        modelAndView.setViewName("forward:/WEB-INF/jsp/show.jsp");
        return modelAndView;
    }
}

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

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

2.實現(xiàn)HttpRequestHandler接口

實現(xiàn)HttpRequestHandler接口,重寫 handleRequest方法。這個實現(xiàn)方式與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 {
        //共享數(shù)據(jù)到request
        request.setAttribute("msg", "我是數(shù)據(jù)");
        //請求轉(zhuǎn)發(fā)
        request.getRequestDispatcher("/WEB-INF/jsp/show.jsp").forward(request, response);
    }
}

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

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

3.全注解

全注解,開發(fā)中寫的@Controller注解必須配合掃描才能變成控制器。掃描組件會把頭部帶有注解的類管理起來。

@RequestMapping是提供請求訪問路徑的注解,比如UserController上添加的@RequestMapping(“/”),這是相對路徑,相對于整個程序來說的,所以可以在項目下直接訪問到這個控制器類。

方法 test的頭部添加@RequestMapping(“/test.do”),表示訪問到這個控制器類之后,在訪問路徑上再添加上“/test.do”才能訪問到這個方法。

一個注解控制器類中可以定義很多的方法,只需要在方法頭部添加不同的@RequestMapping 的值就可以吧這些方法作為不同的控制器使用,所以注解模式在開發(fā)中最常用。

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(){
        //創(chuàng)建模型視圖對象
        ModelAndView modelAndView = new ModelAndView();
        //添加模型數(shù)據(jù),相當(dāng)于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="需要掃描的包路徑"/>

關(guān)于SpringMVC的控制器(Controller)

控制器Controller

控制器負(fù)責(zé)解析用戶的請求并將其轉(zhuǎn)換為一個模型

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

SpringMVC中對于Controller的配置方式

  • 實現(xiàn)Controller接口

  • 注解實現(xiàn)Controller

1、實現(xiàn)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、創(chuàng)建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、注解實現(xiàn)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,并且有具體頁面可以跳轉(zhuǎn),那么就會被視圖解析器解析;
      @Controller
      public class Test2Controller {
      
          @RequestMapping("/t2")
          public String test2(Model model){
              model.addAttribute("msg","注解實現(xiàn)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>

關(guān)于“SpringMVC實現(xiàn)Controller的方法有哪些”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“SpringMVC實現(xiàn)Controller的方法有哪些”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI