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