其他分享
首页 > 其他分享> > SpringMVC学习笔记(一)

SpringMVC学习笔记(一)

作者:互联网

SpringMVC

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视图,渲染数据后最终响应给浏览器  

SpringMVC

SpringMVC是Spring的一个后续产品,是Spring的一个子项目 SpringMVC 是 Spring 为表述层开发提供的一整套完备的解决方案。在表述层框架历经 Strust、WebWork、Strust2 等诸多产品的历代更迭之后,目前业界普遍选择了 SpringMVC 作为 Java EE 项目表述层开发的首选方案。 注:三层架构分为表述层(或表示层)、业务逻辑层、数据访问层,表述层表示前台页面和后台servlet   Spring 家族原生产品,与 IOC 容器等基础设施无缝对接 基于原生的Servlet,通过了功能强大的前端控制器DispatcherServlet,对请求和响应进行统一处理 表述层各细分领域需要解决的问题全方位覆盖,提供全面解决方案 代码清新简洁,大幅度提升开发效率 内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可 性能卓著,尤其适合现代大型、超大型互联网项目要求    

入门案例

在pom.xml文件中,打包方式设置为war时,idea会自动识别成web项目,添加Web包

<packaging>war</packaging>

依赖

    <dependencies> <!-- 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> <!-- Spring5和Thymeleaf整合包 -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
            <version>3.0.12.RELEASE</version>
        </dependency>
    </dependencies>

 

 

配置DispatcherServlet

<!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet- class>
    </servlet>
    <servlet-mapping>
        <servlet-name>springMVC
        </servlet-name> <!--设置springMVC的核心控制器所能处理的请求的请求路径 /所匹配的请求可以是/login或.html或.js或.css方式的请求路径 但是/不能匹配.jsp请求路径的请求 -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
<url-pattern>/</url-pattern>不包含jsp请求
<url-pattern>/*</url-pattern>包含所有请求

DispacherServlet不能处理jsp请求,所以url-pattern的配置不能是/*,要把jsp类型的请求交给tomcat里面的JSPServlet处理

 

 

控制器Controller

在SpringMVC中,将一个POJO加上注释@Controller,就可以作为控制器了

配置其中函数

在里面的方法上加上@RequestMapping("/路径")

这个注解里面的路径会自动在前面加上上下文

 

 

配置SpringMVC的配置文件

默认的位置和名称是固定的!

位置:WEB-INF

名称:<servlet-name>-servlet.xml

扫描控制层组件

<!-- 自动扫描包 --> <context:component-scan base-package="com.atguigu.mvc.controller"/>

视图解析器

<!-- 配置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>

 

 配置tomcat

其中部署时要选择war_exploded

war模式是按包进行上传

war_exploded按当前文件夹格式上传

   

 总结

当配置了前端控制器DispatcherServlet后,所有符合配置的请求(配置为"/"时就是除了jsp的所有请求),都会被拿到DispatcherServlet里面先解析一下

前端控制器会读取SpringMVC的配置文件扫描组件,找到控制器

然后按请求地址与注解中的值进行匹配,找到对应的控制器方法,视为处理该请求的方法,进行处理

处理请求的方法需要返回string类型,并且控制器返回的STRING也会被当成视图名称,被视图解析器解析,加上前后缀组成完整的路径

然后通过Thymeleaf对视图进行渲染,最终转发到对应页面

 

在html文件中使用thymeleaf要加上xmlns:th="http://www.thymeleaf.org",然后th:ref="${路径}"

 

thymeleaf携带参数的两种方式,"${/hello?username=admin}" "${/hello(username=‘admin’)}"

 

thymeleaf干的事,给路径添加项目上下文与前后缀,然后统一寻找?

 

扩展

改变springMVC配置文件的路径与名称

在servlet标签中添加:

<init-param>

  <param-name>contextConfigLocation</param-name>

  <param-value>classpath:路径/文件名</param-value>

</init-param>

 

 @RequestMapping注解

功能

将请求和处理请求的控制器方法关联起来,建立映射关系

对应的位置

@RequestMapping注解可以标在类和方法上,相当于组合匹配

当类上有注解时,要在方法的路径前加上类所标记的路径,相当于所有的类中的方法的注解路径都是类注解路径中的子路径

  路径可以设置多个,都可以进行处理  

注解中的其他属性

当配置多个参数时,需要都匹配上才会匹配成功

method属性

设置请求方法,也是数组,类型为枚举  

  在此基础上可以用@方法Mapping派生注解来替代以上的注解,在注解名称上体现方法,value标注路径  

params属性

四种形式

"param"必须有这个参数

"!param"必须没有这个参数

"param=value"必须有且等于

"param!=value"可以没有,但是如果有必须不等于

   

headers属性

也是四种形式,和params类似

 

注:请求头响应头的键是不区分大小写的

 

SpringMVC支持ant风格的路径

可以用特定字符来替代路径 ?表示任意单个字符 *表示任意个任意字符 /**/表示任意层数的任意目录 被替代的字符不能是?或/   

SpringMVC支持路径中的占位符

RESTful风格的路径会使用把数据放到路径里面的方式传递参数

原始方式:/deleteUser?id=1 rest方式:/user/delete/1   SpringMVC路径中的占位符常用于RESTful风格中,请求路径中将某些数据通过路径的方式传输到服务器中 然后就可以在相应的@RequestMapping注解的value属性中通过占位符{xxx}表示传输的数据 再通过@PathVariable注解,将占位符所表示的数据赋值给控制器方法的形参      <a th:href="@{/testRest/1/admin}"/>  
@RequestMapping("/testRest/{id}/{username}")
public String testRest(@PathVariable("id") String id, @PathVariable("username")String username){
  System.out.println("id:"+id+",username:"+username);
  return "success";
}
//最终输出的内容为-->id:1,username:admin

 

 

 

 

 

 

 

 

       

标签:控制器,请求,SpringMVC,路径,笔记,学习,视图,注解
来源: https://www.cnblogs.com/darkpar/p/16673084.html