Spring in Action 5th 004开发一个Spring Web项目
我们以一个网上订购玉米饼的案例为例,完成一个基本的Web项目。
首先,我们需要在界面上显示玉米饼的制作原料。
我们需要从数据库中读取数据并显示到界面上,往往在web项目中,这是Controller的活。
所以,我们需要以下清单里的内容:
1. 一个domain类,定义玉米饼的属性
2. 一个controller类获取数据并传递给界面渲染
3. 一个显示模板,负责在用户的浏览器上渲染出原料数据
由于本章节中主要是Spring Web的部分,不将过多的精力放在从数据库中获取数据上。
定义Domain类
此类使用了lombok库,可以自动生成getter和setter方法,@RequiredArgsConstructor为定义为final的字段设置为构造函数参数。
在代码中使用lombok?在Maven中添加Lombok依赖。
定义控制器
控制器在本章中的体现就是接受用户请求,获取数据,传递给前端模板引擎进行渲染。
控制器清单:
1. 处理Get请求
2. 创建原料清单
3. 处理请求,交给模板渲染数据
@Slf4j是lombok提供的日志插件,其效果类似于:
[code]private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(DesignTacoController.class);
@controller标记主要是为了自动绑定和包扫描做提示用的,spring boot会自动将标记Controller的类创建为Bean添加到容器中。
@RequestMapping为本控制器的基础路由定义了URL访问地址 https://host:port/project/design
@GetMapping也是一个新的注解,其含义是将当前方法映射为Get方法。
根据Restful风格的要求,还有其他的方法,分别处理对应的Action:
控制器与前端模板引擎之间的数据传递是靠Model来完成的。
定义前端渲染模板
添加Thymeleaf依赖:
Thymeleaf可以获取到前端Servlet的attribute,例如可以将message属性的值渲染到p标签里:
Thymeleaf可以遍历collection,达到循环的效果。例如使用th:each遍历wrap数组:
渲染效果
Post提交的方法
使用Design绑定从前端传来的数据:
但是与上文不同的是,本该返回模板引擎的名称,现在多了一些:return “redirect:/orders/current”
这里的作用是进行页面重定向,重定向到指定的模板页面。
既然重定向到一个指定的位置了,那么就需要有个控制器去处理这个请求:
我们设计好orderForm的模板:
th:action指定了Url,th:object指定的是绑定的模型名称。
以上红色框内的字段全部绑定到th:object指定的对象里,作为参数提交到下面的controller:
form提交的字段与Order类是一一对应的:
在这里,我们并没有对输入的数据进行验证,下面添加验证。
Validate Data
我们可以借助Java‘s Bean Validation API及JSR-303进行数据验证.
为字段添加注解就可以实现模型验证,@NotNull进行非空验证,@Size进行长度验证
@Size也可以作为集合的大小验证。
@NotBlank作为非空验证
@CreditCardNumber作为信用卡验证
@Pattern作为正则表达式验证
@Digits作为浮点数验证
添加模型验证后没有太大的变化:
在模型上添加了@Valid注解,后面添加Errors对象作为参数
为前端提示错误信息
th:if用于判断是否有错误进行显示,${#feilds.hasErrors('ccNumber')}用于查询指定字段是否出错,th:errors用于替换显示的文字
瞧,最简单的模型验证就这样完成了!
如果你的页面单纯的就是为了显示静态页面,没有其他作用,不需要传递数据,也不是Post方法,还要创建一个Controller是不是杀鸡用牛刀了呢?
我们可以这样简化操作:
通过添加配置文件,这个类需要实现WebMvcConfigurer,重写AddViewControllers方法,通过添加registry.addViewController(String route).setViewName(string viewName)添加指定的控制器来渲染页面。
默认情况下,模板只会在第一次被调用的时候解析一次,其余都是缓存起来的。 这在生产环境是很不错的提高响应的方法,但是开发环境下需要停用cache:
在配置文件中设置:
spring.thymeleaf.cache = false
你就会发现不再缓存前端页面了。当然,DevTools可以达到同样的效果。
- SPRING IN ACTION 第4版笔记-第九章Securing web applications-004-对密码加密passwordEncoder
- SPRING IN ACTION 第4版笔记-第五章BUILDING SPRING WEB APPLICATIONS-004-以query parameters的形式给action传参数(@RequestParam、defaultValue)
- 分享一个本人开发的angularjs+bootstrap+Spring+mybatis实现的java web系统项目
- SPRING IN ACTION 第4版笔记-第五章BUILDING SPRING WEB APPLICATIONS-003-示例项目用到的类及配置文件
- SPRING IN ACTION 第4版笔记-第六章RENDERING WEB VIEWS-004- <s:url>、<s:escapeBody>标签
- .net同一个解决方案下面多个web项目。目的为了较大项目分解模块,各自编译开发!
- 快速使用 maven 构建一个 spring web 项目
- SPRING IN ACTION 第4版笔记-第九章Securing web applications-010-拦截请求
- 快速使用 maven 构建一个 spring web 项目
- SPRING IN ACTION 第4版笔记-第二章-004-Bean是否单例
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载
- Spring MVC 学习笔记2 - 利用Spring Tool Suite创建一个web 项目
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-004-消除BEAN自动装配的歧义@QUALIFIER及自定义注解
- SPRING IN ACTION 第4版笔记-第六章RENDERING WEB VIEWS-006- 使用thymeleaf(TemplateResolver、SpringTemplateEngine、ThymeleafViewResolver、th:include、th:object、th:field="*{firstName}")
- SpringMVC+Spring4+Mybatis3集成,开发简单Web项目
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载 【转】
- Spring Web Flow对于提高项目开发进度和维护性没多大帮助