当前位置: 首页 / 技术干货 / 正文
SpringMVC源码解析(一)

2023-03-09

   springmvc modelandview

  1 SpringMVC基于XML配置开发

  所谓配置式开发是指,“处理器类是程序员手工定义的、实现了特定接口的类,然后再在SpringMVC配置文件中对该类进行显式的、明确的注册”的开发方式。

  1.1 SpringMVC基于XML配置开发分析

  1.SpringMVC开发Web项目结构设计。

  2.SpringMVC的执行流程概要分析。

  1.2 SpringMVC基于XML配置开发实现

  1.在项目的pom.xml文件中导入spring-webmvc依赖。

<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.22</version>
</dependency>
</dependencies>

  2.在WEB-INF文件夹下创建hello.jsp页面。

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>SpringMVC基于XML配置开发</title>
</head>
<body>
<h1>SpringMVC基于XML配置开发案例</h1>
<p>${msg}</p>
</body>
</html>

  3.编写web容器的核心配置文件web.xml。

<!-- 配置SpringMVC前端控制器:所有的请求都将提交给DispatcherServlet类 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- contextConfigLocation:表示用于加载Bean的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-servlet.xml</param-value>
</init-param>
</servlet>
<!-- 配置Servlet映射 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- url映射路径,"/"表示能够匹配浏览器提交过来的所有请求 -->
<url-pattern>/</url-pattern>
</servlet-mapping>

  4.在com.cy.controller包下创建HelloController类,并编写控制层的代码。

package com.cy.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/** 控制层:SpringMVC框架提供一个Controller接口 */
public class HelloController implements Controller {

/** 请求url找到对应的Controller类之后,会执行handlerRequest()方法 */
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
/** 需求:当浏览器访问/hello请求时,服务器返回一个"Hello SpringMVC!!!"字符串给浏览器页面显示 */
/*
* 数据模型和视图类:内部封装了request对象获取参数和赋值参数的操作
* 作用:替代了request.getParameter()和request.setAttribute()方法
*/
ModelAndView modelAndView = new ModelAndView();
// 设置需要返回的值
modelAndView.addObject("msg", " Hello SpringMVC!!!");
// 设置跳转到指定的页面;例如:访问hello.jsp页面,那么将视图的名称设置为hello
modelAndView.setViewName("hello");
return modelAndView;
}
}

  5.在WEB-INF文件夹下创建SpringMVC的核心配置文件springmvc-servlet.xml,并进行代码的编写。

<?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.xsd">

<!-- 注册处理器映射器
作用:处理器映射器会根据请求的url与Spring容器中定义的处理器bean的name属性值进行匹配,从而在Spring容器中找到处理器bean实例
说明:bean标签如果没有配置id属性,那么Spring会为bean自动生成一个id,id的规则是:包名.类名#数字 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

<!-- 注册处理器
name="":表示对应着一个前端的请求,name属性值必须以“/”开头
class="":表示对应请求从DispatcherServlet发送过来后,对应的后台处理类 -->
<bean name="/hello" class="com.cy.controller.HelloController"></bean>

<!-- 配置处理器适配器HandlerAdapter
作用:根据HandlerMapping返回的Controller,执行一个匹配规则,主要是找到对应的Handler去处理Controller中的方法 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>

<!-- 配置视图解析器ViewResolver
作用:根据路径的前缀后缀匹配找到相应的jsp页面,然后再进行视图渲染 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 路径的前缀:/WEB-INF/ -->
<property name="prefix" value="/WEB-INF/"></property>
<!-- 路径的后缀:.jsp -->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>

  6.启动Tomcat服务,访问http://localhost:8080/springmvc_01_introduction_war_exploded/hello地址进行进行测试。

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号