springMVC-测试Controller控制器

1 准备阶段

1.1 引入依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
</dependency>

1.2 在IDEA项目发布中,添加lib依赖

与这篇博客的第2步完全相同: springMVC-HelloSpringMVC

1.3 编写springmvc的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--视图解析器-->
    <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.4 在web.xml中配置DispatchServlet

<?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">
    <!--配置DispatchServlet-->
    <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.5 编写一个跳转的jsp页面

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

2 测试实现Controller接口的方式

2.1 编写Controller类

//只要实现了Controller接口的类,说明这就是一个控制器了
public class ControllerTest1 implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg","Controller接口");
        modelAndView.setViewName("test");
        return modelAndView;
    }
}

2.2 在springmvc的配置文件中注册bean

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

2.3 启动Tomcat,测试

3 测试使用@Controller注解方式(推荐使用)

3.1 在springmvc的配置文件中头加入context约束

xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd

3.2 在springmvc的配置文件中添加注解扫描

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

3.3 编写两个Controller类

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

3.4 启动Tomcat,测试

注:不同的地址对应不同的方法

4 补充

4.1 在方法的参数中加入request和response,可以在方法中使用

@Controller
public class ModelTest1 {
    @RequestMapping("/m1/t1")
    public String test(HttpServletRequest request, HttpServletResponse response){
        HttpSession session = request.getSession();
        System.out.println(session.getId());
        return "test";
    }
}

4.2 启动Tomcat,测试

控制台成功输出

5 总结:

  • 使用实现Controller接口的方式,一个控制器中只有一个方法,如果要多个方法就需要多个Controller,定义方式比较麻烦
  • @Controller注解方式比较灵活,一个Controller可以定义多个方法.
  • 多个请求可以指向同一个页面,只需要携带不同的数据,就可以在同一个页面中显示不同的数据,视图被复用,说明控制器和视图之间是弱耦合关系
posted @ 2022-01-22 12:06  从0开始丿  阅读(218)  评论(0编辑  收藏  举报