SpringMVC学习笔记02-------第一个SpringMVC程序
在上一节中,我们讲解了 什么是SpringMVC以及它的执行原理!
SpringMVC学习笔记01-----SpringMVC简介
现在我们来看看如何快速使用SpringMVC编写我们的程序吧!
方式一: 配置版
-
第一步: 创建一个maven项目,引入所需依赖
<!-- springMVC相关依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.15</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency>
-
第二步:右击项目,将该项目改为web项目
-
第三步:创建SpringMVC配置文件
applicationContext.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" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> </beans>
-
第四步: 在
applicationContext.xml
配置文件配置处理器映射器、处理器适配器以及视图解析器<!-- 添加处理器映射器 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- 添加处理器适配器 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!-- 添加视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/jsp/"/> <!-- 后缀 --> <property name="suffix" value=".jsp"/> </bean> <!-- bean的id为我们之后请求的id --> <bean id="/hello" class="com.xdw.controller.HelloController"/>
-
第五步:在web项目下的
web.xml
文件中配置DispatcherServlet
<servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <!-- 1. /表示匹配所有请求,不包括jsp请求 2. /* 表示匹配所有请求,包括jsp请求 --> <url-pattern>/</url-pattern> </servlet-mapping>
-
第六步:编写HelloController,实现Spring的
Controller
接口package com.xdw.controller; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class HelloController implements Controller { @Override public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws Exception { ModelAndView mv = new ModelAndView(); mv.addObject("msg", "Hello World!"); // 因为视图解析器中配置了前缀与后缀,会自动寻找/WEB-INF/jsp目录下的.jsp文件 mv.setViewName("hello"); return mv; } }
-
第七步:在
applicationContext.xml
文件中注册我们刚刚新建的HelloController
<!-- bean的id为我们之后请求的路径 --> <bean id="/hello" class="com.xdw.controller.HelloController"/>
-
在WEB-INF/jsp目录下创建
hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>注解跳转页</title> </head> <body> ${msg} </body> </html>
-
第八步:配置tomcat,启动项目,测试!
可能遇到的问题:访问出现404,排查步骤
- 查看控制台输出,看一下是不是缺少了什么jar包。
- 如果jar包存在,显示无法输出,就在IDEA的项目发布中,添加lib依赖!
- 重启Tomcat 即可解决!
从上述流程,我们可以看出有点麻烦,在实际的开发过程中,我们通常都使用注解方式!
方式二:注解版
-
创建maven项目,引入对应依赖
-
将创建好的项目变为web项目
-
创建SpringMVC的配置文件
applicationContext.xml
-
在创建好的
applicationContext.xml
配置文件中配置处理器映射器,处理器适配器以及视图解析器<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.xdw.controller"/> <!-- 让SpringMVC不处理静态资源 比如css等相关资源 --> <mvc:default-servlet-handler/> <!-- 配置支持注解的 处理器映射器与处理器适配器 --> <!-- 支持mvc注解驱动 在spring中一般采用@RequestMapping注解来完成映射关系 要想使@RequestMapping注解生效 必须向上下文中注册DefaultAnnotationHandlerMapping 和一个AnnotationMethodHandlerAdapter实例 这两个实例分别在类级别和方法级别处理。 而annotation-driven配置帮助我们自动完成上述两个实例的注入。 --> <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>
-
在
web.xml
文件中配置DispatcherServlet
<servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
-
编写
HelloCOntroller
package com.xdw.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class HelloController { @RequestMapping("/hello") public String hello(Model model) { model.addAttribute("msg", "注解版,你好!"); return "hello"; } }
-
@Controller是为了让Spring IOC容器初始化时自动扫描到;
-
@RequestMapping是为了映射请求路径,这里因为只有方法上都有映射所以访问时应该是/hello;
-
方法中声明Model类型的参数是为了把Action中的数据带到视图中;
-
方法返回的结果是视图的名称hello,加上配置文件中的前后缀变成WEB-INF/jsp/hello.jsp。
-
-
在WEB-INF/jsp目录下创建
hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>注解跳转页</title> </head> <body> ${msg} </body> </html>
-
配置Tomcat,启动项目测试!
小结
实现步骤其实非常的简单:
-
新建一个web项目
-
导入相关jar包
-
编写web.xml , 注册DispatcherServlet
-
编写springmvc配置文件
-
接下来就是去创建对应的控制类 , controller
-
最后完善前端视图和controller之间的对应
-
测试运行调试.
使用springMVC必须配置的三大件:处理器映射器、处理器适配器、视图解析器
通常,我们只需要手动配置视图解析器,而处理器映射器和处理器适配器只需要开启注解驱动即可,而省去了大段的xml配置