MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
SpringMVC是一种基于Java的实现MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发。
创建Maven项目,选择Create form archetype,使用webapp模板。
如果什么都不修改,除了取名以外一直点下一步的话,完成以后开始等待创建项目会很慢(和网络无关,挂代理也会很慢),好不容易等了几分钟,最后的结果如下图,可以看到写的是No archetype found in remote catalog. Defaulting to internal catalog。就是在远程目录中找不到原型,默认为内部目录,既然远程目录没有,那可不可以通过配置直接选择使用内部目录,没错,可以。
所以创建项目时不要急着点下一步,在写好项目名字的下一步里点击右上角的“+”添加一项配置,archetypeCatalog,值为internal。如下图,可以直接使用内部目录,避免等待。
这次点击finish后只等了几秒项目就创建完毕了。
然后会发现它的目录结构并不全,需要在main下创建java和resources目录,但是普通的目录并不能创建类,要右键→make directory as source root,同时把resources也设置成resources root,如下图:
需要修改的地方如下:
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.source>1.7maven.compiler.source>
<maven.compiler.target>1.7maven.compiler.target>
<java.version>13java.version>
<spring.version>5.2.0.RELEASEspring.version>
properties>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>servlet-apiartifactId>
<version>2.5version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.servlet.jspgroupId>
<artifactId>jsp-apiartifactId>
<version>2.2.1-b03version>
<scope>providedscope>
dependency>
dependencies>
在webapp/WEB-INF/web.xml中配置
<web-app>
<display-name>Archetype Created Web Applicationdisplay-name>
<servlet>
<servlet-name>dispatcherServletservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>dispatcherServletservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
web-app>
在resources中新建spring配置文件,取名为springmvc
在运行按钮旁边添加配置,使用Tomcat Server,在Deployment中添加Artifact
原本自带的index.jsp里面没有jsp的头,输入中文会乱码,删掉index.jsp,然后重新创建一个,会自动生成头。然后添加一个超链接。或者直接复制下面的:
<%--
Created by IntelliJ IDEA.
User:
Date: 2019/12/1
Time: 11:07
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Titletitle>
head>
<body>
<h1>入门程序h1>
<a href="hello">入门程序a>
body>
html>
在com.cjx.controller包下创建HelloController类,使用这个类时需要创建对象,可以交给spring的容器来处理,那么就需要使用注解
package com.cjx.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author :
* @date :Created in 2019/12/1 11:11
* @description : controller
*/
@Controller
public class HelloController {
@RequestMapping(path = "/hello")
public String sayHello(){
System.out.println("Hello SpringMVC");
return null;
}
}
既然要用到自动注入,需要在配置文件中告诉它要扫描的包,同时要添加一些名称空间
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.cjx"/>
beans>
到现在,虽然配置文件配置好了,但是并没有被使用,需要在web.xml中进行初始化
<web-app>
<display-name>Archetype Created Web Applicationdisplay-name>
<servlet>
<servlet-name>dispatcherServletservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:springmvc.xmlparam-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>dispatcherServletservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
web-app>
将HelloController中的方法返回值设置为"success",会看到提示:No viewer resolvers found。需要创建一个success.jsp来给前端显示。在WEB-INF文件夹下新建一个目录pages,里面创建一个success.jsp文件,里面body随便写一些内容。
为了让方法能找到这个jsp,我们需要配置一个视图解析器,在springmvc.xml中添加一个bean,顺便一提,我们后面的开发肯定会用到注解,这里把SpringMVC注解支持也打开。
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
bean>
<mvc:annotation-driven/>
点击运行后进入浏览器输入http://localhost:8080/springmvc01_start_war/
点击超链接后可以跳转到刚刚创建的success.jsp界面
同时控制台会输出Hello SpringMVC,说明的确调用了SayHello方法
至此,入门程序运行成功。
SpringMVC的流程: