spring学习笔记 (8)springMVC程序的入门

这篇博客介绍了SpringMVC的入门程序,详细解析了web项目的目录结构,包括lib目录下的依赖、HelloWorldController控制器、myapp-config.xml配置、helloworld.jsp视图以及web.xml的DispatcherServlet配置。博主通过运行示例展示了访问效果,并概述了springMVC的运行原理,重点解释了前端控制器DispatcherServlet在请求处理中的作用。
摘要由CSDN通过智能技术生成

本例先通过入门程序来讲解springMVC的大致工作原理

(一)web项目的目录结构

(以下代码段中各部分的作用已经使用注释标注,可对照后边(三)springMVC的运行原理进行查看)
在这里插入图片描述

lib目录下是所有需要依赖的jar包

HelloWorldController.java:是用于处理请求的控制器

package com.unknown.controller;

import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;


public class HelloWorldController implements Controller {
    //handleRequest方法提供请求处理逻辑
    @Override
    public ModelAndView handleRequest(HttpServletRequest request,
                                      HttpServletResponse response) {
        Map<String,String> modelData = new HashMap<String, String>();
        modelData.put("msg","Hello, my first springMVC programme");
        //handleRequest方法将会返回一个包含modelData信息的ModelAndView对象
        return new ModelAndView("helloWorld",modelData);
    }
}

myapp-config.xml:包含控制器的bean定义以及处理程序的映射

<?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/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">


    <bean name="helloWorldController"
          class="com.unknown.controller.HelloWorldController"/>

    <!-- 使用SimpleUrlHandlerMapping
        将http请求映射到负责处理该请求的控制器
             这里使用url路径/sayhello 将请求映射到控制器HelloWorldController
     -->
    <bean id="handlerMapping"
          class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="urlMap">
            <map>
                <entry key="/sayhello" value-ref="helloWorldController"/>
            </map>
        </property>
    </bean>
    
    <!-- 使用InternalResourceViewResolver
        将ModelAndView对象中的包含视图名的内容(本例中是helloWorld) 定位到具体的视图(/WEB-INF/jsp/helloWorld.jsp)
        其实就是将对应的请求的url路径映射到指定的视图(即某jsp文件)
     -->
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--这里指定要给名称加上的对应的前缀与后缀
                prefix 前缀    suffix 后缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

helloworld.jsp:前端用于展示的视图文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>
<head>
    <title>hello</title>
</head>
<body>
${msg}
<!--这里打印出由Controller返回到视图ModelAndView对象中msg模型特性的值-->
</body>
</html>

web.xml:这里是对前端控制器DispatcherServlet进行部署配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <!-- 配置前端控制器 -->
        <servlet-name>hello</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 初始化时加载配置文件 -->
        <init-param>
            <!--这里如果不指定contextConfigLocation,前端控制器将直接在WEB-INF目录下查找名为 (servlet-name)-servlet.xml-->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:myapp-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!--这里将前端控制器映射到/helloworld/* -->
    <!--综合前边将控制器HelloWorldController映射到/sayhello -->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/helloworld/*</url-pattern>
    </servlet-mapping>

    <!-- 解决乱码的过滤器 -->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>

        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

(二) 运行效果

使用浏览器访问http://localhost:8080/helloworld/sayhello得到的效果:
在这里插入图片描述

(三)springMVC的运行原理

在spring web mvc中,其核心是前端控制器DispatcherServlet,这次请求的整个运行流程如下:
在这里插入图片描述
菜鸟一枚,有错误的地方欢迎指出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值