你真的了解SpringMVC吗?(上)

简介: 你真的了解SpringMVC吗?(上)

介绍MVC



MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分

M:Model,模型层,指工程中的JavaBean,作用是处理数据


JavaBean分为两类:


  • 一类称为实体类Bean:专门存储业务数据的,如 Student、User 等
  • 一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理业务逻辑和数据访问。


V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据

C:Controller,控制层,指工程中的servlet,作用是接收请求和响应浏览器


MVC的工作流程:


用户通过视图层发送请求到服务器,在服务器中请求被Controller接收,Controller 调用相应的Model层处理请求,处理完毕将结果返回到Controller,Controller再根据请求处理的结果 找到相应的View视图,渲染数据后最终响应给浏览器


三层架构分为:


表述层(或表示层)、业务逻辑层、数据访问层,表述层表示前台页面和后台 servlet


SpringMVC的特点


  • Spring 家族原生产品,与 IOC 容器等基础设施无缝对接
  • 基于原生的Servlet,通过了功能强大的前端控制器DispatcherServlet,对请求和响应进行统一 处理
  • 表述层各细分领域需要解决的问题全方位覆盖,提供全面解决方案
  • 代码清新简洁,大幅度提升开发效率 内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可
  • 性能卓著,尤其适合现代大型、超大型互联网项目要求


SpringMVC处理请求案例



  1. 首先创建web工程,可以直接选择webapp进行创建,也可以自己手动创建
  2. 配置web.xml文件 (注意这里的servlet-name必须要与WE-INF下的XXX-servlet.xml文件中的XXX名称相同)


1.配置SpringMVC-servlet.xml文件 (注意文件中的视图前缀下的文件名/WEB-INF/templates/就是在templates下创建的文件)

<?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 https://www.springframework.org/schema/context/spring-context.xsd">
<!--    扫描控制层组件-->
       <context:component-scan base-package="com_Ray.springMVC.controller"></context:component-scan>
    <!-- 配置Thymeleaf视图解析器
        作用:解析视图 ,使用之后就可以使用springmvc为我们提供的方式来进行视图渲染,并实现页面跳转
    -->
    <bean id="viewResolver"
          class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <!-- 视图前缀 -->
                        <property name="prefix" value="/WEB-INF/templates/"/>
<!--                逻辑视图:/WEB-INF/templates/(前缀)  index - .html(后缀)
                            == 物理视图(全地址) - 视图前缀 - 视图后缀
                    物理视图(需要访问的网页)-->
                        <!-- 视图后缀 -->
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
</beans>


  1. 创建Controller控制层的相关代码,用于接受请求和进行请求转发和跳转
  2. 模块名+Controller 类其中方法名加 @RequestMapping(“/”)标签就是作为请求映射的标签,其中(“/”): 表示的是绝对路径为http://localhost:8080/SpringMVC/ 上下文的这个请求 返回值return作用就是跳转至需要跳转的页面,内容:“逻辑视图名称”
  3. pom.xml中的配置


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <parent>
        <artifactId>java_workSpace_SSM</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>war</packaging>
    <name>SpringMVC</name>
    <artifactId>SpringMVC</artifactId>
    <build>
        <plugins>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
                <version>6.1.7</version>
                <configuration>
                    <connectors>
                        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                            <port>8888</port>
                            <maxIdleTime>30000</maxIdleTime>
                        </connector>
                    </connectors>
                    <webAppSourceDirectory>${project.build.directory}/${pom.artifactId}-${pom.version}
                    </webAppSourceDirectory>
                    <contextPath>/</contextPath>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <!-- SpringMVC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.1</version>
        </dependency>
        <!-- 日志 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- ServletAPI -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- Spring5和Thymeleaf整合包 -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
            <version>3.0.12.RELEASE</version>
        </dependency>
    </dependencies>
</project>


如果想要将配置文件放在类路径下的resources下,那么就可以这样设置

<!--a
    - SpringMVC 的前端控制器DispatcherServlet
    - Servlet that dispatches requests to the Spring managed block servlets
    -->
  <servlet>
<!--    这里的servlet-name一定要与WEB_INF下的配置文件XXX-servlet.xml中的XXX名字相同-->
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
          <!--初始化的作用:将我们的配置文件放到resources路径下-->
          <param-name>ContextConfigLocation</param-name>
          <param-value>classpath:springmvc.xml</param-value>
      </init-param>
  </servlet>
  <!-- URL space mappings ============================================= -->
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern><!--表示所有的请求都需要进行过滤 (被前端控制器处理)  *.do :表示后缀处理-->
  </servlet-mapping>


总结简单的运行原理及过程


  1. 浏览器发送请求,若请求地址符合前端控制器的url-pattern,该请求就会被 前端控制器 DispatcherServlet 处理。
  2. 前端控制器会 读取SpringMVC的核心配置文件 ,通过 扫描组件 找到控制器, 将请求地址和控制器中@RequestMapping注解的 value属性值进行匹配
  3. 若匹配成功,该注解所标识的控制器方法就是处理请求的方法。
  4. 处理请求的方法需要返回一个字符串类型的视图名称,该视图名称会 被视图解析器解析,加上前缀和后缀组成视图的路径,通过Thymeleaf对视图进行渲染,最终转发到视 图所对应页面


具体如何处理一个请求★★★★★:


  1. @RequestMapping注解功能: 从注解名称上我们可以看到,@RequestMapping注解的作用就是 将请求和处理请求的控制器方法关联 起来,建立映射关系。 SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求。
  2. @RequestMapping注解位置★★★(类与方法) :


@RequestMapping 标识一个类 :设置映射请求的请求路径的 初始信息**

@RequestMapping 标识一个方法 :设置映射请求请求路径的 具体信息**


如果说两个都设置了RequestMApping , 那么就是在 访问方法上的请求时需要加上类上的RequestMapping的地址


@Controller
@RequestMapping("/test/")
public class EmployeeController {
    @Autowired
    private EmployeeDao employeeDao;
    //查询所有的员工信息
//请求地址问 : /test/employee
    @GetMapping("/employee")
    public String selectAll(Model model){
        Collection<Employee> employeeAll = employeeDao.getAll();
        model.addAttribute("employeeAll",employeeAll);
        return "emp_list";
    }
}


@RequestMapping注解的value属性:(可以设置多个) : 为数组属性,即为浏览器所发送请求的请求路径匹配的value属性中的任何一个值(只要一个满足就可以)

//查询所有的员工信息
@GetMapping({"/test/employee","test/hello","..."})
public String selectAll(Model model){
    Collection<Employee> employeeAll = employeeDao.getAll();
    model.addAttribute("employeeAll",employeeAll);
    return "emp_list";
}


@RequestMapping注解的method属性( 也是数组 ): 表示请求方式() mathod={RequestMethod.POST ,RequestMethod.GET } 作用: 通过请求方式匹配请求


注: 1、对于处理指定请求方式的控制器方法,SpringMVC中提供了


@RequestMapping的派生注解

处理get请求的映射–>@GetMapping

处理post请求的映射–>@PostMapping

处理put请求的映射–>@PutMapping

处理delete请求的映射–>@DeleteMapping


2、常用的请求方式有get,post,put,delete 但是目前浏览器只支持get和post,若在form表单提交时,为method设置了其他请求方式的字符 串(put或delete),则按照默认的请求方式get处理 若要发送put和delete请求,则需要通过spring提供的过滤器HiddenHttpMethodFilter


1.@RequestMapping注解的param属性作用 :

通过请求参数匹配请求,即浏览器发送的请求的请求参数必须满足params属性到的设置


注解的params属性是一个字符串类型的数组,可以通过四种表达式设置请求参数 和请求映射的匹配关系


对于params属性的设置: 如果params属性设置了值,那么请求参数就必须加上对应的值 (否则报400错误) 下面是两种方式 :


一定不能携带password


1.@RequestMapping注解的header属性(用法和param用法一模一样):


SpringMVC支持ant风格的路径


?:表示任意的单个字符


? 就会被解析成和前后字符相同的字符 ,但是不能匹配特殊字符(比如 ? )


*:表示任意的0个或多个字符


以下两种都可以 (但是不能为 / )


******* :表示任意层数的任意目录 注意:在使用时,* 只能使用//xxx的方式** ( //中间不能出现其他字符** )


SpringMVC中支持路径中的占位符


原始方式: /deleteUser?id=1


rest方式: /user/delete/1****


其中的admin/1 都是参数 : 需要进行赋值


目录
相关文章
|
13天前
|
人工智能 自然语言处理 安全
阿里云千问办公 QwenWork详细介绍:产品核心能力、典型场景、价格及常见问题解答
千问办公是阿里云推出的一站式AI办公平台,主打"不止于对话,更注重交付",依托通义千问旗舰大模型,用户一句话即可完成数据分析、PPT生成、视频剪辑等复杂任务,直接输出可用成果。产品深度打通钉钉生态与企业OA,覆盖桌面端、网页端,提供企业标准版198元/人/月等多档订阅方案,新用户注册即赠2000积分,适配工程师、HR、财务等多职业办公场景,成为能动手干活的"全能AI同事"。
|
13天前
|
人工智能
千问办公官网入口:阿里AI办公QwenWork产品页和免费网页端链接
千问办公官网含两大入口:一是网页端(qwenwork.cn),即开即用,支持浏览器直接访问;二是阿里云产品页 https://t.aliyun.com/U/JNKJuO 提供免费/付费版详情、功能介绍及使用指南。
|
12天前
|
IDE 开发工具
Qoder 上线 Sonus 模型,Computer Use 能力全面增强
Qoder国际版上线全新内置大模型Sonus(/ˈsoʊnəs/),全球领先,专精超长任务执行与电脑操作(Computer Use)。配合Qoder桌面端0.2.3版本,可自主完成编程、金融建模、科研及表格制作等复杂工作。现全面支持Qoder全系产品,效率提升3.2倍。
1529 8
Qoder 上线 Sonus 模型,Computer Use 能力全面增强
|
14天前
|
缓存 人工智能 自然语言处理
阿里云qwen3.8-flash大模型介绍:模型能力、模型价格、免费额度与最新活动
本文是阿里云百炼平台Qwen3.8-Flash大模型的选型接入指南,作为兼顾性能与响应速度的高性价比多模态模型,它支持百万级上下文窗口、全场景多模态输入与完整智能体能力矩阵,适配编程辅助、智能体协作等核心场景。文中同步梳理了最新下调的阶梯定价、夜间4折等优惠活动,搭配OpenAI兼容流式调用示例,帮助开发者低成本快速落地高并发AI应用。
阿里云qwen3.8-flash大模型介绍:模型能力、模型价格、免费额度与最新活动
|
14天前
|
人工智能 API 内存技术
刚刚 DeepSeek V4.1 Flash 开启内测,1 分钟教你用上!
刚刚 DeepSeek 内测群发布了 DeepSeek V4.1 Flash 中间版本内测的消息,这次的模型采用了新的结构,原生支持多模态、能力更强、速度更快、且成本更低。
1990 15
|
7天前
|
缓存 IDE Java
【保姆级】Android Studio下载、安装和汉化教程(2026最新)
Android Studio 是 Google 官方推出的免费 Android 应用开发集成环境,基于 IntelliJ IDEA,内置模拟器、调试器、性能分析及 Compose 界面工具,功能全面,文档丰富,是安卓开发首选工具。(239字)
|
18天前
|
人工智能 运维 BI
阿里云千问办公QwenWork深度解析:基于Qwen3.8,六大核心能力重构企业全自动化工作流与计费选型指南
传统AI办公工具大多停留在对话问答、文档摘要、简单文案生成层面,只能完成单点碎片化任务,无法自主拆解复杂业务流程,很难串联多工具、多文档、外部业务系统完成端到端完整工作交付。很多企业在落地AI办公的时候,需要组合多款不同工具,来回切换界面,手动复制粘贴中间结果,智能化改造落地门槛居高不下。千问办公QwenWork是整合多款智能体产品能力打造的一体化企业办公智能体平台,底层基座依托Qwen3.8大模型,打通桌面端Agent、云端Agent、企业协同Agent三种运行形态,不再局限简单问答,接收业务目标之后自主拆解任务步骤,调用各类工具,处理文档、表格、浏览器自动化、数据查询,直接输出可交付的办公
1693 4
|
12天前
|
人工智能 安全 JavaScript
DeepSeek Harness开源Agent运行框架实战:4种安装方式、WebUI启动、插件管理与排坑全流程
随着AI Agent技术快速发展,单纯依靠大模型对话能力,很难完成复杂的自动化任务。模型需要具备读取本地文件、执行脚本、访问网页、操作文件系统、拆分复杂任务并分步执行的能力。DeepSeek Harness,简称DSH,是开源的AI Agent执行运行框架,遵循“Agent = 大模型 + Harness执行底座”的设计理念,为大模型提供一套安全可控的工具调用、任务编排、沙箱执行与插件扩展能力。它提供Web可视化界面与完整命令行工具,支持插件化扩展,能够让大模型自主拆解复杂需求,调用各类工具分步完成目标,无论是本地电脑调试,还是部署在云服务器上长期运行智能体任务都十分合适。本文为从0到1完整保
906 0
|
14天前
|
缓存 JSON API
阿里云千问Qwen3.8‑Max深度解析:核心能力、订阅计费规则、API接入配置与生产落地完整教程
Qwen3.8‑Max作为千问系列新一代MoE架构旗舰基座,总参数量达到2.4万亿,激活参数950亿,是面向复杂专业任务、长周期智能体、工程级代码开发、多模态深度解析的高阶大模型,原生支持文本、图像、视频多模态输入,最大上下文窗口达到百万Token,最大输出Token支持131072,内置深度思考推理链路,在编程、科研、法律金融专业分析、长视频文档解析、自主Agent任务等场景能力表现突出。很多开发者在项目前期直接接入该旗舰模型,却对模型能力边界、多种计费模式、订阅套餐权益、API参数配置、上下文缓存优化缺乏完整认知,出现成本失控、接口报错、长文本信息丢失、深度思考模式额外消耗大量Token等
982 3