• SpringMVC-Controller


    接上:

    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:

     1 package com.spring.mvc.controller;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 import java.util.Locale;
     6 
     7 import javax.servlet.http.HttpServletRequest;
     8 import javax.servlet.http.HttpServletResponse;
     9 import javax.validation.Valid;
    10 
    11 import org.springframework.beans.factory.annotation.Autowired;
    12 import org.springframework.stereotype.Controller;
    13 import org.springframework.ui.Model;
    14 //import org.springframework.validation.BindingResult;
    15 import org.springframework.validation.Errors;
    16 import org.springframework.validation.ObjectError;
    17 import org.springframework.web.bind.annotation.ModelAttribute;
    18 import org.springframework.web.bind.annotation.PathVariable;
    19 import org.springframework.web.bind.annotation.RequestMapping;
    20 import org.springframework.web.bind.annotation.RequestMethod;
    21 import org.springframework.web.servlet.ModelAndView;
    22 import org.springframework.web.servlet.i18n.CookieLocaleResolver;
    23 
    24 import com.spring.mvc.dao.impl.SpitterDaoImpl;
    25 import com.spring.mvc.pojo.Spitter;
    26 
    27 @Controller
    28 @RequestMapping("/spitter")
    29 public class SpitterController {
    30     
    31     @Autowired
    32     private SpitterDaoImpl spitterDaoImpl;
    33     /**
    34      * 前往注册页面
    35      * @return
    36      */
    37     @RequestMapping(value="/register",method=RequestMethod.GET)
    38     public String register(){
    39         return "registerForm";
    40     }
    41     /**
    42      * 实现添加功能,完成后跳转至个人信息
    43      * @param s
    44      * @param mv
    45      * @return
    46      */
    47     @RequestMapping(value="/register",method=RequestMethod.POST)
    48     public String register(@Valid Spitter spitter,Errors errors){
    49         if(errors.hasErrors()){
    50             //取得所有验证未通过的error,遍历打印
    51             List<ObjectError> list=new ArrayList<ObjectError>();
    52                 list=errors.getAllErrors();
    53                 for(int i=0;i<list.size();i++){
    54                     System.out.println(list.get(i).getDefaultMessage());
    55                 }
    56             System.out.println(spitter);
    57             System.out.println("属性验证未通过");
    58             return "registerForm";
    59         }
    60         spitterDaoImpl.add(spitter);
    61         return "redirect:/spitter/"+spitter.getUsername();
    62     }
    63     /**
    64      * 获取个人信息
    65      * @param username
    66      * @param model
    67      * @return
    68      */
    69     @RequestMapping(value="/{name}",method=RequestMethod.GET)
    70     public String showSpitterProfile(@PathVariable("name") String username,Model model){
    71         Spitter s=spitterDaoImpl.findByUsername(username);
    72         System.out.println("传入的参数为:"+username);
    73         System.out.println(s);
    74         model.addAttribute("spitter",s);
    75         return "profile";
    76     }
    77     public SpitterDaoImpl getSpitterDaoImpl() {
    78         return spitterDaoImpl;
    79     }
    80     public void setSpitterDaoImpl(SpitterDaoImpl spitterDaoImpl) {
    81         this.spitterDaoImpl = spitterDaoImpl;
    82     }
    83 }

     registerForm.jsp:

     1 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
     2 <%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf"%>
     3 <%@ page session="false" %>
     4 <%
     5     request.setCharacterEncoding("UTF-8");
     6     response.setCharacterEncoding("UTF-8");
     7  %> 
     8 <jsp:useBean id="spitte"  class="com.spring.mvc.pojo.Spitter" scope="request" ></jsp:useBean>
     9 <html>
    10   <head>
    11     <title>Spitter</title>
    12     <link rel="stylesheet" type="text/css" 
    13           href="<c:url value="/resources/style.css" />" >
    14   </head>
    15   <body>
    16     <h1>Register</h1>
    17 
    18     <sf:form method="POST" modelAttribute="spitte">
    19       First Name: <sf:input type="text" path="firstName" /><sf:errors path="firstName" cssClass="errors"/><br/>
    20       Last Name: <sf:input type="text" path="lastName" /><sf:errors path="lastName" cssClass="errors"/><br/>
    21       Email: <sf:input type="email" path="email" /><sf:errors path="email" cssClass="errors"/><br/>
    22       Username: <sf:input type="text" path="username" /><sf:errors path="username" cssClass="errors"/><br/>
    23       Password: <sf:input type="password" path="password" /><sf:errors path="password" cssClass="errors"/><br/>
    24       <input type="submit" value="Register" />
    25     </sf:form>
    26   </body>
    27 </html>
  • 相关阅读:
    一些好用的小工具
    App随机测试之Monkey和Maxim
    Appium如何自动判断浏览器驱动
    最简单的一个Appium测试Android Web APP的代码demo
    pytest使用allure生成测试报告的2种命令
    使用order by in()将快到期的数据排到最上方。
    关于jQuery click()方法重复提交的问题
    关于List removeAll失效的问题
    根据年和月计算对应的天数
    jquery通过监听输入框实现值的自动计算
  • 原文地址:https://www.cnblogs.com/yw0219/p/6103919.html
Copyright © 2020-2023  润新知