当前位置: 首页 > news >正文

Spring MVC 二 :基于xml配置

创建一个基于xml配置的Spring MVC项目。

Idea创建新项目,pom文件引入依赖:

 <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.12.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.2.12.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.12.RELEASE</version></dependency>

在项目的webapp/WEB-INF目录下创建web.xml文件,配置DispatcherServlet:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><servlet><description>dispatcherServlet</description><display-name>DispatcherServlet</display-name><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><url-pattern>/*</url-pattern></servlet-mapping></web-app>

注意其中定义了contextConfigLocation:上下文配置文件位置,配置为:classpath:springmvc.xml,指定Spring MVC启动过程中会到指定位置读取该配置文件,所以我们需要配置好springmvc.xml文件。

在项目resource路径下配置springmvc.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 扫描包 --><context:component-scan base-package="org.example.controller"/><!-- 视图解析器 --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 视图前缀 --><property name="prefix" value="/" /><!-- 视图后缀 --><property name="suffix" value=".jsp" /></bean>
</beans>

主要是指定Spring MVC的controller的包扫描路径,并指定视图解析器、以及视图后缀为jsp。

最后,创建一个conrolller:

package org.example.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.ModelAndView;@Controller
public class HelloWorldController {@GetMapping("/hello")@ResponseBodypublic String hello(ModelAndView model){return "<h1>Hello World</h1>";}
}

我们的目的就是让快速让这个Spring MVC案例跑起来,就不创建jsp文件了,所以在controller中引入了@ResponseBody注解(不加这个注解的话,controller的@GetMapping方法返回String则视图解析器会将其处理为jsp页面)。

项目结构如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MIMttzs9-1693062192086)(/img/bVc9kvX)]

项目启动配置:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c1r1tC9A-1693062192087)(/img/bVc9kvZ)]

启动后,测试:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IwK0dkN5-1693062192087)(/img/bVc9kv1)]

所以,通过idea创建一个基于SpringMVC的项目非常简单,通过以上几步,一个Spring MVC项目就可以正常运行起来了。

接下来我们先简单研究一下以上案例得以正常运行的底层原理。

DispatcherServlet

我们知道Spring MVC是通过一个核心servlet:DispatcherServlet来处理请求的,所以还是从DispatcherServlet入手。

先来看一眼DispatcherServlet类的继承关系:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-laGEnAG5-1693062192087)(/img/bVc9kv7)]

这个类层次结构中,Servlet->GenericServlet->HttpServlet是属于java SDK的内容,来自于javax.servlet.http包,之后的从HttpServletBean到DispatcherServlet是属于Spring Web MVC框架的内容,来自于org.springframework.web.servlet包。

如果不使用Spring Mvc、自己创建Servlet的话,我们的Servlet直接继承HttpServlet即可,其实实现起来也很简单:
1. 创建MyServlet

package org.example.servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("<h1>OHhhhh,this is my own Servlet...</h1>");}
}

2.在web.xml中配置MySevlet

  <servlet><servlet-name>MyServlet</servlet-name><servlet-class>org.example.servlet.MyServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/my</url-pattern></servlet-mapping>

3.启动项目,访问
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dlja33sH-1693062192087)(/img/bVc9kxT)]

其实Spring MVC的工作原理和MyServlet的工作原理类似,MyServlet是通过配置文件找到当前请求URL对应的Servlet,然后再根据请求类型调用Servlet的doGet或者doPost等方法处理请求。Spring MVC处理请求的Servlet是DispatcherServlet,DispatcherServlet根据请求URL匹配HandlerMapping、找到对应的Controller,之后交给HandlerAdapters经过请求参数的匹配、转换之后,通过反射机制调用Controller的对应方法,完成请求的处理。

上述DispatcherServlet的底层处理逻辑,后面我们会逐步细化、深入,从代码层面进行分析。

上一篇 Spring MVC 一 :从MVC & Servlet开始

http://www.lryc.cn/news/140672.html

相关文章:

  • springboot aop方式实现接口入参校验
  • 解决git上传远程仓库时的大文件提交
  • HTML学习笔记02
  • <C++> 内存管理
  • 【Java】ByteBuffer类的arrayOffset方法详解+示例
  • 【C++】C++ 引用详解 ⑤ ( 函数 “ 引用类型返回值 “ 当左值被赋值 )
  • Git,分布式版本控制工具
  • LeetCode 面试题 02.02. 返回倒数第 k 个节点
  • SpeedBI数据可视化工具:丰富图表,提高报表易读性
  • 编写Dockerfile制作Web应用系统nginx镜像
  • 记录一次微服务连接Nacos异常-errorMsg: Illegal character in authority at index 7:
  • 【Java】反射 之 调用构造方法
  • Hightopo 使用心得(6)- 3D场景环境配置(天空球,雾化,辉光,景深)
  • 【Python PEP 笔记】201 - 同步迭代 / zip() 函数的使用方法
  • 远程控制:用了向日葵控控A2后,我买了BliKVM v4
  • 基于swing的火车站订票系统java jsp车票购票管理mysql源代码
  • MAVEN利器:一文带你了解IDEA中如何使用Maven
  • R语言15-R语言中的列的分裂与合并长宽数据转换
  • 使用Pytorch和OpenCV实现视频人脸替换
  • 【力扣】202. 快乐数 <哈希>
  • 深度学习4. 循环神经网络 – Recurrent Neural Network | RNN
  • 自动驾驶感知传感器标定安装说明
  • 基于JAYA算法优化的BP神经网络(预测应用) - 附代码
  • 基于单片机串口控制直流电机调速
  • Linux(基础篇一)
  • 小程序如何手动变更会员卡等级
  • Tensorflow2.0搭建网络八股
  • 【安装GPU版本pytorch,torch.cuda.is_available()仍然返回False问题】
  • Git 版本控制系统
  • 70吨服务区生活污水处理设备加工厂家电话