No.1 Spring MVC 从hello开始

本文介绍SpringMVC框架的基本概念及其工作原理,并通过一个简单的Hello World案例演示如何搭建和使用SpringMVC。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

No.1 Spring MVC 从hello开始


在以往的开发中,我们对MVC编程模式,也许并不陌生,M:model模型,V:view视图,C:control控制层。Model主要指Java bean,包括处理业务的业务bean,承载数据的实体bean。View主要指用户浏览网页的内容,诸如JSP,HTML等。而像我们之前所用到的servlet,既调用了java类,又实现了向jsp页面跳转,可以称之为控制层。


简单介绍了MVC编程模式,下面从最基础的谈一谈Spring MVC,仅是个人观点,如有意见,还请多多包涵。


Spring Web MVC使用了MVC架构模式的思想,将web层进行职责解耦,是一种基于Web MVC设计模式的请求驱动类型的轻量级Web框架,所谓的基于请求驱动指的是使用请求-响应模型,该框架的目的是帮助我们简化开发。

Spring Web MVC具有以下几个主要特点:

1.Web层干净轻薄,

通俗来讲就是代码少

2.提供强大的约定大于配置的契约式编程支持(讲真小编也不怎么懂,可能类似于以往编程中的2-8原则)

3.支持灵活的本地化,主题等解析

本地化亦为国际化(i18n),打个比方,类似于将手机显示字体设置为中或英文时,再去浏览某些国际化网页,页面显示可能会有所不同

4.简单的异常处理

5.支持Restful风格(一个接口操作多个功能)

个人理解是,类似于开发一个学校的网站,该网站可能包含多个功能模块:学生信息管理,校园卡管理,图书馆管理。而两两之间必然要进行信息的交互,将其放置在一个系统中,可方便事务的管理,倘若由多个系统承担,则不能实现数据的同步。

在这里,有点类似分布式吧,倘若一个网页的浏览量过大,将业务分配到不同的服务器,可减小每个服务器承载的压力。

除此之外,特点还包括支持灵活的URL到页面控制器的映射,灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API,因理解有限,就不一一解释了。

原理:

Spring MVC是通过用户向前端控制器发送请求,前端控制器将用户的请求分发给页面控制器,控制器针对于不同模型或数据将其封装成ModelAndView,前端控制器将返回的ModelAndView与视图结合,进行视图的渲染,渲染完成后再返回给用户。

细致的讲,前端处理器DispatcherServlet将请求发送给映射处理器HandlerMapping,HandlerMapping通过反射调用方法(下文中的sayHello等方法),再将url地址交个前端控制器,DispatcherServlet又将url交给HandlerAdapter处理适配器,HandlerAdapter要去执行处理器,处理器返回ModelAndView给HandlerAdapter,HandlerAdapter将其交给前端控制器,前端控制器又根据ModelAndView,查找视图解析器ViewResolver,解析成一个view对象返回给前端控制器,控制器再将视图交给用户渲染。

开发过程:

1.将依赖的jar包引入pom.xml

2.在工程web.xml里面配置前端控制器

所有的访问都必须先访问一个servlet,这个servlet就是前端控制器。

DispatcherServlet前端控制器,是一个servlet,需采用servlet标签将其配置到工程中,是在spring基础上开发的,也是一个java bean,需将其放到ioc容器中,加载配置文件。

可对前端控制器的拦截进行设置:

(1) / 拦截所有的请求 包括 .jsp , .css ,.js ,图片,不包含jsp,一般用于开发网站

(2) *.action  *为通配符,匹配所有以.action作为结尾的链接 一般用于开发后台管理系统(用于约束)OA,ERP,CRM,类似于数据库模糊查询中的%

(3)/*表示拦截所有请求URL,包含静态资源文件,及jsp 但不推荐使用

配置好的web.xml如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

 

<display-name>Archetype Created Web Application</display-name>

<servlet>

      <servlet-name>DispatcherServlet</servlet-name>

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

      <init-param>

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

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

      </init-param>

</servlet>

  

  <servlet-mapping>

        <servlet-name>DispatcherServlet</servlet-name>

        <url-pattern>*.action</url-pattern>

  </servlet-mapping>

</web-app>

3.配置spring 上下文

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

               http://www.springframework.org/schema/context/spring-context.xsd ">

           

    <context:component-scan base-package="com.xt.mvc.helloworld.action"></context:component-scan>  

    

    <!-- 配置视图解析器 -->

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

    <property name="prefix" value="/views/"></property>

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

    </bean>  

</beans>

4.编写Controller文件

package com.xt.mvc.helloworld.action;

import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloController {

    @RequestMapping("/sayHello.action")  //对方法的注解,表明请求路径
    public ModelAndView sayHello(){
        //sayhello就是一个页面控制器
        ModelAndView mav = new ModelAndView();
        mav.addObject("data", "spring MVC");//添加渲染,类似数据结构map.put
        mav.setViewName("hello");//设置视图
        return mav;
    }
    //后台系统可以自动的将其封装成一个ModelAndView,自动将map封装成model
    
    @RequestMapping("/simpleWay.action")
    public String simpleWay(Model model){
        
        model.addAttribute("data"," simple spring MVC");
        return "hello";
    }
    
    @RequestMapping("/simpleWay.action")
    public String simpleWay(Map<String,Object> map){
        
        map.put("data"," simple spring MVC1");
        return "hello";
    }
    
}

倘若方法中有如下方法,若访问路径为hello.action,即使方法的注解为@RequestMapping("/hello"),也能访问到

@RequestMapping("/hello")
    public String hello(){
        System.out.println("-------hello----------");
        return "success";
    }

若还有一方法注解为@RequestMapping("/hello.action"),访问路径hello.action,则调用的是方法hello1()  
    @RequestMapping("/hello.action")
    public String hello1(){
        System.out.println("-------hello1----------");
        return "success";
    }

以上便是简单的介绍了spring MVC,谢谢阅读。

### Spring MVC 使用指南及常见问题解决 #### 1. Spring MVC 基本概念 Spring MVCSpring 框架中的一个重要模块,专门用于开发 Web 应用程序。其核心设计理念基于 MVC(Model-View-Controller)架构模式,通过将应用逻辑划分为模型(Model)、视图(View)和控制器(Controller),从而实现代码的高可读性和易维护性[^2]。 #### 2. Spring MVC 环境搭建 要成功运行一个 Spring MVC 项目,通常需要完成以下几个方面的配置: - **引入依赖** 需要在项目的 `pom.xml` 文件中添加必要的 Maven 依赖项,例如 Spring Web 和 Servlet API。 ```xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.9</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> ``` - **配置 DispatcherServlet** 在 `web.xml` 中定义前端控制器 `DispatcherServlet` 并指定初始化参数。 ```xml <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> ``` - **编写 Controller 类** 创建一个带有 `@Controller` 注解的类,并使用 `@RequestMapping` 映射 URL 请求到具体方法。 ```java @Controller public class HelloController { @RequestMapping("/hello") public String hello(Model model){ model.addAttribute("message", "Welcome to Spring MVC!"); return "hello"; } } ``` - **配置视图解析器** 在 `dispatcher-servlet.xml` 或其他 Spring 配置文件中声明视图解析器。 ```xml <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> ``` #### 3. 常见问题及其解决方案 ##### (1) 页面无法找到对应的 Handler 方法 当控制台报错显示 `No mapping found for HTTP request with URI [...]` 时,通常是由于未正确映射请求路径或缺少静态资源处理器引起的[^3]。可以通过以下方式解决问题: - 确认 `@RequestMapping` 路径与实际访问地址一致。 - 如果启用了全局拦截 `/` 的功能,则需在 XML 配置中加入 `<mvc:default-servlet-handler/>` 来支持静态资源加载。 ##### (2) JSP 页面找不到 如果浏览器返回 404 错误,可能是因为 JSP 文件被放置到了错误的位置。按照惯例,JSP 文件应存放在 `WEB-INF/views/` 下面,并由视图解析器负责渲染[^3]。 ##### (3) 数据传递失败 数据未能正常传入页面可能是 Model 属性绑定不成功的缘故。建议检查是否调用了 `model.addAttribute()` 方法并验证属性名称拼写无误。 --- ### 示例代码片段 以下是完整的 Spring MVC 控制器示例: ```java @Controller public class UserController { @RequestMapping(value = "/user/{id}", method = RequestMethod.GET) public String getUserById(@PathVariable Long id, Model model) { User user = new UserService().findUserById(id); model.addAttribute("user", user); // 将对象放入 Model return "showUser"; // 返回视图名 } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值