1、SpringMVC的概述
Spring MVC框架是一个开源的Java平台,为开发强大的基于JavaWeb应用程序提供全面的基础架构支持,并且使用起来非常简单容易。
Spring web MVC框架提供了MVC(模型 - 视图 - 控制器)架构,用于开发灵活和松散耦合的Web应用程序的组件。 MVC模式使应用程序的不同组件(输入逻辑,业务逻辑和UI逻辑)合理有效的分离,同时又有效的将各组件组合一起完成功能。
**模型(Model):**封装了应用程序数据,通常它们将由POJO类组成。
**视图(View):**负责渲染模型数据,一般来说它负责生成客户端浏览器可以解释HTML输出。
**控制器(Controller):**负责处理用户请求并构建适当的模型,并将其传递给视图进行渲染。
2、SpringMVC的核心DispatcherServlet程序
在SpringMVC中有一个非常非常重要的核心组件.叫前端控制器 类名是: DispatcherServlet .
DispatcherServlet 是一个Servlet程序. 用于接收 客户端发送过来全部的请求.然后分发给不同的资源去处理请求。
3、SpringMVC的第一个Hello示例程序
3.1、SpringMVC——Hello world程序的步骤:
1、创建一个动态的web工程:
2、导入需要的jar包:
spring-aop-5.2.5.RELEASE.jar
spring-beans-5.2.5.RELEASE.jar
spring-context-5.2.5.RELEASE.jar
spring-core-5.2.5.RELEASE.jar
spring-expression-5.2.5.RELEASE.jar
spring-jcl-5.2.5.RELEASE.jar
spring-web-5.2.5.RELEASE.jar
spring-webmvc-5.2.5.RELEASE.jar
3、在web.xml 中配置前端控制器:
<!--
DispatcherServlet 是前端控制器.用于接收全部的请求.然后分发给不同资源处理.<br/>
SpringMVC框架也需要一个 Spring 容器
-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--
配置 SpringMVC 框架 的 Spring 容器配置文件路径
-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--
让前端控制器在web工程启动的时候创建,并创建Spring容器.
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<!--
表示接收全部请求
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
4、编写Controller控制器:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
*@Controller 注解作用相当于 : <br/>
* <bean id="helloController" class="com.atguigu.controller.HelloController" /> <br/>
* @Controller 表示Controller控制器 <br/>
*/
@Controller
public class HelloController {
/**
* @RequestMapping 可以配置一个请求地址给当前方法 <br/>
* / 表示请求地址为: http://ip:port/工程路径/ *映射* 到web目录 <br/>
* /hello 表示地址为: http://ip:port/工程路径/hello <br/>
*/
@RequestMapping(value = "/hello")
public String hello(){
System.out.println("SpringMVC Hello 程序");
// 返回值表示跳转的路径 === SpringMVC底层默认是以 请求转发 来进行页面的跳转
return "/pages/ok.jsp";
}
}
5、在src 源码目录下创建SpringMVC.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"
xmlns:context="http://www.springframework.org/schema/context"
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">
<!--配置包扫描-->
<context:component-scan base-package="com"></context:component-scan>
</beans>
6、准备页面:
Hello 程序的访问地址是: http://localhost:8080/20_springmvc_hello/hello
3.2、SpringMVC的配置文件的另一种存放方式:
SpringMVC的 配置文件 可以存放两个位置:
第一种: 放在源码目录下
需要在web.xml中去配置 配置文件的路径 , 也就是以下的配置内容:
<!--
配置 SpringMVC 框架 的 Spring 容器配置文件路径
-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
第二种: 放在WEB-INF目录下 ( 不需要到web.xml中去配置路径 )
规则如下: 如果SpringMVC的配置文件 放到WEB-INF目录下.则它的配置文件名必须遵守规则如下:
SpringMVC配置文件名: <servlet-name> + -servlet.xml
前端控制器的 名称是 :
在WEB-INF目录下的配置文件名是 : dispatcher-servlet.xm
l
4、视图解析器
视图解析器是SpringMVC框架中一个组件 , 它可以用来解析 Controller类中 业务方法返回字符串 为 请求的视图( 视图就是页面 )。
也就是说. 可以有一个组件用于解析 return "/pages/ok.jsp";
有视图解析器 和 没有视图解析器的时候 , 在Controller控制器 业务 方法中返回的路径是有不同的.。
没有视图解析器的时候:
在业务方法中 需要返回完整的路径 ===>>>> return "/pages/ok.jsp";
有视图解析器的时候 :
<!--
视图解析器
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--
完整的返回值: /pages/ok.jsp
/pages/ 是前缀
.jsp 是后缀
在有前缀,后缀的情况下.我们又管文件名叫 : 视图名 ok
-->
<!-- prefix 表示前缀 -->
<property name="prefix" value="/pages/" />
<!-- suffix 表示前缀 -->
<property name="suffix" value=".jsp" />
</bean>
那么在 Controller 控制器的业务方法中 返回值 只需要写 视图名即可。
当有了视图解析器之后 , Controller 控制器中的业务方法的返回值 都会和 视图解析器中的前缀和后缀做 字符串拼接操作,再得到完整的路径。
@RequestMapping(value = "/hello")
public String hello(){
System.out.println("SpringMVC Hello 程序");
// 返回值表示跳转的路径 === SpringMVC底层默认是以 请求转发 来进行页面的跳转
return "ok";
}
ok就会和前缀后缀做拼接 ====>>>> 前缀+视图名+后缀 得到完整的请求地址.
视图名是 : ok
前缀是 : /pages/
后缀是 : .jsp
完整的路径是 : /pages/ok.jsp