day42 6-5 springMVC调度器、ModelAndView、配置thymeleaf模板引擎 & 6-6 thymeleaf语法 & 6-7 springMVC拦截器 & 6-8 设置请求编码过滤器Filter
springMVC调度器 - DispatcherServlet - SpringMVC框架的入口
定义
DispatcherServlet成为调度器,配置在web.xml文件中,用于拦截匹配的请求。并解析请求url,将请求分发给对应的控制器controller
Spring MVC 的工作流程:
1)客户端请求提交到调度器DispatcherServlet;
2)由DispatcherServlet调度器解析URL,调用URL相对应的映射处理器HandlerMapping
3)DispatcherServlet将请求提交到控制器Controller;
4)Controller调用业务逻辑(service层和dao层)处理后,向DispatcherServlet返回ModelAndView;
5)DispatcherServlet根据ModelAndView获取相对应的视图解析器ViewResolve,找到ModelAndView指定的视图view;
6)ViewResolver将数据渲染到视图;
7)dispatcherServlet调度器响应视图显示到客户端;
在spring-mvc.xml内配置下列代码,可实现在controller类里直接返回文件名就可实现页面跳转
如:现有demo.html
controller可直接 return "demo";
实现页面跳转
<!-- 对静态资源文件(html/js/css/img/png)的访问,交给defaultServletHandler处理,不加这个配置转发页面报404 -->
<mvc:default-servlet-handler/>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<!--前缀 第一个斜杠表示webapp根目录-->
<property name="prefix" value="/page/"/>
<!--后缀-->
<property name="suffix" value=".html"/>
</bean>
配置thymeleaf模板引擎
1.在pom.xml的dependencies标签内配置以下代码
<!-- thymeleaf模板引擎 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.15.RELEASE</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.15.RELEASE</version>
</dependency>
2.在spring-mvc.xml配置以下代码,注意,之前配置的模板解析器可能回合视图解析器冲突删掉后只留
对静态资源文件(html/js/css/img/png)的访问:mvc:default-servlet-handler/
<!-- 模板解析器 -->
<bean id="rs" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
<constructor-arg ref="servletContext"/>
<property name="prefix" value="/page/"/><!-- 前缀 -->
<property name="suffix" value=".html"/><!-- 后缀 -->
<property name="templateMode" value="HTML5"/>
<property name="cacheable" value="false"/><!-- 是否启用缓存 -->
<property name="characterEncoding" value="UTF-8"/>
</bean>
<!-- 模板引擎 -->
<bean id="te" class="org.thymeleaf.spring5.SpringTemplateEngine">
<!-- ref属性,表示关联指定id的bean-->
<property name="templateResolver" ref="rs"/>
</bean>
<!-- thymeleaf的视图解析器 -->
<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="characterEncoding" value="UTF-8"/>
<property name="templateEngine" ref="te"/>
</bean>
3.在html文件内的html标签内加入代码
<!--在html页面中引入thymeleaf命名空间,即此时在html模板文件中动态的属性使用th:命名空间修饰 。-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
4.使用:直接在标签内加命名空间修饰
<p th:text="${name}"></p>
<input type="text" th:value="${age}">
thymeleaf命名空间的使用
<!-- 4 遍历集合
th:each="str,iterStat:${list}" strStat
iterStat称为状态变量,如果不声明状态变量,th会默认生成一个名为“变量名Stat”的状态变量,如:strStat
属性有:
index: 当前迭代对象的index(从0开始)
count: 当前迭代对象的index(从1开始)
size:遍历的对象的大小(元素个数)
current:当前迭代变量
even/odd:布尔值,当前循环是否是偶数/奇数(从零开始)
first:布尔值,当前循环是否是第一个
last:布尔值,当前循环是否是最后一个
-->
<ul th:each="str:${list}">
<li th:text="${strStat.count}+${str}"></li>
</ul>
<!--
6 比较运算
大 于 > gt
小 于 < lt
大于等于 >= ge
小于等于 <= le
等 于 == eq
不 等 于 != ne
-->
<span th:if="${no lt 11}">aaa</span>
<span th:if="${no gt 11}">bbb</span>
<span th:if="${no eq 11}">ccc</span>
<!-- 8 逻辑运算
&& and
|| or
! not
-->
<span th:if="${bool} and false">111</span>
<span th:if="${bool} or false">222</span>
<span th:if="not ${bool}">333</span>
ModelAndView
ModelAndView类作用:
1)存储向视图页面发送的参数,类似HttpServletRequest对象的setAttribute()方法
2)指定要请求的客户端页面名称,类似HttpServletRequest对象的请求转发
@RequestMapping("/toPage")
public ModelAndView toPage(){
ModelAndView mv = new ModelAndView();
//其他方法在下面列出
//设置视图页面名字
mv.setViewName("demo");
return mv;
}
和加了视图解析器后的 效果一样
@RequestMapping("/toPage1")
public String toPage1(){
return "demo";
}
//添加参数等价于req.setAttribute()
mv.addObject("name","张三");
mv.addObject("age",12);
使用此方法在前端页面展示的话
需要在pom.xml中加入thymeleaf模板引擎
其次在spring-mv.xml中加入模板解析器在SpringMVC配置文件示例有列出
<!-- thymeleaf模板引擎 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.15.RELEASE</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.15.RELEASE</version>
</dependency>
最后在前端页面的加入
<!-- 在html页面中引入thymeLeaf命名空间,即此时在htmlL模板文件中动态的属性使用th:命名空间修饰。-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
配置拦截器
1.spring-mvc.xml配置如下
<!-- 配置拦截器 -->
<mvc:interceptors>
<!-- 配置一个全局拦截器,拦截所有请求 -->
<!-- <bean class="interceptor.UserInterceptor" /> -->
<mvc:interceptor>
<!-- 配置拦截器作用的路径 -->
<!-- /* 只能拦截一层的请求 /**可以拦截多层的请求-->
<mvc:mapping path="/my/*" />
<!-- 定义拦截器类的包路径 -->
<bean class="com.st.interceptor.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
2.路径:src=》main=》java=》com.situ=》interceptor=》MyInterceptor
package com.st.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
/*
preHandler()在请求进入controller之前执行,返回值是布尔类型
true-放行请求
false-拦截请求,请求不会进入后续的拦截器interceptor和控制器controller
*/
System.out.println("preHandle-----before controller");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
/*
postHandle()请求controller执行结束之后,dispatcherServlet加载视图之前执行
用于对controller返回的ModelAndView对象进行后处理
*/
System.out.println("postHandle-----after controller");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
/*
在DispatcherServlet渲染完成对应的视图之后执行
这个方法的主要作用是用于进行资源清理工作
*/
System.out.println("afterCompletion-----");
}
}
3.配置servlet相关包
<!--j2ee相关包servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
</dependency>
拦截器工作流程
解决post请求中文乱码的问题
在web.xml里面配置如下代码,一般配置在servlet之前
<!--解决POST请求 中文乱码-->
<filter>
<filter-name>characterEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
spring-mvc.xml配置相关
day42 6-5 springMVC调度器、ModelAndView、配置thymeleaf模板引擎 & 6-6 thymeleaf语法 & 6-7 springMVC拦截器 & 6-8 设置请求编码过滤器Filter的更多相关文章
- springboot配置server相关配置&整合模板引擎Freemarker、thymeleaf&thymeleaf基本用法&thymeleaf 获取项目路径 contextPath 与取session中信息
1.Springboot配置server相关配置(包括默认tomcat的相关配置) 下面的配置也都是模板,需要的时候在application.properties配置即可 ############## ...
- 三、thymeleaf模板引擎构建前台html, 后台使用 ModelAndView 和 Model 模型
项目源码:https://github.com/y369q369/springBoot.git -> thymeleaf 私聊QQ: 1486866853 1.pom.xml中 ...
- UndertowServer+SpringMVC+Thymeleaf模板引擎构建轻量级的web项目
这两周需要写一个页面来请求另一个服务中的接口,服务器采用了超轻量级的undertow,模板引擎采用的是Thymeleaf,在寻找页面资源位置这个地方难住了我.下面分享一下,这方面的代码. Spring ...
- SpringBoot静态资源访问+拦截器+Thymeleaf模板引擎实现简单登陆
在此记录一下这十几天的学习情况,卡在模板引擎这里已经是四天了. 对Springboot的配置有一个比较深刻的认识,在此和大家分享一下初学者入门Spring Boot的注意事项,如果是初学SpringB ...
- laravel 配置双模板引擎
有时候我们可能有这种需求,pc 和 mobile 端显示的页面不一样,这个时候,我们就需要判断设备类型: ****我们用 composer require whichbrowser/parser ...
- 初学springMVC的拦截器
springMvc拦截器的执行顺序! 拦截器的各个方法的作用: /** * 登录验证拦截器 */ public class Intercepter implements HandlerInt ...
- struts2-权限拦截器、日志拦截器、execAndWait(进度条)拦截器配置
1.权限拦截器 package login; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.Serv ...
- Java开发学习(二十八)----拦截器(Interceptor)详细解析
一.拦截器概念 讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源 (3)如 ...
- Spring Boot实战:拦截器与过滤器
一.拦截器与过滤器 在讲Spring boot之前,我们先了解一下过滤器和拦截器.这两者在功能方面很类似,但是在具体技术实现方面,差距还是比较大的.在分析两者的区别之前,我们先理解一下AOP的概念,A ...
- Spring Boot之拦截器与过滤器(完整版)
作者:liuxiaopeng 链接:http://www.cnblogs.com/paddix 作者:蓝精灵lx原文:https://blog.csdn.net/liuxiao723846/artic ...
随机推荐
- 【译】CLR类型加载器设计
前言 本文翻译自BotR中的一篇,原文链接 Type Loader Design ,可以帮助我们了解CLR的类型加载机制(注意是Type类型,而不是Class类),文中涉及到术语或者容易混淆的地方,我 ...
- 4.第三篇 PKI基础概念、cfssl工具介绍及kubernetes中证书
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483787&idx=1&sn=08dd3404 ...
- Docker 部署 JIRA(破解版)
一. 说明 1.1 素材 本文采用素材如下: Docker镜像 Github链接(https://github.com/cptactionhank) 破解工具 Gitee链接(https://gite ...
- 7_Log
一. 引言 1.1 日志介绍 用于记录系统中发生的各种事件. 记录的位置常见的有: 控制台, 磁盘文件等 1.2 日志级别 日志级别由低到高 TRACE, DEBUG, INFO, WARN, ERR ...
- 打造企业自己代码规范IDEA插件(中)
一些基本概念 在开始独立研发公司自己的代码规范检查规则之前,先介绍一些相关的基本概念.阿里巴巴代码规范很多规则其实都是基于开源框架PMD进行的研发.PMD用官方的话语介绍来说:PMD是一个源代码分析器 ...
- activeMq不能被主机访问的问题
环境说明 主机:mac 虚拟机:VirtualBox 虚拟系统:Centos6.5 问题:虚拟机启动了 activemq. 也关闭了防火墙,但是在主机访问web界面,http://192.168.1. ...
- JVM中的堆
堆 内存结构 堆的核心概念 <java虚拟机规范>中对java堆的描述是:所有的对象实例以及数组都应当在运行时分配在堆上. 一个JVM实例只存在一个堆内存(就是new 出来一个对象),ja ...
- 算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
一.名称 动态规划法应用 二.目的 1.贪婪技术的基本思想: 2.学会运用贪婪技术解决实际设计应用中碰到的问题. 三.要求 1.实现基于贪婪技术思想的Prim算法: 2.实现基于贪婪技术思想的Dijk ...
- python 矩阵切片
假设n是一个numpy或者torch.tensor张量,那么 n[a:b,c:d]则代表从a到b行(不含b行),c到d列(不含d列)的切片 当然,ab.cd中的数是可以省略掉,只要abcd中有一个数即 ...
- Java多线程(6):锁与AQS(下)
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 之前说过,AQS(抽象队列同步器)是Java锁机制的底层实现.既然它这么优秀,是骡子是马,就拉出来溜溜吧. 首先用重入锁来实现简单的累加,就像这 ...