栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMVC学习的第1天(2021-11-16)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMVC学习的第1天(2021-11-16)

SpringMVC学习的第1天(2021-11-16)

SpringMVC是Spring为表述层开发提供一套解决方案。

表述层:前台页面和后台的Servlet
业务逻辑层:
数据访问层:
SpringMVC:前台发送请求,后台Servlet处理请求,响应请求

写一个SpringMVC的HelloWorld程序: 1、创建maven工程:

首先有个project:SpringMVC
这个是一个普通的java项目

在这个项目里面新建一个module



2、在module里面的pom文件中,添加它的打包方式为war

3、pom中添加依赖:

依赖1:


    org.springframework
    spring-webmvc
    5.3.1


对应的所有依赖:

依赖2:
日志的依赖:


    ch.qos.logback
    logback-classic
    1.2.3
    test


依赖三:
servletAPI


    javax.servlet
    javax.servlet-api
    3.1.0
    provided


Tomcat服务器里面自带servletAPI和jsp的api
所以,这里的范围是provided
provided:当你这个项目打包的时候,这个依赖不会被打包进去。因为服务器Tomcat本身自带了。
其他的没有写provided的jar包打成war包之后就会进入WEB-INF里面的lib目录下。

依赖4:
spring5和Thymeleaf整合包


    org.thymeleaf
    thymeleaf-spring5
    3.0.12.RELEASE


Thymeleaf是用来开发Web和独立环境项目的服务器端的Java模版引擎

Thymeleaf是一个java类库,他是一个xml/xhtml/html5的模板引擎,可以作为mvc的web应用的view层。

maven工程创建完毕。 2、在当前的 maven工程里面添加web模块

1、
在src下面创建dir webapp

2、创建核心配置文件web.xml

path那里的路径一定不能使用默认的,我们需要手动加上srcmainwebappWEB-INFweb.xml
最后是这样的:

D:ideaCodeSpringMVCspringMVC-demo1srcmainwebappWEB-INFweb.xml


之后,他就会为我们创建好web-inf目录和web.xml文件

web工程已经搭建好了 3、配置web.xml

之前原生的javaweb,是在web.xml配置servlet和监听器过滤器的。

现在使用springMVC
需要注册前端控制器DispatcherServlet
这个注册就是因为,用户点击某个连接不能直接去访问类。
只有通过注册,路径和Servlet全类名映射好,才可以访问。

配置SpringMVC的前端控制器,对浏览器发送的请求进行统一处理

一共有两种配置方式:

1、默认配置(配置文件的命名的位置默认,不能乱写和乱放)


注意:这里配置url的时候,使用的是/

因为我们这个前端控制器的DispatcherServlet是对前端的请求进行统一处理。
之前学习javaweb要么写的是/某个具体的请求路径
或者或者拦截器写上/*
这里的/只能匹配:
/login .html .css .js

但是不能是.jsp的请求。 为什么不给匹配.jsp ?

因为jsp本质就是servlet
它是需要服务器当中指定的servlet来进行处理的。
所以.jsp发送的请求路径不需要服务器的前端控制器DispatcherServlet来处理。
之前学习的/* 它也是所有请求,包括.jsp

使用这种默认的配置文件的形式,配置文件的名称一定是固定的。



2、扩展配置(以后常用,最优的!!!)



这个标签是伴随servlet的初始化而初始化的。
类路径下:
classpath:
就是src下面。

注意:这个src是一个蓝色的框。


类路径指的就是:
java或者resources下面的目录

在resources目录下面创建:springMVC.xml配置文件
如何创建这个:springMVC.xml呢?

之前学习servlet的生命周期是在第一次访问的时候进行初始化:
但是,前端控制器DispatcherServlet的初始化不能全部放在第一次请求的时候,否则,第一次请求的时候,压力很大。
所以要提前初始化。

总结:
在web.xml配置文件里面,需要写好SpringMVC的配置文件的名字和位置,以及MVC里面前端控制器DispatcherServlet的初始化时机。
默认是在第一次请求的时候,创建前端控制器DispatcherServlet
我们手动修改初始化时间为服务器启动的时候。
设置为1

1
问:为什么需要在web.xml里面配置以下内容?


答:因为我们准备将浏览器的请求统一交给前端控制器来处理。
而前端控制器是一个Servlet,它想处理请求,响应请求,就需要在web.xml里面进行注册。
注册的时候,需要借助init-param来设置SpringMVC配置文件的命名和位置,通过load-on-startup将前端控制器的初始化时间提前到服务器启动的时候(默认第一次请求,但是不好,第一次请求会非常慢)。
注册的时候,写url,写的是/,因为前端控制器需要处理所有的请求(除了.jsp)

创建请求控制器:

前端控制器对浏览器发送的所有请求进行了统一的处理。
但不同的请求还是需要不同的处理方式。
所以,还是需要创建具体请求的处理类,即请求控制器
POJO(Plain朴素的 Ordinary 普通的 Java Object)简单的Java对象

新建包:
com.rtl.mvc.controller:

使用注解+扫描的形式把HelloController加到Spring容器中。

2、在SpringMVC.xml里面配置扫描组件。


2、这样的话,HelloController就已经进入到Spring容器里面了。 其次:还要再SpringMVC.xml里面配置视图解析器。

配置他,来解析视图。

 
        
        
        
            
                
                    
                        
                        
                        
                        
                    
                
            
        
    

因为我们使用的视图是Thymeleaf,所以要配置Thymeleaf解析器(ThymeleafViewResolver)。
1、配置视图解析器的优先级:

视图解析器有多个。

2、配置解析视图的策略:

把当前的视图名称加上前缀和后缀
最终可以跳转到指定的页面
每当实现页面跳转的时候,如果视图名称是符合条件的话,就会,对这个视图进行解析,找到对应的页面实现跳转。

准备写一个请求,来访问主页面。

准备主页面:

WEB-INF右键,创建/templates/index.html文件

注意:WEB-INF里面的内容 ,浏览器是不能直接访问的。
重定向也不能访问。
只能通过转发。

符合条件的index.html:

下面做一个简单的练习:


这个需要记住或者加到html的模板里面。
如何设置HTML的模板呢?

xmlns:th="http://www.thymeleaf.org"
准备index.html

测试功能1: 实现对首页的访问:

现在我们的index.html是不能通过浏览器的请求访问得到的。
因为它的位置:

写一个使用SpringMVC的请求,访问上下文路径的时候, 访问index.html

1、请求路径是: /
2、对应想访问的资源是:
/WEB-INF/templates/index.html

HelloController控制器里面才是真正处理请求的方法。
前端控制器DispatcherServlet只是统一接收来自前端的请求。

编写HelloController控制器去获取index.html资源


编写这个类:

里面定义方法:
返回值是:视图名称。
视图名称决定了我们最终要跳转的页面
/WEB-INF/templates/index.html
根据视图名称解析器,
把前缀去掉,把后缀去掉,得到的就是返回值。

使用注解
@RequestMapping
这个注解:
就是将当前的请求和控制器方法进行映射。

当注解@RequestMapping里面的value属性=/ 上下文路径
的时候,它就会执行注解所标志的方法。

这个方法返回的是视图名称index
然后得到的index,经过视图解析器进行解析,
加上前缀和后缀
变成:/WEB-INF/templates/index.html
就会跳转到我们最终的页面。

@RequestMapping 这个注解非常重要。


如果这个注解,只为value属性赋值,那么,value可以不写。

package com.rtl.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class  HelloController {

    @RequestMapping(value = "/")
    public String index(){
        return "index";
    }
}

配置Tomcat服务器:






因为这里写的是:/springMVC

所以当Tomcat服务器启动的时候
再浏览器输入:
http://localhost:8080/springMVC/
就会进入首页。

就已经访问到了这个资源:

SpringMVC的一个组件:

RequestMappingHandlerMapping

练习2:访问指定页面(刚才访问首页)

从浏览器发送一个超链接请求。

这个路径就是上下文路径。
写超链接地址的时候,要么写/项目名(/上下文路径),
要么就写相对路径,直接写target

但是我们发现上下文路径在这个地方是可以进行修改的:

所以:
我们在写超链接的路径的时候,这个不能写死

访问目标页面target.html

“/springMVC/target”
这样写是直接写死了。
使用Thymeleaf框架来动态获取上下文路径/springMVC。
前提:
使用Thymeleaf框架必须要有命名空间

xmlns:th="http://www.thymeleaf.org"

对比:
之前写死的写法:

访问目标页面target.html

现在动态获取:

访问目标页面target.html

准备target.html

在HelloController里面处理请求。 点击index.html的超链接,跳转到target.html



@RequestMapping的value的请求地址写的和超链接那里一样。
全是/target

启动Tomcat:

浏览器访问:
http://localhost:8080/springMVC/

鼠标停留在超链接上面:

点击超链接就会跳转到target.html

总结:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/530462.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号