Java 22-SpringMVC知识
1.服务器端三层架构
一般来说,服务器端按照三层进行开发,分别是表现层,业务层和持久层。对于过去mybatis是对应数据库,spring对应是业务层进行调用实现业务逻辑,表现层mvc是对应web层的表现层进行接收浏览器请求参数和响应结果的封装。浏览器一定会发布一个http请求,这个请求一定经过springmvc表现层。表现层获取请求参数交给spring业务层,之后去持久层mybatis,之后返回层层封装数据返回给客户端web;称之为一次交互。
1.1.MVC设计模型
MVC设计模型的意思或者说本质就是体现或者代表了表现层的设计内含,模型(model--java bean封装模型)→视图(view--jsp html技术)→控制器(controller--servlet 可以接受请求);其实是 c→m→v ,我们springmvc也是基于mvc设计模型进行设计运行的,所以需要了解mvc模型
1.1.1 springmvc简单介绍
实现mvc设计模型意思是只要是基于mvc模型就能获取http数据进行封装,也能封装转给jsp,进而展示。
springmvc通过注解,让简单的java类成为处理请求的控制器,而无需实现任何借口,通俗的说就是前期servlet编写时候,需要继承实现httpServlet接口(规范),而springmvc就可以让一个普通的类就可以处理http请求。
1.1.2 springmvc标准流程位置
流程是自左向右再向左
1.1.3.springmvc的优势
清晰:角色划分其实就是模块化的组件化的各类器的合作。比方说前端来一个http请求,到前端控制器,再到请求到处理器映射等等。每个器都进行不同的事。例如每个请求最后到哪里处理是视图解析器进行处理。
离不开servetApi意思是底层一定有request和response对象。springmvc核心控制器是servlet,而struts2核心控制器是一个过滤器。入口的差异也是如此。springmvc是单例的,struts2是多例的,也就造成struts2基于类创建对象,执行方法。而springmvc直接执行方法。自然快些。
--------------------------------------------------------------------------------
1.2 springmvc的入门案例分析与需求整理
第一步:我们创建完毕后,可以看到main并不完整,我们需要自己创建main下面的java和resources文件夹,并右键mark directory as如下:分别类目录和资源目录
第二步:引入依赖
web.xml要求
pom要求
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <spring.version>5.0.2.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency>
在resources文件夹下创建springmvc的配置文件,右键新建 xml configuration file;选择spring配置,命名为springmvc.xml即可,至此环境配置完毕.
2. 入门案例
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2021/3/15 0015 Time: 11:35 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h2>入门程序</h2> <a href="hello">入门程序</a> <a href="requestMappingTest">入门程序</a> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h3>入门程序</h3> </body> </html>
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * 控制器的类,springmvc中一般叫法,接受请求 */ @Controller("helloController") public class HelloController { /** * 我们要想跳转给它就执行sayhello方法,需要把helloController变成一个对象, * 此时可以用spring IOC容器管理,需要用ioc配置文件,进行注解扫描,需要context的空间 * @return */ @RequestMapping(path = "/hello") public String sayHello(){ System.out.println("hello springmvc的seyHello方法执行了"); return "success"; } @RequestMapping(path = "/requestMappingTest") public String requestMappingTest(){ System.out.println("requestMappingTest方法执行了"); return "success"; } }
<!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> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置Servlet的初始化参数,读取springmvc的配置文件,创建spring容器 --> <init-param> <!-- 3. 编写springmvc.xml的配置文件--> <!-- 4. 编写index.jsp和HelloController控制器类--> <!-- 1. index.jsp--> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <!-- 配置servlet启动时加载对象 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
<?xml version="1.0" encoding="UTF-8"?> <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 http://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 http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 开启注解扫描,加上包cn.itcast,这样helloController就可以由ioc扫描到,接着去类加注解 @controller--> <context:component-scan base-package="cn.itcast"></context:component-scan> <!--视图解析器对象 对象名字比较固定 InternalResourceViewResolver--> <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 开启springmvc框架注解支持--> <mvc:annotation-driven></mvc:annotation-driven> </beans>
2.1 入门案例分析
其中返回的success字符串,springmvc默认将它视为jsp文件名,因此我们要单独创建success.jsp文件,一般在web-inf下面pages里面创建。
2.2. RequestMapping注解分析
源码: @Target({ElementType.METHOD, ElementType.TYPE})--源注解 方法或类上 @Retention(RetentionPolicy.RUNTIME)--运行期期间 @Documented @Mapping public @interface RequestMapping { }
- 作用:用于建立请求 URL 和处理请求方法之间的对应关系
- 出现位置:
1.)类上:
请求 URL 的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使我们的 URL 可以按照模块化管理:
例如:账户模块: /account/add /account/update /account/delete ...
订单模块: /order/add /order/update /order/delete
红色的部分就是把 RequsetMappding 写在类上,使我们的 URL 更加精细。
2.)方法上:请求 URL 的第二级访问目录。
3)属性:
value:用于指定请求的 URL。它和 path 属性的作用是一样的。
method:用于指定请求的方式。
params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 key 和 value 必须和配置的一模一样。
例如: params = {"accountName"},表示请求参数必须有 accountName
params = {"moeny!100"},表示请求参数中 money 不能是 100。
headers:用于指定限制请求消息头的条件。注意:以上四个属性只要出现 2 个或以上时,他们的关系是与的关系。