接上:

  1. web.xml
  2. Spring-servlet.xml

  1. Controller层是控制层,在其类上添加@Controller注解,会被Spring-servlet.xml中的<context:component-scan>扫描识别;
  2. 在类上添加@RequestMapping,表示定义了命名空间,e.g.@RequestMapping("/spitter"),'/spitter'表示访问到此类,但具体到哪个方法,还需追加方法上的RequestMapping的参数;
  3. 方法上的@RequestMapping还有一个参数,RequestMethod,与页面有关,一般表单数据使用POST方法,在<form>的参数method定义:<form method="post" action="...">;
  4. 本例中,register的GET方法,代表了最简单的交互,返回的registerForm与Spring-servlet.xml的前后缀组成/WEB-INF/views/registerForm.jsp,表示访问指定路径的jsp页面;
  5. 通过命名空间和访问方法就可以定位具体的方法,在SpringMVC中,在与页面交互执行一系列操作时,难免要传递参数,提交注册页面时,需要将各个单参数包装成Spitter,此时需要在页面上添加
    <jsp:useBean id="spitter"  class="com.spring.mvc.pojo.Spitter" scope="request" ></jsp:useBean>

    来进行自动封装,在Controller中,只需要在方法参数中声明Spitter ***即可;

  6. Controller中另外一个比较重要的参数是Model,它可以用来封装数据,只是现在的model不允许缺省参数名,否则会报错;
  7. SpringMVC支持REST风格,在参数前添加@PathVariable,在@RequestMapping中用{}包裹原参数;
  8. SpringMVC支持JSR303校验框架,在Controller的需要校验方法参数前添加@Valid注解,它位于javax.validation.Valid类中,同时需要添加Error或BindingResult类型参数,并且要紧跟在待验证参数的后面,jsp页面中input标签应采用SpringForm标签,并且使用errors标签通过path参数将错误信息与对应的参数绑定,当校验不通过时,errors会显示错误信息;
  9. 错误信息需要在POJO中通过注解表示
    @NotNull
    @Size(max=20,min=4,message="长度必须在4-20个字符之间")
    private String firstName;

    SpringMVC数据验证

  10. 若不喜欢硬编码,则可以将验证信息写在classpath目录下的ValidationMessages.properties  

Controller:

 package com.spring.mvc.controller;

 import java.util.ArrayList;
import java.util.List;
import java.util.Locale; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
//import org.springframework.validation.BindingResult;
import org.springframework.validation.Errors;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.i18n.CookieLocaleResolver; import com.spring.mvc.dao.impl.SpitterDaoImpl;
import com.spring.mvc.pojo.Spitter; @Controller
@RequestMapping("/spitter")
public class SpitterController { @Autowired
private SpitterDaoImpl spitterDaoImpl;
/**
* 前往注册页面
* @return
*/
@RequestMapping(value="/register",method=RequestMethod.GET)
public String register(){
return "registerForm";
}
/**
* 实现添加功能,完成后跳转至个人信息
* @param s
* @param mv
* @return
*/
@RequestMapping(value="/register",method=RequestMethod.POST)
public String register(@Valid Spitter spitter,Errors errors){
if(errors.hasErrors()){
//取得所有验证未通过的error,遍历打印
List<ObjectError> list=new ArrayList<ObjectError>();
list=errors.getAllErrors();
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getDefaultMessage());
}
System.out.println(spitter);
System.out.println("属性验证未通过");
return "registerForm";
}
spitterDaoImpl.add(spitter);
return "redirect:/spitter/"+spitter.getUsername();
}
/**
* 获取个人信息
* @param username
* @param model
* @return
*/
@RequestMapping(value="/{name}",method=RequestMethod.GET)
public String showSpitterProfile(@PathVariable("name") String username,Model model){
Spitter s=spitterDaoImpl.findByUsername(username);
System.out.println("传入的参数为:"+username);
System.out.println(s);
model.addAttribute("spitter",s);
return "profile";
}
public SpitterDaoImpl getSpitterDaoImpl() {
return spitterDaoImpl;
}
public void setSpitterDaoImpl(SpitterDaoImpl spitterDaoImpl) {
this.spitterDaoImpl = spitterDaoImpl;
}
}

registerForm.jsp:

 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf"%>
<%@ page session="false" %>
<%
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="spitte" class="com.spring.mvc.pojo.Spitter" scope="request" ></jsp:useBean>
<html>
<head>
<title>Spitter</title>
<link rel="stylesheet" type="text/css"
href="<c:url value="/resources/style.css" />" >
</head>
<body>
<h1>Register</h1> <sf:form method="POST" modelAttribute="spitte">
First Name: <sf:input type="text" path="firstName" /><sf:errors path="firstName" cssClass="errors"/><br/>
Last Name: <sf:input type="text" path="lastName" /><sf:errors path="lastName" cssClass="errors"/><br/>
Email: <sf:input type="email" path="email" /><sf:errors path="email" cssClass="errors"/><br/>
Username: <sf:input type="text" path="username" /><sf:errors path="username" cssClass="errors"/><br/>
Password: <sf:input type="password" path="password" /><sf:errors path="password" cssClass="errors"/><br/>
<input type="submit" value="Register" />
</sf:form>
</body>
</html>

SpringMVC-Controller的更多相关文章

  1. [转]SpringMVC Controller介绍及常用注解

    一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Mo ...

  2. SpringMVC Controller介绍

    SpringMVC Controller 介绍 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理 ...

  3. SpringMVC Controller 介绍

    一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Mo ...

  4. springmvc controller junit 测试

    第一次搭建SSM框架,整合SpringMVC完成后进行Controller测试,找资料并解决问题. 下图是我的完整目录: 1 建立UserController类 代码清单 1-1:UserContro ...

  5. SpringMVC Controller介绍(转)

    SpringMVC Controller 介绍 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理 ...

  6. SpringMVC Controller详解

    SpringMVC Controller 介绍 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理 ...

  7. SpringMVC Controller接收参数总结

    本文中Controller的开发环境如下表格所示,Maven对应POM配置如下代码段所示: 系统/工具 版本号OS Windows 7 Home BasicJava 1.7.0_79Eclipse M ...

  8. SpringMVC Controller 返回值几种类型

    SpringMVC Controller 返回值几种类型 2016年06月21日 19:31:14 为who而生 阅读数:4189 标签: Controller 返回值类型spring mvc 更多 ...

  9. SpringMVC Controller单例和多例

    对于SpringMVC Controller单例和多例,下面举了个例子说明下. 第一次:类是多例,一个普通属性和一个静态属性. 结果:普通属性:0.............静态属性:0 普通属性:0. ...

  10. SpringMVC Controller介绍及常见注解

    一.简介 在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model,然后再把该Model返 ...

随机推荐

  1. [svc][op]关闭linux centos各种声音

    现在基本都用xshell了,直接xshell禁止即可 shell报警 #vi /etc/inputrc ================================ set bell-style ...

  2. lftp查看文件时间与登录服务查看文件时间相差8小时

    第一步,校正VPS时区设置: rm -rf /etc/localtime ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 第二步,修改FT ...

  3. C#解压或压缩文件夹

    这里主要解决文件夹包含文件夹的解压缩问题.1)下载SharpZipLib.dll,在http://www.icsharpcode.net/OpenSource /SharpZipLib/Downloa ...

  4. Angular External js library calling Document.Ready

    https://stackoverflow.com/questions/51094841/angular-external-js-library-calling-document-ready Step ...

  5. 将Java项目从maven迁移到gradle

    将Java项目从maven迁移到gradle 如何将一个java项目从maven迁移到gradle呢?gradle集成了一个很方便的插件:Build Init Plugin,使用这个插件可以很方便地创 ...

  6. HttpClient 教程 (五)

    第五章 HTTP客户端服务 5.1 HttpClient门面 HttpClient接口代表了最重要的HTTP请求执行的契约.它没有在请求执行处理上强加限制或特殊细节,而在连接管理,状态管理,认证和处理 ...

  7. Java 命令行运行java程序,出现“找不到或无法加载主类 ”的注意事项

    引用:http://blog.chinaunix.net/uid-27106528-id-5209914.html 要在CMD命令行中使用java 运行java程序,关于出现 “找不到或无法加载主类 ...

  8. python学习笔记(13)--向文件夹插入课文朗读

    说明: 1. 2016年初刚学python写的一段代码,找到了一个walk函数,研究了半天.文件复制粘贴,研究了半天.正则匹配,研究了半天,期间被斜杠差点搞死.后来做完了跟CZ炫耀,他说python里 ...

  9. 一款手机端的jQuery图片滑块插件

    今天我们要介绍一款比较特别的jQuery图片滑块插件,它不仅在PC浏览器上可以使用,而且更适合在手机端的网页中使用.这款jQuery插件不仅可以定义图片切换的方向,而且可以即时切换图片切换的动画方式, ...

  10. Linux服务器同步时间

    进行Linux服务器的时间同步是一件需要注意的事情,不然,集群中的服务器时间不同将导致许多奇怪问题发生, 如果没有安装crontab,那么,使用yum install crontabs进行安装和启动, ...