您现在的位置是:首页 >技术杂谈 >SpringMVC学习1网站首页技术杂谈

SpringMVC学习1

海量的海 2024-09-04 00:01:02
简介SpringMVC学习1

SpringMVC

SpringMVC简介

1、什么是MVC

MVC是一种软件架构的思想,将软件按照模型、视图、控制器划分

M:Model,模型层,指工程中的JavaBean,作用是处理数据

Javabean分为两类:

  • 实体类bean:专门储存业务数据的,如uesr
  • 业务处理bean:指service或dao对象,专门用于处理业务逻辑和数据访问

V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据

C:Controller,控制层,指工程中的servlet,作用是接收请求和响应浏览器

MVC工作流程:

用户通过视图层发送请求到服务器,在服务器中请求被Controller接收,Controller调用相应的Model层处理请求,处理完毕将结果返回到Controller,Controller再根据请求处理的结果找到相应的View视图,渲染数据后最终响应给浏览器

2、什么是SpringMVC

SpringMVC是Spring的一个后续产品,是spring的一个子项目

SpringMVC是spring为表述层开发(servlet)提供的一个框架,SpringMVC就是封装了servlet

三层架构分为表述层(表示层)、业务逻辑层、数据访问层,表述层表示前台页面和后台servlet

3、SpringMVC的特点

(1)Spring家族原生产品,与IoC容器对接

(2)基于原生的servlet,通过封装的servlet管理控制器DispatcherServlet,对请求和响应进行统一处理

(3)表述层各个细分领域需要解决的问题全方位覆盖,提供全面解决方案

(4)提高开发效率

(5)内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应的组件即可

SpringMVC入门

建议用tomcat10版本以下去测试

(1)引入依赖

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.1</version>
</dependency>
<!-- servletAPI -->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
  <!-- slf4j日志门面的一个具体实现 -->
  <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.4.5</version>
    <scope>test</scope>
</dependency>
<!-- spring5和hymeleaf整合包 -->
<!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf-spring5 -->
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.15.RELEASE</version>
</dependency>

(2)配置web.xml

注意:

SpringMVC的配置文件默认的位置和名称:
位置:WEB-INF下
名称:-servlet.xml,以下配置的文件名称为SpringMVC-servlet.xml

url-pattern中/和/*的区别:

  • /:匹配浏览器向服务器发送的所有请求(不包括.jsp)
  • /*:匹配浏览器向服务器发送的所有请求(包括.jsp)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>Archetype Created Web Application</display-name>
  <!-- 配置SpringMVC的前端控制器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>/</url-pattern>
  </servlet-mapping>
</web-app>

(3)创建请求控制器

由于前端控制器对浏览器发送的请求进行了统一的处理,但是具体的请求有不同的处理过程,因此需要创建处理具体请求的类,即请求控制器

请求控制器中每一个请求处理的方法成为控制器方法

因为springMVC的控制器由一个pojo(普通的Java类)担任,因此需要提通过@Controller注解将其标识为一个控制层组件

@Controller
public class HelloController {

}

(4)创建SpringMVC的配置文件

当前文件名为:SpringMVC-servlet.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context.xsd 
     http://www.springframework.org/schema/util
     http://www.springframework.org/schema/util/spring-util-4.1.xsd
     http://www.springframework.org/schema/aop
     http://www.springframework.org/schema/aop/spring-aop.xsd
     http://www.springframework.org/schema/tx 
     http://www.springframework.org/schema/tx/spring-tx.xsd">

	 <context:component-scan base-package="controller"></context:component-scan>
	 
	 <!-- 配置Thymeleaf视图解析器 -->
	<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
    	<property name="order" value="1"/>
    	<property name="characterEncoding" value="UTF-8"/>
    	<property name="templateEngine">
        	<bean class="org.thymeleaf.spring5.SpringTemplateEngine">
            	<property name="templateResolver">
                	<bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">   
                    	<!-- 视图前缀 -->
                    	<property name="prefix" value="/WEB-INF/templates/"/>    
                    	<!-- 视图后缀 -->
                    	<property name="suffix" value=".html"/>
                    	<property name="templateMode" value="HTML5"/>
                    	<property name="characterEncoding" value="UTF-8" />
                	</bean>
            	</property>
        	</bean>
    	</property>
	</bean>	

</beans>

(5)创建index.html

在/WEB-INF/templates/下创建index.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<!-- xmlns:th="http://www.thymeleaf.org": 引入thymeleaf -->
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>Hello World!</h2>
<a th:href="@{/hello }">测试SpringMVC</a>
<a href="/hello">测试绝对路径</a>
</body>
</html>

以及success.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>success</h1>
</body>
</html>

(6)编辑control层

@Controller
public class HelloController {
	@RequestMapping("/")
	public String protal() {
		//将index.html
		return "index";
	}
	
	@RequestMapping("/hello")
	public String hello() {
		return "success";
	}
}

image-20230606170154422

(7)测试

开启tomcat9测试

(8)补充:将配置文件设置到resources下

在web.xml中修改servlet配置

  <servlet>
  	<servlet-name>SpringMVC</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <!-- 初始化配置
 		   classpath:将springmvc配置文件转到resources下
	   -->
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:springmvc.xml</param-value>
  	</init-param>
      <!-- 
		不在浏览器开启第一时间去访问DispatcherServlet:将DispatcherServlet的初始化时间提前到服务器启动时
	   -->
      <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>SpringMVC</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>
classpath是什么:

classpath直译过来是类路径,是Java环境配置中要设置的一个环境变量,就是.class文件的路径,表示JVM从哪里去寻找要运行的class文件,classpath = D:java表示执行java命令时去D:java目录中去找需要被执行的class文件并运行。

一般一个web工程中java、resources下的路径都是类路径。src/main/下面的javaresources文件夹都被(编译)打包到了生产包的WEB-INF/classes/目录下;而原来WEB-INF下面的views和web.xml则仍然还是在WEB-INF下面。同时由maven引入的依赖都被放入到了WEB-INF/lib/下面。最后,编译后的class文件和资源文件都放在了classes目录下。
行java命令时去D:java目录中去找需要被执行的class文件并运行。
一般一个web工程中java、resources下的路径都是类路径。src/main/下面的javaresources文件夹都被(编译)打包到了生产包的WEB-INF/classes/目录下;而原来WEB-INF下面的views和web.xml则仍然还是在WEB-INF下面。同时由maven引入的依赖都被放入到了WEB-INF/lib/下面。最后,编译后的class文件和资源文件都放在了classes目录下。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。