IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringMVCSSM(黑马学习) -> 正文阅读

[Java知识库]SpringMVCSSM(黑马学习)

之前web学习的Servlet之间有共有行为,和私有行为。

我们要抽取共有行为。只写很小一部分的私有行为。

1.导入SpringMVC的包

2.配置Servlet

3.编写Controller

4.将Controller使用注解配置到Spring容器中。

5.配置spirng-mvc.xml文件,配置组件扫描(扫描注解。)

1.SpirngMVC快速入门

1.导入坐标,保证版本一致。

spring-context,spring-web,spring-webmvc这些版本都要一致

  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.0.5.RELEASE</version>
    </dependency>

?2.web.xml里配置前端核心控制器

DispatcherServlet

这里,每次请求都走这个共有servlet进行共有操作。

<!--配置SpringMVC的前端控制器-->
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>



    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

? ?3.整一个Controller页面。、

加了@RequestMapping注解,可以在项目路径后输入quick,访问到整个方法。

4.整一个spring-mvc.xml

加上context空间。

在web.xml,里告诉spring-mvc.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.alibaba.com/schema/stat"
       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.xsd http://www.alibaba.com/schema/stat http://www.alibaba.com/schema/stat.xsd">

    <!--Controller的组件扫描-->
    <context:component-scan base-package="com.itheima">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--配置内部资源视图解析器-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--  /jsp/success.jsp  -->
        <property name="prefix" value="/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>



</beans>

访问路径,图3煳了的是DispatcherServlet。

2.SpringMVC的组件解析(底层实现)。

?

2.1 springMVC注解解析。

2.1.1 requestMapping使用

method属性后设成post,那么请求quick,就必须得post。

?

?如果类外面又加一层@RequestMapping,那么地址前得加? ?/user

这样知道是user模块的controller里的方法。

启动之后,就会访问user下的success.jsp,文件。但user下面没有

所以改成。这样就去webapp下找这个文件。

?

param属性。

?url后面必须加参数。

?2.1.2 springMVC的组件扫描

springMVC只扫描controller层。各扫各的。

只扫com.itheima,下的controller注解。

expresssion,是@controller注解的全包名。

 <!--Controller的组件扫描-->
    <context:component-scan base-package="com.itheima">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

也可以这么写

?2.2?mvc命名空间解析

?2.3 SpringMVC XML配置解析

视图解析器有自带的。

?forward转发,默认的,可以去掉。跳转页面,浏览器里地址可以不变。

这里如果想重定向,加redirect。

?

如果把jsp文件都放在一个jsp文件下。那么,每次我们还要加个? ?/jsp

?

?我们可以自己配置内部资源解析器。在spring-mvc.xml中

<!--配置内部资源视图解析器-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--  /jsp/success.jsp  -->
        <property name="prefix" value="/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

这样我们可以不用写前缀和后缀。

?写成这样即可。

3.数据响应

?3.1 页面跳转

相较于web,不用getDisparcher。

3.1.1返回字符串形式

?重定向,不能有web-inf,因为这个文件夹受到保护。

3.1.2 返回ModelAndView对象。

这里访问quick2,就可以访问success页面。

setViewName,也延续了前后缀的设置。

设置了键值对,可以在jsp界面直接获取。

方法1:

?

方法2:

这种方式也可以,SpringMvc在解析这个方法的时候发现这个参数,需要框架提供,

SpringMvc就提供一个ModelAndView对象,注入了。

方法3:

model和view拆开了。springmvc,传入一个model对象。

方法4:

3.2 回写数据(有json的回写)

3.2.1直接返回字符串

?方法1(有点笨了解一下就行):

方法2(重点掌握):

加@ResponseBody,不然return会被当成视图跳转。

?

?

方法3:返回Json字符串。

先导入3个包

 <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>

    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.0</version>

    </dependency>

给对象写转成json格式字符串返回。

?

转换的工具有没有被springMVC封装呢?

有,需要我们配置一下,告诉它。

3.2.2 返回对象或集合

期望SpringMVC给转成json格式字符串。?

我们返回的这个对象发给这个适配器。但它没有转换的功能。

我们配置这个的时候,对它内部的,这个方法参数进行覆盖,告诉它用json转换。内部要的list集合数据,里面装的是bean对象。我们给它注入参数。

然后在spring-mvc.xml里配置。

   <!--配置处理器映射器-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
             <property name="messageConverters">
                 <list>
                    <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>

                 </list>
             </property>
        
    </bean>

然后我们的user就被解析成了json。

3.2.3??返回对象或集合(升级版)

3.2.2中的配置比较繁琐,用这个。

?

这里需要mvc的命名空间。

xmlns:mvc="http://www.springframework.org/schema/mvc"
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd

3.3 获取客户端请求数据

3.3.1获得基本类型参数

controller中方法的参数名称和请求参数的name一致,参数值会自动映射匹配。

3.3.2 获得pojo类型参数

spirngMVC自动把user的属性值,封到对象里。

方法参数写对象就行。?

3.3.3 获得数组类型参数

3.3.4 静态资源的访问

我们在前面用了这个js文件,在项目里。有这个文件,我们启动的时候却报错。

?

抓个包看看,一共3个请求。

?原因:前端控制器的配置。缺省。

经过DispacherServlet,帮助我们匹配。

把js文件,当成@RequestMapping的value进行匹配。所以就匹配不上。

解决办法:

方法1:

方法2:?

3.3.5?获得集合类型参数

对前端传来的json对象。

在前台用userList收集user对象,挨个push

然后把userList转换成json发给url。即我们要调用的方法。

?

?这里用${page.Context.request.contextPath}是JSP取得绝对路径的方法.

比如我的项目名称是demo1在浏览器中输入为http://localhost:8080/demo1/a.jsp ${pageContext.request.contextPath}或<%=request.getContextPath()%>取出来的就是/demo1。

3.3.6 请求数据乱码问题

问题:

?

?解决:

在web.xml里 。配置上,编码过滤器。

3.3.7 参数绑定的注解

比如说前台传的参数key为name,后台的业务方法的参数为username。

required为true的时候,如果没提交过来name对应的参数,那就会404 bad request。

required为false的时候,如果没提交过来name对应的参数,会赋一个null,但不会报错。

defaultValue值设为 itcast字符串时,如果没提交过来name对应的参数,默认用itcast字符串赋值。

3.3.8 获得Restful风格的参数

用一个占位符{name},解析出url里的值。然后用@PathVariable注解解析这个路径,把值传给value。

{name}括号里的name,与value的值必须对应。

?

3.3.9 自定义类型转换器。

spring默认的参数类型转换器。

客户端那边传来的字符串数据"13"?,可以转成int型,13,进行参数设置。(MVC框架自动转化)

传过来的键值对,都是字符串,这里进行了参数转换。

但有的数据,不能自动转换类型,这个时候就需要,自定义转换器。

用2018-12-21,这种格式就错。?

?自定义转换器的开发步骤:

步骤1:

详解:这里指定了日期的格式。

?步骤2:

FactoryBean而言,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似?

注入转换器。

?

步骤3:

?然后就解析出来日期了。

3.4 获取Servlet相关API(获取请求数据)

比如我们方法中想要这三个参数,MVC框架会帮我们?

可以看包名,可以发现这三个对象是tomcat,帮助原生产生的。

?

3.5 获取HTTP协议数据(获取请求参数)

3.5.1? 获得请求头

required为true的时候,如果没有携带请求头,那就会404 bad request。

required为false的时候,如果没有携带请求头,会赋一个null,但不会报错。

?

3.5.2 获得cookie

?

3.6 文件上传(获取请求参数)

点提交就提交过去了。

?

?怎么接受呢?

3.6.1 文件上传原理

这些正文内容都在HTTP,请求体内。

request的getXXX方法时,获得的是url编码方式的表单提交。正文里是键值对,下图红色字体。

?

现在用的是多部份表单形式,所以这些API都失效。数据对应。

?

3.6.2 单文件上传步骤

导入这俩依赖,用来解析正文数据。

在Spring-mvc配置文件里,上传解析器。

文件名和方法里对上,Spring会把这个文件封装成对象。?

?

?

?

?

?

然后接收,保存。在c盘,一般保存在服务器或别的网站。

保存成功。?

?

3.3.6 多文件上传

?

?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-06 13:41:29  更:2022-02-06 13:43:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:55:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码