StringMVC
文章目录
MVC
MVC全称是Model View Controller:
-
模型(model): 表示应用程序核心(比如数据库记录列表)。是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
-
视图(view): 显示数据(数据库记录)。是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的。
-
控制器(Controller) 处理输入(写入数据库记录)。是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数
MVC一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
MVC是一个框架模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + servlet+ javabean的模式。
SpringMVC
概述
Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。
Spring MVC的核心组成以及处理流程:
-
1.DispatcherServlet(前端控制器): 是整个SpringMVC的控制中心。浏览器发出请求,DispatcherServlet接收并拦截请求。
假设请求的url为:http://localhost:8080/springmvc/haha
http://localhost:8080是服务器域名
springmvc部署在服务器上的web站点
haha表示控制器
即请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。
-
2.HandlerMapping(处理器映射器): 被DispatcherServlet调用,根据url查找Handler,处理后返回。
-
3.HandAdapter(处理器适配器):被DispatcherServlet调用,按着给定的规则执行Handler
-
4.Handler(处理器):找到具体的Controller并让它执行。
5.Controller将执行信息(如:ModelAndView)返回给HandAdapter
6.HandAdapter将信息又传给DispatcherServlet
-
7.ViewResolver(视图解析器):被DispatcherServlet调用,解析传来的视图信息
8.DispatcherServlet调用具体的视图
9.将视图展现给用户
代码实现(第一个springmvc项目)
❤️.<1.建一个MAVEN项目,在pom.xml中设置资源过滤并引入相关依赖(导包)
资源过滤
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
导包
<dependencies>
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!-- Spring MVC 及 Spring系列包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.24.RELEASE</version>
</dependency>
<!--Servlet核心-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<!-- JSTL -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
❤️.<2.编写Web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<!--注册servlet-->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--指定springMVC配置文件的位置,进行关联-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--设置启动顺序-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--所有的请求都会被SpringMVC拦截-->
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
❤️.< 3.编写springMVC配置文件
命名规则:[springmvcNAME]+[-servlet.xml]
例如我写的名字为: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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
<!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
<context:component-scan base-package="priv.sehun.controller"/>
<!-- 让Spring MVC不处理静态资源 -->
<mvc:default-servlet-handler />
<!--
支持mvc注解驱动
在spring中一般采用@RequestMapping注解来完成映射关系
要想使@RequestMapping注解生效
必须向上下文中注册DefaultAnnotationHandlerMapping
和一个AnnotationMethodHandlerAdapter实例
这两个实例分别在类级别和方法级别处理。
而annotation-driven配置帮助我们自动完成上述两个实例的注入。
-->
<mvc:annotation-driven/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!--前缀-->
<!--
在视图解析器中我们把所有的视图都存放在/WEB-INF/目录下,
这样可以保证视图安全,因为这个目录下的文件,客户端不能直接访问。
【jsp】是我起的包名,这个随心起
-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
❤️.<4.编写Controller
package priv.sehun.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
//该注解是为了能让IOC容器初始时可以扫描到
@Controller
//映射请求路径:/haha/hello
@RequestMapping("/haha")
public class HelloController {
@RequestMapping("/hello")
public String Hello(Model model){
model.addAttribute("info","Hello,SpringMVC");
//视图解析器会将text解析为 /WEB-INF/jsp/text.jsp
return "text";
}
}
❤️.<5.编写视图
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${info}
</body>
</html>
❤️.<6.配置Tomcat并运行