------------------------------------------------------分割线------------------------------------------------------
---------------------------------------------------以下是正文------------------------------------------------------
一、问题背景以及描述
在《一个简单的web项目,用Servlet实现一个简单的页面访问》一文中我们用Servlet实现了简单的页面访问,这次我们用SpringMVC框架来精简快捷地实现同样的功能。
二、测试环境
JDK:jdk1.8.0_151
开发软件:IntelliJ IDEA Ultimate 2020.2.3
Maven:apache-maven-3.6.3
Tomcat:apache-tomcat-9.0.41
三、项目结构
四、操作步骤
1、新建一个普通Maven项目,且将其指定为Web项目,如下图,
温馨提醒:如若不清楚如何新建一个普通Maven项目以及如何将其指定为Web项目,请点击前面链接跳转至对应文章查看。
2、在子项目[springmvc-02-hellomvc]
→
\rightarrow
→[pom.xml]文件中添加以下依赖,
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
</dependencies>
添加完依赖后,我们还要确保另一个地方也要有依赖jar包,不然运行项目会报错,具体操作如下:点击[文件]
→
\rightarrow
→[项目结构…],弹出以下窗口,
3、接着我们先来新建一个视图,具体操作如下:在子项目[springmvc-02-hellomvc]
→
\rightarrow
→[web]
→
\rightarrow
→[WEB-INF]文件夹下新建一个[jsp]文件夹,接着在[jsp]文件夹里新建一个[test.jsp]文件,然后在文件里添加代码[${msg}],如下图,
4、接着我们在子项目[springmvc-02-hellomvc] → \rightarrow →[web] → \rightarrow →[WEB-INF] → \rightarrow →[web.xml]文件中配置一个DispatcherServlet,添加的代码如下,
<!-- 配置DispatcherServlet:这个是SpringMVC的核心,所有的请求都会经过它 -->
<!-- DispatcherServlet又叫请求分发器,也叫前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- DispatcherServlet要绑定Spring的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!-- 启动级别设为1 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!--
在SpringMVC中,“/”和“/*”的区别
/表示只匹配所有的请求,不会去匹配jsp页面
/*表示匹配所有的请求,包括jsp页面
-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
5、接着,在子项目[springmvc-02-hellomvc] → \rightarrow →[src] → \rightarrow →[main] → \rightarrow →[resources]文件夹下新建一个Spring配置文件,文件名为[springmvc-servlet.xml],该配置文件就是上面[web.xml]所绑定的,此时,我们往Spring配置文件里添加以下代码,
<?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.handler.BeanNameUrlHandlerMapping" />
<!-- 处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver" >
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
</bean>
<!-- BeanNameUrlHandlerMapping bean -->
<bean id="/hello" class="com.yuhoutian.controller.HelloController" />
</beans>
6、接着,我们先在子项目[springmvc-02-hellomvc] → \rightarrow →[src] → \rightarrow →[main] → \rightarrow →[java]文件夹下新建一个[com.yuhoutian.controller]文件夹,然后在[controller]文件夹下新建一个[HelloController.java]文件,紧接着在文件里添加以下代码,
package com.yuhoutian.controller;
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 HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mv = new ModelAndView();
//业务代码
String result = "HelloSpringMVC";
mv.addObject("msg", result);
//视图跳转
mv.setViewName("test");
return mv;
}
}
7、到这里,代码就全部完成了!接着是配置Tomcat,具体如何配置在《一个简单的web项目,用Servlet实现一个简单的页面访问》一文中有详细介绍,有需要的小伙伴请自行前往查看,这里就不赘述了,配置完Tomcat就可以运行项目了。
8、最后,我再帮你们捋一下流程调用:
-
首先,用户在浏览器上输入网址[http://localhost:8080/hello]后回车,
-
回车后用户想访问该网址的请求便会被DispatcherServlet接收,接着DispatcherServlet便会在类路径下搜索[springmvc-servlet.xml]文件并执行它
-
在[springmvc-servlet.xml]文件中,首先运行处理器映射器,它会映射到[/hello],接着运行处理器适配器,它会找到并运行[com.yuhoutian.controller.HelloController]文件,
-
运行[com.yuhoutian.controller.HelloController]文件后,最终是返回一个[ModelAndView(视图)],[ModelAndView(视图)]里有两部分,一个是业务代码,它会将要显示的内容[HelloSpringMVC]赋给[msg],然后给到[test.jsp] 文件获取并显示出来,另一个是视图跳转,它会回到[springmvc-servlet.xml]文件中的视图解析器,视图解析器会对其进行解析拼接,加上前缀后缀,最终拼接出[/WEB-INF/jsp/test.jsp],
五、测试及结果
所有内容就到这里了,希望对你们有所帮助!