准备工作
- 添加maven依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.1</version>
</dependency>
- 在工程中添加web支持(Tomcat服务器)
- 配置web下web.xml,注册DispatcherServlet,并且绑定springMVC配置文件
<?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">
<!--1.注册DispatcherServlet-->
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--通过初始化参数指定SpringMVC配置文件的位置,关联一个springmvc的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc</param-value>
</init-param>
<!--启动级别-1,启动顺序,数字越小,启动越早-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--设置请求被springmvc拦截-->
<servlet-mapping>
<!--/ 匹配所有的请求;(不包括.jsp)-->
<!--/* 匹配所有的请求;(包括.jsp)-->
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
注意:
/*会匹配 *.jsp,会出现返回 jsp视图 时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错
- 编写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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
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/aop
https://www.springframework.org/schema/aop/spring-aop.xsd">
<!--配置URL处理映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 配置处理适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--配置视图解析器DispatcherServlet传给他的ModelAndView-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="WEB-INF/jsp/"/>
<!-- 后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<!-- 配置Handle,BeanNameUrlHandlerMapping会根据bean的名字/hello进行映射-->
<bean id="/hello" class="com.chenhui.controller.Hello"/>
</beans>
- 编写操作业务的Controller,要么实现Controller接口,要么增加注解,实现接口Controller重写handleRequest方法,需要返回一个ModelAndView,装数据,封视图
//这个类操作业务,要么实现Controller接口,要么增加注解@Controller
//实现Controller接口,重写handleRequest方法,需要返回一个ModelAndView,装数据,封视图
public class Hello implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//ModelAndView 模型和视图
ModelAndView modelAndView = new ModelAndView();
//封装对象,放在ModelAndView中,作为Model
modelAndView.addObject("msg","Hello SpringMVC");
//封装要跳转的视图,放在ModelAndView中
modelAndView.setViewName("hello");
//这里要跳转的视图为:WEB-INF/jsp/hello.jsp
return modelAndView;
}
}
- 将业务类Controller交给SpringIOC容器管理,注册bean
- 编写要跳转的jsp页面(可以取出ModelandView存放的数据)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Kuangshen</title>
</head>
<body>
${msg}
</body>
</html>
- 启动Tomcat,并访问请求路径
总结:实现接口Controller定义控制器是较老的办法
缺点是:一个控制器中只有一个方法,如果要多个方法则需要定义多个Controller,定义的方式比较麻烦
在web阶段可能遇到的问题:访问出现404,排错步骤:
- 查看控制台输出,看一下是不是缺少了什么jar包
- 如果jar包存在,显示无法输出,就在IDEA的项目发布中,添加lib依赖
- 重启Tomcat 即可解决