标签:控制器 请求 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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。