您现在的位置是:主页 > news > 比较好的网站建设公司/爱站小工具

比较好的网站建设公司/爱站小工具

admin2025/6/6 22:50:02news

简介比较好的网站建设公司,爱站小工具,全球疫情最新消息数据,垂直b2b电子商务Spring MVC是Spring Framework的一部分,是基于Java实现的MVC的轻量级Web框架! 为什么学习Spring MVC呢 1、轻量级,简单易学 2、高效,基于请求响应的MVC构架 3、与spring兼容性好,无缝结合 4、约定优于配置 5、功能强大RESTF…

比较好的网站建设公司,爱站小工具,全球疫情最新消息数据,垂直b2b电子商务Spring MVC是Spring Framework的一部分,是基于Java实现的MVC的轻量级Web框架! 为什么学习Spring MVC呢 1、轻量级,简单易学 2、高效,基于请求响应的MVC构架 3、与spring兼容性好,无缝结合 4、约定优于配置 5、功能强大RESTF…

Spring MVC是Spring Framework的一部分,是基于Java实现的MVC的轻量级Web框架!

为什么学习Spring MVC呢

1、轻量级,简单易学

2、高效,基于请求响应的MVC构架

3、与spring兼容性好,无缝结合

4、约定优于配置

5、功能强大RESTFul,数据验证,格式化,本地化,主题等

6、简洁灵活

1.springmvc 概述

Spring:大杂烩,我们可以将SpringMVC中所有需要的bean注册到Spring中

Spring的web框架围绕DispatcherServlet设计。DispatcherServlet的作用是将请求分发到不同的处理器,从spring2.5开始,使用java5或者以上版本的用户可以采用基于注释的controller声明方式

Spring mvc框架像许多其他mvc框架一样,以请求为驱动,围绕一个中型Servlet分配请求和提供其他功能,DispatcherServlet实际上也是一个Servlet(它集成自HttpServlet基类)

2.第一个springmvc

  1. 创建 SpringMVC02-Hello 项目,为项目添加 Web 的框架,配置 Tomcat(创建 Artifact 时把前一个项目的包给删了,后面也这么干)。
  2. 配置 web.xml,注册 DispatcherServlet ( SpringMVC 的核心!)
<!-- web.xml 中--><!--注册 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>

​ 其中有一个 SpringMVC 的配置文件需要关联

​ 3.编写springmvc的配置文件,在src/main/resources 下新建 springmvc-servlet.xml:[servletname]-servlet.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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"></beans>
  1. 在配置文件中,添加处理映射器
    <!--添加处理映射器--><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

​ 这没有 id 的 bean 一看就知道要自动装配了!

​ 5.在配置文件中, 添加处理适配器

   <!--添加处理适配器--><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

​ 这个 bean 也没有 id。

  1. 在配置文件中,添加视图解析器
<!--视图解析器 给 DispatcherServlet 的 ModelAndView 都会经过这里 -->
<!-- 1.获取 ModelAndView 的数据-->
<!-- 2.解析 View 的名字-->
<!-- 3.拼接视图名字,找到对应的视图-->
<!-- 4.把 Model 渲染到 View 上!-->
<bean  id="InternalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--前缀--><property name="prefix" value="/WEB-INF/jsp/"/><!--后缀--><property name="suffix" value=".jsp"/>
</bean>

前缀和后缀用于和请求进行拼接,如请求为 hello,就能拼接成 /WEB-INF/jsp/hello.jsp

​ 7.在 com.baifu.controller 包下编写我们操作业务的HelloController,要么实现Controller接口,要么增加注解,需要返回一个ModelAndView,装数据,封视图

package com.kuang.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接口
// 这里先使用 Controller 接口实现
public class HelloController implements Controller {public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {// ModelAndView 模型和视图ModelAndView mv = new ModelAndView();// 封装对象,放在ModelAndView中。Modelmv.addObject("msg","HelloSpringMVC!");// 封装要跳转的视图,放在ModelAndView中// 由于设置了前缀和后缀,相当于 /WEB-INF/jsp/hello.jspmv.setViewName("hello");return mv;}
}

​ 8.将自己的类交给springioc容器,在springmvc-servlet.xml 注册bean, 注意这里的bean id必须以"/"开头

<!--Handler-->
<bean id="/hello" class="com.baifu.controller.HelloController"/>

​ 9.在/web/WEB-INF/jsp/hello.jsp 写要跳转的jsp页面,显示ModelAndView存放的数据,以及我们的正常页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>baifu</title>
</head>
<body>${msg}
</body>
</html>

可能到的问题:访问出现404,排查步骤

解决方法:可以把项目的 jar 包全丢进 Tomcat 的 lib 下。

​ 1、查看控制台输出,看一下是不是少了什么jar包

​ 2、如果jar报存在 ,显示无法输出,就在IDEA的项目发布中,添加lib依赖

​ 3、重启Tomcat即可解决

或者:所以用 IDEA 添加进去:Project Structure --> Artifacts --> 查看对应项目的 /WEB-INF下边没有lib文件–>创建lib—>将对应项目的Available Elements --> 选中所有的 jar 包 --> 右键 Put into /WEB-INF/lib,完美解决!

小结: 这里已经可以看出和普通 Web 项目的区别了。按照普通 Web 项目的做法,想用 hello 请求访问某个页面,是要在 web.xml 中做好 servlet 和 mapping 的对应的。但在上面,web.xml 中只有一个 servlet,即 DispatcherServlet,也就是说,它帮我们做了对应的工作。

此时,如果想新增请求 /hello2 访问某个控制器( Servlet )进行业务处理,只需要写一个对应的 Controller 类,在其中进行业务处理,最后在 Spring 中注册它的 bean 就行了!

看这个估计大部分同学就能理解其中原理了,但是我们实际开发不会这么写,不然就疯了,还学这个玩意干嘛,我们来看注解版实现,这个才是springmvc的精髓,到底多么简单,看这个图就知道了。

3. springmvc原理

在这里插入图片描述
这个图是spring mvc 的一个完整的流程图,只有虚线才是我们要做的,实现部分都是spring mvc已经帮我们做了的。

简要的分析一下执行的流程:

大致流程:DispatcherServlet就是一个调度中转(负责指挥,一点活不干),具体流程可以分为4块:

  1. DispatcherServlet给HandlerMapping发送找到要正确执行的handle的请求,HandlerMapping找到并返回DispatcherServlet
  2. DispatcherServlet请求HandlerAdapter执行上一步找到的handle,HandlerAdapter执行后返回MV给DispatcherServlet
  3. DispatcherServlet将上一步得到的MV给视频解析器进行解析,视频解析器解析后结果返回给DispatcherServlet
  4. DispatcherServlet根据视频解析其的结果调用和渲染具体试图,呈现.

细化流程:

1、DispatcherServlet表示前置的控制器,是整个spring mvc的控制中心,用户发出请求,DispatcherServlet接受请求并拦截请求

假设url为 http://localhost:8080/springmvc/hello 这个url就可以拆分成3个部分

  • http://localhost:8080 这是服务器的域名
  • springmvc部署在服务器上的web站点
  • hello 表示控制器

通过分析,如上url表示为:请求位于服务器localhost:8080 上的springmvc站点的hello控制器

2、DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取正确的Handler;

HandlerMapping根据请求url的控制器去查找在springmvc-config.xml里面的具体的处理器Handler,因为springmvc-config.xml中bean配置了”id”和“class”所以能找到.

3、HandlerExecution表示根据请求url找到具体的处理器Handler及处理器拦截器(如果有则生成),如上url被查找的控制器为 hello

4、HandlerExecution 将解析后的信息(要这正确执行的handler)返回给DispatcherServlet.

5、HandlerApdapter表示处理器适配器。DispatcherServlet 调用 HandlerAdapter处理器适配器,请求执行Handler;(刚刚映射器找到的正确的).

6、HandlerAdapter 经过适配调用,具体处理器进行处理业务逻辑;

7、Handler将具体的执行结果返回给HandlerAdapter,如ModelAndView(带给前端的数据,并且指定前端是谁).

8、HandlerAdapter将试图逻辑名或者模型(ModelAndView)传递给DispatcherServlet

9、DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名(ModelAndView)

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

11、DispatcherServlet根据试图解析器解析后的视图结构,调用具体的视图

12、最终视图呈现给用户,

在这里听一遍原理,不理解么有关系,我们马上来一写一个对应的代码实现大家就明白了,如果不明白,那就写10遍,没有笨人,只有懒人!

spring mvc中

<servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>

/ 和/* 有区别

/ :只匹配所有的请求,不会去匹配jsp页面

/*: 匹配所有的请求,包括Jsp页面

参考: https://blog.csdn.net/qq_43560701/article/details/119995378