SpringMVC-HelloWorld初体验

HelloWorld总结

一、导包

Spring模块的包

  • commons-logging-1.2.jar
  • spring-aop-5.0.0.RELEASE.jar //注解包
  • spring-expression-5.0.0.RELEASE.jar
  • spring-core-5.0.0.RELEASE.jar
  • spring-context-5.0.0.RELEASE.jar
  • spring-beans-5.0.0.RELEASE.jar

SpringMVC模块包

  • spring-webmvc-5.0.0.RELEASE.jar
  • spring-web-5.0.0.RELEASE.jar

二、写配置

在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">
        <!--SpringMVC思想:前端控制器拦截所有请求并派发-->
    
        <!--DispatcherServlet本质是一个Servlet-->
        <!--
            https://blog.csdn.net/qq_44486437/article/details/108149847
            回顾Servlet如何配置
        -->
    
        <!--构建映射-->
        <servlet>
            <!--Servlet的名字-->
            <servlet-name>springDispatcherServlet</servlet-name>
            <!--Servlet对应的全类名-->
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <!--指定SpringMVC配置文件位置-->
                <param-name>contextConfigLocation</param-name>
                <!--classpath: 类路径-->
                <param-value>classpath:springmvc.xml</param-value>
            </init-param>
            <!--
                servlet启动加载:服务器启动时加载
                默认是第一次访问时才创建对象
                <load-on-startup>值越小,优先级越高
            -->
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <!--Servlet的名字-->
            <servlet-name>springDispatcherServlet</servlet-name>
            <!--Servlet对应的资源路径,即请求路径-->
            <!--
                /*和/都是拦截所有请求
                /*的范围更大,还会拦截到*.jps这些请求
            -->
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>

创建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:mvc="http://www.springframework.org/schema/mvc"
       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/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!--扫描所有组件-->
    <context:component-scan base-package="pers.lele.controller"></context:component-scan>
</beans>

三、写实例代码

java代码

package pers.lele.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

//表示组件是控制器
@Controller
public class MyFirstController {
    
    

    // 处理hello请求
    @RequestMapping("/hello")
    public String myFirstRequest() {
    
    
        System.out.println("请求收到了");
        return "/WEB-INF/pages/success.jsp";
    }
}

前端代码

<%--
  Created by IntelliJ IDEA.
  User: ASUS
  Date: 2021/2/15
  Time: 11:16
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
<a href="hello">HelloWorld</a>
</body>
</html>

视图解析器的配置

在springmvc.xml文件中加入如下配置

    <!-- 配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--注意 /WEB-INF/pages/ 的写法 拼串-->
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <!--后缀-->
        <property name="suffix" value=".jsp"></property>
    </bean>

不要把视图解析器想的多么高大上,目前的作用仅仅是拼接字符串用,正如下面这样

//表示组件是控制器
@Controller
public class MyFirstController {
    
    

    // 处理hello请求
    @RequestMapping("/hello")
    public String myFirstRequest() {
    
    
        System.out.println("请求收到了");
//        return "/WEB-INF/pages/success.jsp";
//        因为配置了视图解析器 自动拼串
        return "success";
    }
}

相当于"/WEB-INF/pages/"+success+".jsp"

注意

当访问404时,可以将该项目的包删除,在重新打包部署

如果不指定springmvc的配置文件

java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/springDispatcherServlet-servlet.xml]
则在/WEB-INF下创建一个 前端控制器名-servlet.xml文件,web.xml文件中以下内容则可以不写

   <init-param>
        <!--指定SpringMVC配置文件位置-->
        <param-name>contextConfigLocation</param-name>
        <!--classpath: 类路径-->
        <param-value>classpath:springmvc.xml</param-value>
   </init-param>

url-pattern细节

在Tomcat的web.xml文件中发现

  <!-- The default servlet for all web applications, that serves static     -->
  <!-- resources.  It processes all requests that are not mapped to other   -->
      <servlet-mapping>
          <servlet-name>default</servlet-name>
          <url-pattern>/</url-pattern>
      </servlet-mapping>

default servlet 服务于静态资源(除了jsp与servlet以外的均是静态资源)

  <!-- The JSP page compiler and execution servlet, which is the mechanism  -->
  <!-- used by Tomcat to support JSP pages.  Traditionally, this servlet    -->
  
      <servlet-mapping>
          <servlet-name>jsp</servlet-name>
          <url-pattern>*.jsp</url-pattern>
          <url-pattern>*.jspx</url-pattern>
      </servlet-mapping>

JspServlet 编译执行.jsp文件
所有项目的小web.xml都是继承自大web.xml文件(Tomcat的web.xml文件)
那么相当于前端控制器的/禁用了tomcat服务器中default servlet的/(子类覆盖父类)
为什么jsp又能访问,因为没有拦截服务器中JspServlet的配置
/* 直接拦截所有请求,不会被覆盖,迎合Rest风格的URL地址

在这里插入图片描述

了解MVC与SpringMVC

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44486437/article/details/113819632