Spring MVC 学习笔记

本文详细介绍了SpringMVC的工作流程,从客户端发起请求开始,经过DispatcherServlet分发,Controller处理逻辑并返回ModelAndView,再到视图解析及展示的过程。同时提供了web.xml和myDispatcher-servlet.xml配置示例。

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

最近学习了Spring MVC,Spring Web Flow和Spring Security,作为三者的基石,我首先来总结Spring MVC里的东西吧

1. 客户端来了一个request之后,首先会被DispatcherServlet捕获

2. Dispatcher在默认的情况下(可以自行配置),会通过客户请求过来的url去和具体Controller的方法上的RequestMapping上的地址匹配,若找到就高数DispatcherServlet去找相应的Controller。

3. 当request到达Controller后,真正的逻辑处理通常都放在controller下面,在逻辑处理后,controller通常会返回一个ModelAndView对象,其构造函数里面包含接下来具体的JSP页面的URL、用于在JSP页面显示用的SpringEL会用到的model名,最后还会返回具体model的名字,此model会装一些在controller下处理的逻辑的结果,以供其他调用。

4. DispatcherServlet通过ModelAndView里的URL找到相应的JSP页面去进行显示。

下面是一些配置:

web.xml: 配置DispatcherServlet,Spring会根据servlet-name去找定义在另一个xml文件(名称为myDispatcher-servlet.xml)下定义的一些解析request用的对象。

    <servlet>
        <servlet-name>myDispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

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


myDispatcher-servlet.xml:里面定义了annotation-driven,此定义将会用于解析定义在整个项目下的annotation。context:component-scan,它用于解析使用annotation定义使之有特殊意义的类,如使用@Controller定义的类,它会被扫描并被已bean的形式保存在spring container中。最后viewResolver定义了解析controller返回特定地址后去找到相应页面的方法。

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation=
               "http://www.springframework.org/schema/mvc
                http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context-3.0.xsd
                http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <mvc:annotation-driven/>
    <context:component-scan base-package="com.thoughtworks.mvc"/>

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

HomeController.java:具体处理controller的类。

package com.thoughtworks.mvc;

import com.thoughtworks.domain.First;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("first")
public class HomeController {

    @RequestMapping("second")
    public ModelAndView writeTheFirst(Model model) {
        First first = new First("kkk", "lll");
        First second = new First("aaa", "bbb");
        model.addAttribute(first);
        model.addAttribute(second);
        return new ModelAndView("home" ,"homeK", model);
    }
}


First.java:使用到的model

package com.thoughtworks.domain;

public class First {
    String kkk, lll;

    public First(String kkk, String lll) {
        this.kkk = kkk;
        this.lll = lll;
    }

    public String getKkk() {
        return kkk;
    }

    public void setKkk(String kkk) {
        this.kkk = kkk;
    }

    public String getLll() {
        return lll;
    }

    public void setLll(String lll) {
        this.lll = lll;
    }
}

home.jsp:和controller最后返回的ModelAndView的第一个参数对应,并使用viewResolver定义的解析方法被找到。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" %>

<table>
    <thead>
    <th>Index</th>
    <th>Content</th>
    </thead>
    <tbody>
        <tr>
            <td><c:out value="${model.kkk}"/></td>
            <td><c:out value="${homeK.lll}"/></td>
        </tr>
    </tbody>
</table>

以上就为Spring处理一个请求的完整过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值