当前位置:   article > 正文

SpringMVC04-Controller控制器配置_@controller("")如何配置

@controller("")如何配置

Controller控制器配置总结

控制器 Controller,复杂提供访问应用程序的行为,通常通过接口定义或者注解定义两种方式实现

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

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

在spring mvc中,对于controller的配置方式有很多种,下面讲述下具体的配置方式

1 方式一:实现Controller接口

第1步,新建一个maven子项目,并添加web能力支持,配置项目的lib包内容

第2步,编写web.xml,配置DispatcherServlet, 配置springmvc-servlet.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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

第3步,编写web.xml,配置springmvc-servlet.xml, 配置springmvc-servlet.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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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
        https://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">

    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

     <context:component-scan base-package="com.baifu.controller"/>

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

</beans>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

第4步 实现Controller,并在springmvc-servlet.xml里面注册一下

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 ControllerTest1 implements Controller {
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg", "ControllerTest1");
        modelAndView.setViewName("test");
        return modelAndView;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

springmvc-xml.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
        https://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">

    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <context:component-scan base-package="com.kuang.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>

    <bean id="/t1" class="com.baifu.controller.ControllerTest1"/>

</beans>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

第5步,对应的视图页面 /WEB-INF/jsp/test.jsp,只是获取一下模型的数据

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>实现Controller测试!</title>
</head>
<body>
${msg}
</body>
</html>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

第6步,配置tomcat,然后即可进行测试,输出 Test1Controller,测试成功!

小结:

1、实现接口controller定义控制器是一个较老的办法

2、缺点是:一个控制器中只有一个方法,如果要多个方法则需要定义多个Controller,定义的方式比较麻烦;

3、我们在springmvc-servlet.xml里面删掉控制器映射器,控制器适配器,一样可以实现,因为springmvc会根据默认的去查找

springmvc-servlet.xml
    <!--<context:component-scan base-package="com.kuang.controller"/>-->
    <!--<mvc:default-servlet-handler/>-->
    <!--<mvc:annotation-driven/>-->
  • 1
  • 2
  • 3
  • 4

2 使用注解方式实现controller

注解的说明:

@Component 代表是spring一个组件

@Service 代表service

@Controller 代表controller

@Repository

@Controller,注解的类,中的所有方法,如果返回值是String,并且有具体的页面可以跳转,那么就会被视图解析器解析(还要经过DispatcherServlet吗?还是直接给视图解析器啊?)!

注解方式必须开启如下三个配置

<context:component-scan base-package="com.kuang.controller"/>
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
  • 1
  • 2
  • 3

3 RequestMapping

用于映射URL到控制器类或一个特定的处理程序方法。可以用于类或者方法上,用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径

我们可以测试下,只在方法上面加RequestMapping

@Controller
public class ControllerTest3 {
    @RequestMapping("/test1")
      public String test(Model model){

        model.addAttribute("msg","Test2Controller");

        return "test";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

访问路径: http://localhost:8080/项目名/test1,运行测试,输出 Test2Controller,测试成功!

小结:可以发现,两个控制器指向了同一个视图 test.jsp(实现controller也指向的test.jsp),输出了不同的内容!说明视图是可以复用的,只要有一个大致的框架,向里面输出不同的内容就行了,控制器和视图之间是弱耦合的关系

4. @RequestMapping

@RequestMapping 注解用于映射 url 到控制器类或某个特定的方法,可用于类或方法上。 用于类上,表示类上的路径是方法上的路径的上一级!

  • 同时注解类和方法
@Controller
@RequestMapping("/admin")
public class ControllerTest2 {
    @RequestMapping("/test1")
   public String test(Model model){

        model.addAttribute("msg","Test333Controller");

        return "test";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

访问路径: http://localhost:8080/项目名/admin/test1,测试输出Test333Controller

5. 总结

两种方法都需要在 web.xml 中注册 DispatcherServlet,因为它是中央控制器!同时还要给它一个配置文件 springmvc-servlet.xml.

实现接口,就要配置相应的 bean;开启注解,只需要在对应的类中配置就行了!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/302604
推荐阅读
相关标签
  

闽ICP备14008679号