介绍
这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长!
以下为小编最喜欢的两句话:
要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。
一个人为什么要努力? 我见过最好的答案就是:因为我喜欢的东西都很贵,我想去的地方都很远,我爱的人超完美。因此,小编想说:共勉!
目录
一、SpringMVC简介
1、什么是MVC
2、什么是SpringMVC
3、SpringMVC的特点
二、HelloWorld
1、开发环境
2、创建maven工程
3、配置web.xml
1)默认配置方式
2)扩展配置方式
4、创建请求控制器
5、创建springmvc的配置文件
6、测试HelloWorld
一、SpringMVC简介
1、什么是MVC
MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分
M:Model,模型层,指工程中的JavaBean,作用是处理数据
JavaBean分为两类:
-
一类称为实体类Bean:专门存储业务数据的,如 Student、User 等
-
一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理业务逻辑和数据访问。
V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据
C:Controller,控制层,指工程中的servlet,作用是接收请求和响应浏览器
MVC的工作流程: 用户通过视图层发送请求到服务器,在服务器中请求被Controller接收,Controller调用相应的Model层处理请求,处理完毕将结果返回到Controller,Controller再根据请求处理的结果找到相应的View视图,渲染数据后最终响应给浏览器
2、什么是SpringMVC
SpringMVC是Spring的一个后续产品,是Spring的一个子项目
SpringMVC 是 Spring 为表述层开发提供的一整套完备的解决方案。在表述层框架历经 Strust、WebWork、Strust2 等诸多产品的历代更迭之后,目前业界普遍选择了 SpringMVC 作为 Java EE 项目表述层开发的首选方案。
注:三层架构分为表述层(或表示层)、业务逻辑层、数据访问层,表述层表示前台页面和后台servlet
3、SpringMVC的特点
-
Spring 家族原生产品,与 IOC 容器等基础设施无缝对接
-
基于原生的Servlet,通过了功能强大的前端控制器DispatcherServlet,对请求和响应进行统一处理
-
表述层各细分领域需要解决的问题全方位覆盖,提供全面解决方案
-
代码清新简洁,大幅度提升开发效率
-
内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可
-
性能卓著,尤其适合现代大型、超大型互联网项目要求
二、HelloWorld
1、开发环境
IDE:idea 2022.3.2
JDK:jdk1.8
构建工具:maven3.8.1
服务器:tomcat9.0.75(下图中tomcat的名字虽然为10.0.27但是实际使用的是9.0.75,注意分辨)
Spring版本:5.3.1
2、创建maven工程
创建新的项目,选择maven项目
1)创建成功后pom.xml文件为下图的样子(打包方式为war包,因为在tomcat下运行的),不过还需要添加其他的依赖
2)左边的目录栏会出现webapp的文件夹,以及WEB-INF文件夹、子级web.xml、index.jsp
添加其他的一些依赖
<!-- SpringMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.1</version>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!-- ServletAPI -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
小插曲
springmvc pom.xml文件中 <scope>provided</scope>有什么含义?
在SpringMVC的pom.xml文件中,<scope>provided</scope>是用来指定依赖的作用范围,其含义如下:
1)当一个依赖声明为<scope>provided</scope>时,表示这个依赖在编译和测试阶段需要使用,但是在打包成war包或者jar包时不需要打包进去,因为这个依赖在应用程序的服务器容器中已经存在。
2)在开发Web应用程序时,常见的可提供范围依赖包括Java Servlet API、Java Server Pages(JSP)API、JavaServer Faces(JSF)API等。这些API是Web容器提供的,因此编写Web应用程序时需要使用这些API,但是在部署Web应用程序时无需将这些API打包进入war包中。需要注意的是,虽然<scope>provided</scope>指定的依赖不会打包进入war包或者jar包中,但是在开发和测试阶段需要将这些依赖添加到类路径中,否则会出现编译错误或运行时错误。
使用不同的工具类打war包,war包路径不同
在使用IntelliJ IDEA中通过Tomcat打成war包时,默认情况下war包会生成在工程的/target目录下。
具体来说,使用IntelliJ IDEA打成war包的步骤为:
1. 点击菜单栏中的“Build” -> “Build Artifacts...”打开“Build Artifacts”窗口。
2. 在“Build Artifacts”窗口中,选择需要打包的Web工程,然后点击底部的“Build”按钮。
3. 在弹出的“Build Artifacts”对话框中,选择“Build”或“Rebuild”操作,并勾选“Build 'artifact-name.war'”选项,最后点击“OK”按钮。
4. 打包完成后,war包会生成在工程的/target目录下,其中artifact-name为你在“Build Artifacts”窗口中设置的artifact名称。需要注意的是,如果你使用的是Tomcat插件来启动Tomcat服务器,那么war包也会自动发布到Tomcat服务器目录中,例如在启动Tomcat时,会发现在Tomcat安装目录下的webapps目录中会出现一个对应Web工程的war包。
3、配置web.xml
注册SpringMVC的前端控制器DispatcherServlet
有两种方式可以去配置
1)默认配置方式
此配置作用下,SpringMVC的配置文件默认位于WEB-INF下,默认名称为springMVC-servlet.xml,一般配置文件都在resources下,所以小编不使用此方式
<!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!--
设置springMVC的核心控制器所能处理的请求的请求路径
/所匹配的请求可以是/login或.html或.js或.css方式的请求路径
但是/不能匹配.jsp请求路径的请求
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
2)扩展配置方式
可通过init-param标签设置SpringMVC配置文件的位置和名称,通过load-on-startup标签设置SpringMVC前端控制器DispatcherServlet的初始化时间
<!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 通过初始化参数指定SpringMVC配置文件的位置和名称 -->
<init-param>
<!-- contextConfigLocation为固定值 -->
<param-name>contextConfigLocation</param-name>
<!-- 使用classpath:表示从类路径查找配置文件,例如maven工程中的src/main/resources -->
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--
配置加载顺序 正数 按顺序执行
(作为框架的核心组件,在启动过程中有大量的初始化操作要做
而这些操作放在第一次请求时才执行会严重影响访问速度
因此需要通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时)
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!--
设置springMVC的核心控制器所能处理的请求的请求路径
/所匹配的请求可以是/login或.html或.js或.css方式的请求路径
但是/不能匹配.jsp请求路径的请求
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
注:
<url-pattern>标签中使用/和/*的区别:
/所匹配的请求可以是/login或.html或.js或.css方式的请求路径,但是/不能匹配.jsp请求路径的请求
因此就可以避免在访问jsp页面时,该请求被DispatcherServlet处理,从而找不到相应的页面
/*则能够匹配所有请求,例如在使用过滤器时,若需要对所有请求进行过滤,就需要使用/*的写法
web.xml的全部配置
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--字符编码过滤器-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--指定字符集-->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 通过初始化参数指定SpringMVC配置文件的位置和名称 -->
<init-param>
<!-- contextConfigLocation为固定值 -->
<param-name>contextConfigLocation</param-name>
<!-- 使用classpath:表示从类路径查找配置文件,例如maven工程中的src/main/resources -->
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--
配置加载顺序 正数 按顺序执行
(作为框架的核心组件,在启动过程中有大量的初始化操作要做
而这些操作放在第一次请求时才执行会严重影响访问速度
因此需要通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时)
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!--
设置springMVC的核心控制器所能处理的请求的请求路径
/所匹配的请求可以是/login或.html或.js或.css方式的请求路径
但是/不能匹配.jsp请求路径的请求
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
4、创建请求控制器
由于前端控制器对浏览器发送的请求进行了统一的处理,但是具体的请求有不同的处理过程,因此需要创建处理具体请求的类,即请求控制器
请求控制器中每一个处理请求的方法成为控制器方法
因为SpringMVC的控制器由一个POJO(普通的Java类)担任,因此需要通过@Controller注解将其标识为一个控制层组件,交给Spring的IoC容器管理,此时SpringMVC才能够识别控制器的存在
注意:如果在创建maven项目的时候,不出现java文件夹的话,需要创建一个普通的文件夹,并将它标记为sources root
变为下图的颜色,即为java类
HelloController
package com.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author:Lyn.R
* @date:2023-05-24 23:12:09
* @Description:
* @note:
**/
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "success";
}
}
5、创建springmvc的配置文件
springmvc.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">
<!--扫描组件-->
<context:component-scan base-package="com.springmcv"/>
<!--视图解析器-->
<bean id="internalResourceView" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--告诉前端控制器,所有的静态资源都不要拦截-->
<mvc:default-servlet-handler/>
<!-- <mvc:resources mapping="/js/**/" location="/js/"/>-->
<!--开启SpringMVC 框架注释支持 默认加载 映射器和适配器-->
<!-- <mvc:annotation-driven conversion-service="conversionServiceFactoryBean"/>-->
<mvc:annotation-driven/>
</beans>
6、测试HelloWorld
index.jsp
WEB-INF/pages/success.jsp(这个地方对应你的controller层return返回的地方,因为之前配置了视图解析器)
最后的详细目录
运行成功,在浏览器的下面的地址localhost:8080/SpringMVC_helloworld_war_exploded/
可以看到index.jsp成功的目录 ,点击图中的hello
注意:可能运行成功时,控制台出现中文乱码(虽然现在没什么影响,但是当出现一些错误时,没有日志的提醒还是很难受的,所以建议将它解决)
更改tomcat的conf/logging.properties
控制台不出现乱码
注意:更改之后可能需要重启才能成功
以上就是小编所实践的内容,希望能够帮助到大家,感谢各位大佬的观看!!!