【SpringMVC 笔记,Java经典面试题及答案

用户发出请求,DispatcherServlet 接收请求并拦截请求。

我们假设请求的 URL 为 : http://localhost:8080/sm/hello

如上 URL 拆分成三部分:

  • http://localhost:8080 表示服务器域名

  • sm 表示部署在服务器上的 web 站点

  • hello 表示控制器

通过分析,如上URL表示为:

  1. 请求位于服务器 localhost:8080 上的 sm 站点的 hello控制器,用户发出请求。

  2. HandlerMapping 为处理器映射。

    DispatcherServlet 调用 HandlerMappingHandlerMapping 根据请求 url 查找 Handler。

  3. HandlerExecution 表示具体的 Handler。

    主要作用是根据 url 查找控制器,如上 url 被查找控制器为:hello

  4. HandlerExecution 将解析后的信息传递给 DispatcherServlet,如解析控制器映射等。

  5. HandlerAdapter 表示处理器适配器,其按照特定的规则去执行 Handler。

  6. Handler 让具体的 Controller 执行。

  7. Controller 将具体的执行信息返回给 HandlerAdapter,如 ModelAndView

  8. HandlerAdapter 将视图逻辑名或模型传递给 DispatcherServlet。

  9. DispatcherServlet 调用视图解析器 (ViewResolver) 解析 HandlerAdapter 传递的逻辑视图名。

  10. 视图解析器 将解析的逻辑视图名传给 DispatcherServlet

  11. DispatcherServlet 根据视图解析器解析的视图结果,调用具体的视图。

  12. 最终视图呈现给用户。

xml 配置版

==========================================================================

xml 配置版就是体验一下,开发中不会使用,用的更多的是注解版。

1、创建一个 Web 项目


新建一个 Moudle , springmvc-hello , 添加 web 的支持。

2、pom.xml 中导入 SpringMVC 的依赖



<dependencies>

    <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-webmvc</artifactId>

        <version>5.2.6.RELEASE</version>

    </dependency>

    <dependency>

        <groupId>javax.servlet</groupId>

        <artifactId>servlet-api</artifactId>

        <version>2.5</version>

    </dependency>

    <dependency>

        <groupId>javax.servlet.jsp</groupId>

        <artifactId>jsp-api</artifactId>

        <version>2.2</version>

    </dependency>

    <dependency>

        <groupId>javax.servlet</groupId>

        <artifactId>jstl</artifactId>

        <version>1.2</version>

    </dependency>

</dependencies> 

3、配置 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">



   <!--1.注册DispatcherServlet-->

   <servlet>

       <servlet-name>springmvc</servlet-name>

       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

       <!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->

       <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>



   <!--/ 匹配所有的请求;(不包括.jsp)-->

   <!--/* 匹配所有的请求;(包括.jsp)-->

   <servlet-mapping>

       <servlet-name>springmvc</servlet-name>

       <url-pattern>/</url-pattern>

   </servlet-mapping>



</web-app> 

4、编写 SpringMVC 的配置文件:springmvc-servlet.xml


resources 下创建配置文件springmvc-servlet.xml,往其中添加以下配置:

  • 处理映射器(BeanNameUrlHandlerMapping)

  • 处理适配器(SimpleControllerHandlerAdapter)

  • 视图解析器(InternalResourceViewResolver)


<?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"/>



    <!--视图解析器:DispatcherServlet 给他的 ModelAndView-->

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">

        <!--前缀-->

        <property name="prefix" value="/WEB-INF/jsp/"/>

        <!--后缀-->

        <property name="suffix" value=".jsp"/>

    </bean>



    <!--Handler-->

    <bean id="/hello" class="com.yusael.controller.HelloController"/>



</beans> 

5、编写操作业务 Controller


Controller 要么实现 Controller 接口,要么使用 @Controller 注解;

  • 实现 Controller 需要返回一个 ModelAndView,封装 数据视图

package com.yusael.controller;



import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.Controller;



import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



// 实现 Controller 接口

public class HelloController implements Controller {



   public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

       // ModelAndView 模型和视图

       ModelAndView mv = new ModelAndView();



       // 封装对象, 放在 ModelAndView 中

       mv.addObject("msg", "HelloSpringMVC!");

       // 封装要跳转的视图,放在 ModelAndView 中

       mv.setViewName("hello"); // 根据视图解析器, 自动拼接成 /WEB-INF/jsp/hello.jsp

       return mv;

  }

} 

6、配置文件中注册 bean


springmvc-servlet.xml 中将自己的类交给 SpringIOC 容器,注册 bean:


<!--Handler-->

<bean id="/hello" class="com.yusael.controller.HelloController"/> 

7、创建视图层 hello.jsp


编写一个要跳转 hello.jsp 页面,显示 ModelandView 存放的数据,以及我们的正常页面;


<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

   <title>yusael</title>

</head>

<body>

${msg}

</body>

</html> 

8、配置 Tomcat 启动测试!


URL:http:localhost:8080/hello

可能遇到的问题:访问出现404


在 IDEA 的项目发布中,添加 lib 依赖!

  • 重启 Tomcat 即可解决!

注解版

======================================================================

1、创建一个 Web 项目


新建一个 Moudle,springmvc-hello-annotation,添加 web 支持。

2、pom.xml 中导入 SpringMVC 的依赖


主要有 Spring 框架核心库、Spring MVC、servlet , JSTL 等。


<dependencies>

    <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-webmvc</artifactId>

        <version>5.2.6.RELEASE</version>

    </dependency>

    <dependency>

        <groupId>javax.servlet</groupId>

        <artifactId>servlet-api</artifactId>

        <version>2.5</version>

    </dependency>

    <dependency>

        <groupId>javax.servlet.jsp</groupId>

        <artifactId>jsp-api</artifactId>

        <version>2.2</version>

    </dependency>

    <dependency>

        <groupId>javax.servlet</groupId>

        <artifactId>jstl</artifactId>

        <version>1.2</version>

    </dependency>

</dependencies> 

资源过滤 问题

由于 Maven 可能存在 资源过滤 的问题,pom.xml 增加如下配置:


<build>

   <resources>

       <resource>

           <directory>src/main/java</directory>

           <includes>

               <include>**/*.properties</include>

               <include>**/*.xml</include>

           </includes>

           <filtering>false</filtering>

       </resource>

       <resource>

           <directory>src/main/resources</directory>

           <includes>

               <include>**/*.properties</include>

               <include>**/*.xml</include>

           </includes>

           <filtering>false</filtering>

       </resource>

   </resources>

</build> 

3、配置 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">



   <!--1.注册servlet-->

   <servlet>

       <servlet-name>SpringMVC</servlet-name>

       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

       <!--通过初始化参数指定SpringMVC配置文件的位置,进行关联-->

       <init-param>

           <param-name>contextConfigLocation</param-name>

           <!-- 关联 SpringMVC 配置文件 -->

           <param-value>classpath:springmvc-servlet.xml</param-value>

       </init-param>

       <!-- 启动顺序,数字越小,启动越早 -->


# 总结

其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。

这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来,[需要的话点击这里免费获取](https://gitee.com/vip204888/java-p7)

**目录:**

![](https://img-blog.csdnimg.cn/img_convert/a4a11d0df0fec352c3b4f0241e9111a7.png)

**部分内容截图:**

![](https://img-blog.csdnimg.cn/img_convert/3ffae7f576071b8680a9eba29656b739.png)

![](https://img-blog.csdnimg.cn/img_convert/fc1f6b5418d20b201120056dcf08ab6b.png)

     <init-param>

           <param-name>contextConfigLocation</param-name>

           <!-- 关联 SpringMVC 配置文件 -->

           <param-value>classpath:springmvc-servlet.xml</param-value>

       </init-param>

       <!-- 启动顺序,数字越小,启动越早 -->


# 总结

其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。

这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来,[需要的话点击这里免费获取](https://gitee.com/vip204888/java-p7)

**目录:**

[外链图片转存中...(img-I3J1mYXw-1628600322209)]

**部分内容截图:**

[外链图片转存中...(img-KEMBRNJC-1628600322212)]

[外链图片转存中...(img-fn38q2xq-1628600322213)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值