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 总结:
- 使用实现Controller接口的方式,一个控制器中只有一个方法,如果要多个方法就需要多个Controller,定义方式比较麻烦
- @Controller注解方式比较灵活,一个Controller可以定义多个方法.
- 多个请求可以指向同一个页面,只需要携带不同的数据,就可以在同一个页面中显示不同的数据,视图被复用,说明控制器和视图之间是弱耦合关系