SpringMVC作用、SpringMVC核心组件、创建项目流程

SpringMVC框架

1. 作用

解决了V-C的交互问题,即视图与控制器的交互问题。

在原生的Java EE技术中,使用Servlet作为项目中的控制器,用于接收用户的请求,并给予响应结果。这种做法最大的问题在于:在常规做法中,每个Servlet对应1个请求路径,例如LoginServlet处理login.do的请求,而RegisterServlet处理register.do的请求,所以,会导致Servlet数量太多,不便于管理(无论从源文件的数量,还是从配置文件的内容),且对象太多进而占用大量内存空间的问题!

并且,在请求的处理过程中,还存在许多操作不简便的做法!

1.2. SpringMVC核心组件

  1. DispatcherServlet

前端控制器,主要职责是接收所有请求(根据配置文件来决定),并将请求转发给对应的控制器,接收控制器的处理结果,确定最终由哪个视图完成响应!

  1. HandlerMapping

处理请求路径与控制器的映射关系。

  1. Controller

实际处理请求的组件,例如接收请求参数,决定最终是转发或重定向的方式来响应。

  1. ModelAndView

控制器的处理结果,其中的Model表示转发的数据(如果是重定向,则Model没有意义),而View表示最终负责响应的视图组件的名称。

  1. ViewResolver

根据视图组件的名称,确定具体使用的是哪个视图组件。

1.3. SpringMVC-HelloWorld

1.3.1. 创建项目

创建Maven Project,勾选Create a simple project,然后,Group Id值为cn.tedu.springArtifact Id值为SPRINGMVC-01-HELLOWORLDPackaging选择war

接下来,需要执行4个步骤(以后每次创建项目时都需要做的事情):

  1. 生成web.xml文件;
  2. 添加依赖:在此前的项目中找到pom.xml,将其中的依赖的代码复制到当前项目中,关于依赖的jar包,会越用越多,学习时,只加不减;
  3. 复制spring.xml文件到当前项目中,并删除其中的配置,除非你确定这些配置是当前项目中必须使用的;
  4. 为项目添加Tomcat运行环境;

1.3.2. 配置DispatcherServlet

由于需要DispatcherServlet接收所有请求,所以,首先必须在web.xml配置它:

<!-- 配置DispatcherServlet -->
<servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

经过以上配置,则任何以.do作为后缀的请求,都将由DispatcherServlet来处理!

由于项目是基于Spring的,希望项目启动时就加载Spring的配置文件,并使得DispatcherServlet已经完成初始化可以随时接收请求,所以,还需进一步的配置:

<!-- 配置DispatcherServlet -->
<servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 配置spring的配置文件 -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring.xml</param-value>
    </init-param>
    <!-- 启动Tomcat时即初始化该Servlet -->
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

至此,当项目启动时,就会初始化DispatcherServlet,并且,在初始化过程中,会加载Spring的配置文件。

测试

如果Spring能正常工作,则配置是成功的!

src\main\java中创建一个测试类cn.tedu.spring.test.Test,并且,显式的添加构造方法,并输出内容:

@Component
public class Test {

    public Test() {
        System.out.println("已经加载Spring配置文件!");
    }

}

然后,在Spring的配置文件中添加组件扫描:

<context:component-scan base-package="cn.tedu.spring" />

最终,把项目部署到Tomcat,并启动Tomcat,在启动日志中如果能够看到以上输出语句,则成功!

1.3.3. 设计目标

发出请求http://localhost:8080/项目名称/hello.do,要求在界面中显示HelloWorld字样。

1.3.4. 处理请求

以上完成了流程中的第1步,接下来,如果发出hello.do请求,就会被DispatcherServlet接收得到,然后,DispatcherServlet应该根据hello.do请求路径去询问HandlerMapping得知由哪个控制器去处理请求,原始的实现方式是使用SimpleUrlHandlerMapping类去进行配置,不过,这种配置方式非常麻烦,而且,对应关系不明确(所有的路径与控制器的配置都在同一个配置文件中,导致不便于管理),所以,后续都是使用注解完成相关配置,则在开发过程中,跳过第2步和第3步(只是开发时不用关注,框架的执行流程不变)。

为了确保有控制器处理请求,所以,创建HelloController

所有的控制器都应该是由Spring管理的,所以,需要为控制器类添加@Controller注解:

@Controller
public class HelloController {

}

然后,在类中自定义处理请求的方法,方法的访问权限是public的,返回值暂时使用String,方法的名称可以自由定义,方法的参数暂时留空:

public String showHello() {
}

在SpringMVC中,请求对应的可以是某个方法,而不一定每个请求对应一个控制器类,如果请求对应的是以上方法,则需要在方法的声明之前添加@RequestMapping("/hello.do")

@RequestMapping("/hello.do")
public String showHello() {
}

完成以上步骤后,即表示:路径为/hello.do的请求将触发showHello()方法被执行!

测试

在以上方法中输出任意语句,然后,启动项目,请求对应的路径,观察控制台输出:

@RequestMapping("/hello.do")
public String showHello() {
    System.out.println(
        "HelloController.showHello()");
    return null;
}

实际运行效果是:页面会显示错误:

控制台可以看到输出语句:

1.3.5. 显示页面

至此,执行流程已经完成前4步,接下来,控制器应该向DispatcherServlet返回结果:

@RequestMapping("/hello.do")
public String showHello() {
    // 测试
    System.out.println(
        "HelloController.showHello()");
    // 返回视图组件的名称
    return "helloworld";
}

以上返回的字符串表示最终负责显示的视图组件的名称,但是,并不表示是哪个文件!

接下来,需要配置ViewResolver,使得DispatcherServlet通过它可以知道刚才控制器返回的"helloworld"到底是哪个页面!

实际使用的ViewResolverInternalResourceViewResolver,需要在spring.xml进行配置:

<!-- 配置视图解析器ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
</bean>

InternalResourceViewResolver的工作方式是以项目的根路径为参考(在开发时,对应的是webapp文件夹),使用前缀+视图组件名+后缀得到视图文件的位置,例如实际存在的jsp文件是webapp/WEB-INF/helloworld.jsp,由于它本身使用webapp作为根级,所以,前缀是/WEB-INF/,后缀是.jsp,结合控制器返回的"helloworld"进行拼接,就可以得到以上路径,从而确定视图组件的位置,例如配置为:

<!-- 配置视图解析器ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 配置前缀 -->
    <property name="prefix" value="/WEB-INF/" />
    <!-- 配置后缀 -->
    <property name="suffix" value=".jsp" />
    <!-- 经过以上配置后, -->
    <!-- 当前项目中的jsp文件都应该放在/WEB-INF/下 -->
</bean>

基于视图解析器的前缀是/WEB-INF/,后缀是.jsp,结合控制器返回的"helloworld"字符串,则需要在WEB-INF文件夹下创建名为helloworld.jsp的文件完成最终的显示:

通过浏览器再次访问,实际效果应该是:

1.3.6. 小结

  1. 本案例中关于web.xml中的DispatcherServlet的配置,和spring.xml中的InternalResourceViewResolver的配置,是相对固定的配置,在后续的项目开发时,可以直接复制使用,但是,注意理解配置的值的意义;
  2. 处理请求的方法的声明语句应该例如:public String xx()
  3. 处理请求的方法的返回值可以理解为JSP文件的文件名;

原文地址:https://www.cnblogs.com/ahaijava/p/10064608.html

时间: 2024-08-24 02:00:14

SpringMVC作用、SpringMVC核心组件、创建项目流程的相关文章

Django 创建项目流程

django 项目创建流程 1 创建项目 cmd django-admin startproject 项目名称 pycharm file -- new project -- Django -- 项目名字 -- 选择解释器 -- 输入app名称 -- 创建 2 启动项目 cmd ** 切换到项目根目录下 manage.py python manage.py runserver #127.0.0.1:8000 python manage.py runserver 80 # 127.0.0.1:80

vue-cli 3.0 安装和创建项目流程

使用前我们先了解下3.0较2.0有哪些区别 一.3.0 新加入了 TypeScript 以及 PWA 的支持二.部分命令发生了变化: 1.下载安装  npm install -g [email protected] 2.删除了vue list 3.创建项目   vue create 4.启动项目   npm run serve三.默认项目目录结构也发生了变化: 1.移除了配置文件目录,config 和 build 文件夹 2.移除了 static 文件夹,新增 public 文件夹,并且 ind

搭建Spring + SpringMVC + Mybatis框架之一(创建项目)

1.创建项目 用maven管理项目很方便,不用手动下载jar包,直接在pom.xml配置文件中,maven可以帮助我们自动下载,非常方便 新建一个web project,添加maven支持就可以了,这样创建出来的项目,目录很全,src/main/java,resource,test都有. 选择默认的web.xml配置. 勾选后一个JEE 后面这两个我们都不需要,之所以前面勾选是为了使用它默认的文件夹. 最后创建成功后的项目目录为: OK,一个maven项目创建成功. 来自为知笔记(Wiz)

SpringMVC Maven创建项目

一.配置Maven环境: 1.去官网下载好Maven,并解压: 2.添加环境变量: ①添加环境变量,如下: ②把maven的bin目录添加到环境变量path下面,如下(我系统是win10,win7编辑path环境变量界面可能不一致,记得前面加;和原来的环境变量隔开即可): ③校验是否配置成功,在命令行中输入:mvn -version 回车即可查看版本信息:(这一步一定要做,否则下面找不到.m2/user-settings.xml文件) 3.然后在eclipse里面配置好maven开发环境(我用的

SpringMVC基础入门,创建一个HelloWorld程序

ref:http://www.admin10000.com/document/6436.html 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!--configure the setting of springmvcDispatcherServlet and configure the ma

spring + springMVC + spring Data + jpa + maven 项目框架搭建

首先看一下项目结构: 所用到的jar(pom.xml): <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.xs

django的项目创建简明流程

个人理解,不妥之处请指出 创建项目:django-admin startproject user_sys 创建APP:python manage.py startapp auth 测试项目创建是否成功:localhost:8000 It Works! #注册APP到settings中 设置templates路径:'DIRS': [os.path.join(BASE_DIR,'templates')], 创建数据模型models 进行数据迁移python manage.py migrate 数据模

[email&#160;protected]初体验之前篇-回顾[email&#160;protected]创建项目的流程

模拟实际工作中的操作,假如新开启了一个vue项目,可以先看看上篇博文中的git操作,新建空仓库vue-demo,并拉取到本地,创建本地dev分支后 1. 全局安装vue-cli yarn global add vue-cli // 检查是否已安装成功 vue -V // 2.9.6 2. 使用vue init 创建项目,官方提供了6种模板,对于大多数人而言,工作中选择webpack模板 // 使用vue init 创建项目(.指当前目录) vue init webpack . ? Generat

一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器

一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字段的删除过程中需不需要对数据进行备份 ''' 二.路由基础 ''' # url中含有四个参数 # url(regex, view, kwargs=None, name=None) # 正则路径 视图函数地址 默认关键字参数(了解) 路由别名 # r'index' 只要请求中含有index都可以匹配成