SpringMVC——Hello SpringMVC

Hello SpringMVC

一、SpringMVC概述

  • Spring 为展现层提供的基于 MVC 设计理念的优秀的 Web 框架,是目前最主流的 MVC 框架之一
  • Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架。
  • Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任 何接口。
  • 支持 REST 风格的 URL 请求。
  • 采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。

二、SpringMVC是什么

  • 一种轻量级的、基于 MVC 的 Web 层应用框架。偏前端而不是基于业务逻辑层。Spring 框架的一个后续产品
  • Spring 框架结构图(新版本):
    在这里插入图片描述

三、SpringMVC可以干什么

  • 天生与 Spring 框架集成,如:(IOC,AOP)
  • 支持 Restful 风格
  • 进行更简洁的 Web 层开发
  • 支持灵活的 URL 到页面控制器的映射
  • 非常容易与其他视图技术集成,如:Velocity、FreeMarker 等等
  • 因为模型数据不存放在特定的 API 里,而是放在一个 Model 里(Map 数据结构实现, 因此很容易被其他框架使用)
  • 非常灵活的数据验证、格式化和数据绑定机制、能使用任何对象进行数据绑定, 不必实现特定框架的 API
  • 更加简单、强大的异常处理
  • 对静态资源的支持
  • 支持灵活的本地化、主题等解析

四、SpringMVC怎么耍

  • 将 Web 层进行了职责解耦,基于请求-响应模型
  • 常用主要组件 :
    • DispatcherServlet:前端控制器
    • Controller:处理器/页面控制器,做的是 MVC 中的 C 的事情,但控制逻辑转移 到前端控制器了,用于对请求进行处理
    • HandlerMapping :请求映射到处理器,找谁来处理,如果映射成功返回一个 HandlerExecutionChain 对象(包含一个 Handler 处理器(页面控制器)对象、多 个 HandlerInterceptor 拦截器对象)
    • View Resolver : 视图解析器,找谁来处理返回的页面。把逻辑视图解析为具体 的 View,进行这种策略模式,很容易更换其他视图技术;
      • 如 InternalResourceViewResolver 将逻辑视图名映射为 JSP 视图
    • LocalResolver:本地化、国际化
    • MultipartResolver:文件上传解析器
    • HandlerExceptionResolver:异常处理

五、HelloWord yyds

1.导包

idea新建Maven工程,在pom.xml中导入一下jar包

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.13</version>
    </dependency>
</dependencies>

2.写配置

5.2.1在web.xml中配置DispatcherServlet
<?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"
         metadata-complete="true">

    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <!--contextConfigLocation:指定SpringMVC配置文件位置-->
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/springmvc.xml</param-value>
        </init-param>
        <!--    servlet启动加载,servlet原本是第一次访问创建对象
        load-on-startup:服务器启动的时候创建对象,值越小优先级越高,越先创建对象
-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!--  处理所有请求-->
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <!--    /*和/都是拦截所有请求
        /*的范围更大,还会拦截*.jsp这些请求
-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

注意SpringMVC的配置文件位置,我们将其放在了WEB-INF目录下所以我们要在这个目录下创建SpringMVC.xml

5.2.2:创建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 http://www.springframework.org/schema/context/spring-context.xsd">

    <!--    视图解析器DispatchServlet给他的ModelAndView-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--        前缀-->
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <!--        后缀-->
        <property name="suffix" value=".jsp"></property>
    </bean>

    <context:component-scan base-package="com.shang"></context:component-scan>

</beans>

3.测试

5.3.1 创建入口页面,index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>hello</title>
    </head>
    <body>
        <a href="hello">hello</a>
    </body>
</html>
5.3.2 编写处理hello请求的处理器
@Controller
public class MyFirstController {

    /**
	* 映射请求的名称:用于客户端请求;类似 Struts2 中 action 映射配置的 action 名称
	* 1. 使用 @RequestMapping 注解来映射请求的 URL 
	* 2. 返回值会通过视图解析器解析为实际的物理视图, 对于 	InternalResourceViewResolver 视图解析器, * 会做如下的解析: 
	* 		通过 prefix + returnVal + suffix 这	样的方式得到实际的物理视图, 然后做转发操作. 
	* 		/WEB-INF/views/success.jsp
	*/
    @RequestMapping("/hello")//声明 Bean 对象,为一个控制器组
    public String myFirstRequest() {
        System.out.println("请求转发进行中");
        return "success";  //此处是对视图解析器处进行了字符串拼接,全路径为 :/WEB-INF/pages/success.jsp
    }
}
5.3.3 编写视图succe.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <h1>成功</h1>
    </body>
</html>
5.3.4 测试结果

在这里插入图片描述

现给出工程完整结构:

在这里插入图片描述

六、hello world解析

1.hello请求图解

在这里插入图片描述

2.@RequestMapping

这个注解就是告诉SpringMVC,这个方法用来处理什么请求。方法上的/是可以省略的,即使省略,也是默认从当前项目下开始的。在使用这个注解之前一定要在方法所在类上加上**@Controller**注解。

3.指定SpringMVC配置文件位置

如果没有指定指定配置文件位置,那么tomcat会报这个错误

nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/dispatcherServlet-servlet.xml]

说明如果不指定,就会默认去找 :/WEB-INF/前端控制器名-servlet.xml。

如果我们懒得写这个配置 语句,就可以走他默认的文件位置。

4.后缀匹配

/:拦截所有请求,不拦截jsp页面,**.jsp请求*

/* : 拦截所有请求,拦截jsp页面,*.jsp请求
处理
.jsp是tomcat做的事,所有的项目的小web.xml都是继承于大web.xml。

6.4.1 不能访问静态资源,如:.html, .png, .css等的原因。
  1. 在服务器的大web.xml中,有一个DefaultServlet的url-pattern = /
<--The default servlet for all web applications, that serves static-->
  <!-- resources. 
<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

我们通过注释可以看到,这个默认的Servlet是tomcat中处理静态资源的。(除过jsp和servlet)。

但是我们写了这个配置之后,前端控制器dispatcherServlet就覆盖了默认的转发路径,而将其转发到DispatcherServlet中进行处理,我们又没有配关于静态资源的路径,那肯定是找不到,就直接报错了。

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <!--    /*和/都是拦截所有请求
        /*的范围更大,还会拦截*.jsp这些请求
-->
    <url-pattern>/</url-pattern>
</servlet-mapping>
6.4.2 为什么可以访问jsp呢?

因为我们没有覆盖服务器中的JspServlet

<--The JSP page compiler and execution servlet, which is the mechanism used by Tomcat to support JSP pages.  Traditionally, this servlet  -->
  <!-- is mapped to the URL pattern "*.jsp".  
<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>*.jspx</url-pattern>
</servlet-mapping>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值