SpringMVC
MVC
M:Model,模型层,指工程中的JavaBean,作用是处理数据
V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据
C:Controller,控制层,指工程中的servlet,作用是接收请求和响应浏览器
SpringMVC
入门案例
在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
扫描控制层组件
视图解析器
<!-- 配置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:href="@{路径}"
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属性
设置请求方法,也是数组,类型为枚举
params属性
四种形式
"param"必须有这个参数
"!param"必须没有这个参数
"param=value"必须有且等于
"param!=value"可以没有,但是如果有必须不等于
headers属性
也是四种形式,和params类似
注:请求头响应头的键是不区分大小写的
SpringMVC支持ant风格的路径
SpringMVC支持路径中的占位符
RESTful风格的路径会使用把数据放到路径里面的方式传递参数
@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
浙公网安备 33010602011771号