构建Spring web 应用程序 (三)

处理表单

一、首先写一个表单

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>Register</h1>

<form method="post">
First Name: <input type="text" name="firstName"/><br/>
last Name: <input type="text" name="lastName"/><br/>
UserName: <input type="text" name="userName"/>
Password: <input type="text" name="password"/>
<input type="submit" value="register"/>
</form>
</body>
</html>

注意这里的 form 标签并没有设置 action 属性,这种情况下当表单提交时他会提交到与展现时相同的url路径上,即它会提交到 /spitter/register 上。 所以我们在该Controller中添加一个处理POST请求的 register 方法

二、然后编写对应的控制器

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import data.Repository;
import entity.Spittle;

@Controller
@RequestMapping("/spitter")
public class SpitterController {
    private Repository repository;

    @Autowired
    public SpitterController(Repository repository) {
        this.repository = repository;
    }

    @RequestMapping(value="/register", method=RequestMethod.GET)
    public String showRegistrationForm() {
        return "registerForm";
    }

    @RequestMapping(value="/register", method=RequestMethod.POST)
    public String processRegistration(Spittle spittle) {
        repository.save(spittle);
        return "redirect:/spitter/" + spittle.getUserName();
    }

    @RequestMapping(value="/{userName}", method=RequestMethod.GET)
    public String redirectPage(@PathVariable String userName, Model model) {
        System.out.println("6666666666666");
        Spittle spittle = repository.findByUserName(userName);
        model.addAttribute(spittle);
        return "profile";
    }
}

profile.jsp 页面

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>Your Profile</h1>
<c:out value="${spitter.username}"/><br/>
<c:out value="${spitter.username}"/><br/>
<c:out value="${spitter.username}"/><br/>
</body>
</html>

校验表单

使用JSR-303 Validation 来校验

(1)首先改造实体类

....    @NotNull
    @Size(min=5, max=16)  //非空,5到16个字符
    private String userName;
    @NotNull
    @Size(min=5, max=16)  //非空,5到16个字符
    private String firstName;
    @NotNull
    @Size(min=5, max=16)  //非空,5到16个字符
    private String lastName;
    @NotNull
    @Size(min=5, max=25)  //非空,5到25个字符
    private String password;

....

(2)然后改造控制器中的方法

    .....   @RequestMapping(value="/register", method=RequestMethod.POST)
    public String processRegistration(@Valid Spittle spittle, Errors errors) {
        System.out.println(errors.hasErrors()+"");
        if (errors.hasErrors()) {
            return "registerForm";
        }
        repository.save(spittle);
        return "redirect:/spitter/" + spittle.getUserName();
    }   ......

需要的jar包有 classmate-1.0.0、hibernate-jpa-2.1-api-1.0.2.Final、hibernate-validator-5.1.0.Final、jboss-logging-3.3.2.Final、joda-time-2.1、jsoup-1.7.1、paranamer-2.5.5、validation-api-2.0.1.Final

当参数校验不通过的时候会返回到registerForm页面

原文地址:https://www.cnblogs.com/codefeng/p/8975037.html

时间: 2024-11-07 21:48:24

构建Spring web 应用程序 (三)的相关文章

spring(5)构建 spring web 应用程序

[0]README 1)本文部分文字描述转自:"Spring In Action(中/英文版)",旨在review  "spring(5)构建 spring web 应用程序" 的相关知识: [1]spring mvc 起步 [1.1]跟踪spring mvc的请求 1)请求时一个十分繁忙的家伙,下图展示了请求使用spring mvc所经历的 站点: 对以上调用过程的分析(Analysis):(不能再干货--请求使用spring mvc 所经历的调用过程) step

《spring实战》学习笔记-第五章:构建spring web应用程序

5.1 Spring MVC起步 5.1.1 跟踪Spring MVC的请求 每当用户在Web浏览器中点击链接或提交表单的时候,请求就开始工作了.对请求的工作描述就像是快递投送员.与邮局投递员或FedEx投送员一样,请求会将信息从一个地方带到另 一个地方. 在请求离开浏览器时 ①,会带有用户所请求内容的信息,例如用户提交的表单信息. 请求旅程的第一站是Spring的前端控制器DispatcherServlet,在这里一个单实例的Servlet将请求委托给应用程序的其他组件来执行实际的处理. Di

Spring学习(五)--构建Spring Web应用程序

一.Spring MVC起步 看过猫和老鼠的小伙伴都可以想象Tom猫所制作的捕鼠器:它的目标 是发送一个小钢球,让它经过一系列稀奇古怪的装置,最后触发捕鼠 器.小钢球穿过各种复杂的配件,从一个斜坡上滚下来,被跷跷板弹起,绕过一个微型摩天轮,然后被橡胶靴从桶中踢出去.经过这些后,小钢球会对那只可怜又无辜的老鼠进行捕获.而Spring MVC框架与捕鼠器有些类似.Spring将请求在调度Servlet.处理器映射(handler mapping).控制器以及视图解析器(view resolver)之

第5章—构建Spring Web应用程序—关于spring中的validate注解后台校验的解析

关于spring中的validate注解后台校验的解析 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参数不能为null,email那么必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太慢,在时间.成本.质量的博弈中必然会落后.所以把校验层抽象出来是必然的结果,下面说下几种解决方案. 1.简单的校验Demo 依赖: <dependency> <groupId>javax.validation</groupId> <

Spring MVC 构建入门级 Web 应用程序

在本例中,我们将使用Spring MVC框架构建一个入门级web应用程序.Spring MVC 是Spring框架最重要的的模块之一.它以强大的Spring IoC容器为基础,并充分利用容器的特性来简化它的配置. 目录 MVC框架是什么 Dispatcher Servlet(Spring控制器) Spring入门示例 运行时依赖库 web.xml和spring-servlet.xml文件配置 请求控制器EmployeeController.java 视图模型EmployeeVO.java Dao

用 Sencha Touch 构建移动 web 应用程序

Sencha Touch 是一个使用 HTML5.CSS3 和 JavaScript 语言构建的移动 web 应用程序框架,在本文中,学习如何应用您当前的 web 开发技能进行移动 web 开发.下载和建立 Sencha Touch,通过一个样例应用程序探究基本原理.学习开始使用 Sencha Touch 框架所需的一切 2012 年 3 月 19 日 内容 概述 Sencha Touch 准备开始 UI components 结束语 参考资料 评论 概述 在软件开发领域中,有两个重要的趋势越来

Spring Boot——2分钟构建spring web mvc REST风格HelloWorld

之前有一篇<5分钟构建spring web mvc REST风格HelloWorld>介绍了普通方式开发spring web mvc web service.接下来看看使用spring boot如何快速构建一个. Spring Boot使我们更容易去创建基于Spring的独立和产品级的可以”即时运行“的应用和服务.支持约定大于配置,目的是尽可能快地构建和运行Spring应用. 之前我们创建基于Spring的项目需要考虑添加哪些Spring依赖和第三方的依赖.使用Spring Boot后,我们可

《Spring实战》学习笔记-第五章:构建Spring web应用

之前一直在看<Spring实战>第三版,看到第五章时发现很多东西已经过时被废弃了,于是现在开始读<Spring实战>第四版了,章节安排与之前不同了,里面应用的应该是最新的技术. 本章中,将会接触到Spring MVC基础,以及如何编写控制器来处理web请求,如何通明地绑定请求参数到业务对象上,同时还可以提供数据校验和错误处理的功能. Spring MVC初探 跟踪Spring MVC请求 在请求离开浏览器时,会带有用户所请求内容的信息,例如请求的URL.用户提交的表单信息. 请求旅

构建移动Web应用程序的技术堆栈

编写web应用程序时,有很多的技术决策.笔者最近回来编写现代Web应用程序,并希望总结一些曾经在开发周期过程中做了记录零散的想法.这篇文章是关于一套对笔者最近开发的项目有帮助的框架.笔者重温了一些最重要的框架类型,其中每一个可以展开来写一篇文章.这并不是一个广泛的现有产品相比,只是一个笔者最近使用的部分技术. 虽然笔者的重点是移动优先, 笔者认为,这套技术可以应用在一般的web应用程序. 笔者的决定和数据支持考虑了几个要求: 基于JavaScript(CoffeeScript,Dart,绝对值得