Chinaunix首页 | 论坛 | 博客
  • 博客访问: 230676
  • 博文数量: 75
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 848
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-08 10:27
文章分类
文章存档

2014年(9)

2013年(66)

我的朋友

分类: Java

2013-10-18 18:39:46

REST风格与传统风格比较
  查询用户 


    传统方式 /user_detail?id=120


    Rest风格 /user/120


  删除用户


    传统方式 /user_delete?id=123


    Rest风格 /user/123/delete


  修改用户


    传统方式 /user_update?id=123


    Rest风格 /user/123/update


  获取列表


    传统方式 /user_list


    Rest风格 /users   或者 /user/users


 


JSR303


  JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,官方参考实现是Hibernate Validator。
  此实现与Hibernate ORM 没有任何关系。JSR 303 用于对Java Bean 中的字段的值进行验证。 


实例演示


实体类




[java] view plaincopyprint?
package com.springmvc.demo.entity;  
import javax.validation.constraints.NotNull;  
import javax.validation.constraints.Pattern;  
import javax.validation.constraints.Size;  
  
/** 
 * 
 *  User.java    
 * 
 *  @version : 1.1 
 *   
 *  @author  : 苏若年    发送邮件 
 *     
 *  @since   : 1.0        创建时间:    2013-4-13  上午10:42:20 
 *      
 *  TODO     :  
 * 
 */  
public class User {  
      
    @NotNull(message="用户名不能为空")  
    private String username;  
      
    @NotNull(message="密码不能为空")  
    @Size(min=4,max=10,message="密码长度必须在4-10的长度")  
    private String password;  
      
    @Pattern(regexp="^[a-zA-Z0-9_]+@[a-zA-Z0-9_]+.[a-zA-Z]{2,5}?((.cn)|(.jp))?$", message="邮箱格式不正确")  
    private String email;  
      
      
    public User(){  
          
    }  
      
    public User(String username, String password, String email) {  
        super();  
        this.username = username;  
        this.password = password;  
        this.email = email;  
    }  
      
    //getter and  setter  
      
}  


web.xml文件




[java] view plaincopyprint?
 
    xmlns=""   
    xmlns:xsi=""   
    xsi:schemaLocation="   
    /web-app_2_5.xsd">  
   
   
     
        CharacterFilter  
        org.springframework.web.filter.CharacterEncodingFilter  
         
            encoding  
            UTF-8  
       
 
   
 
      
     
        CharacterFilter  
        /*  
   
 
  
     
        dispatcher  
        org.springframework.web.servlet.DispatcherServlet  
   
 
     
        dispatcher  
        /  
   
 
  
  
     
        index.jsp  
   
 
   
 


dispatcher-servlet.xml


[java] view plaincopyprint?
 
       xmlns:aop=""  
       xmlns:context=""  
       xmlns:mvc=""  
       xmlns:tx=""  
       xmlns:xsi=""  
       xsi:schemaLocation="  
        /spring-aop-3.0.xsd  
         
        /spring-beans-3.0.xsd  
         
        /spring-context-3.0.xsd  
         
        /spring-mvc-3.0.xsd  
         
        /spring-tx-3.0.xsd  
        ">  
  
     
     
      
     
     
     
     
     
         
         
         
         
         
         
   
 
 


控制器


[java] view plaincopyprint?
package com.springmvc.demo.controller;  
  
import java.util.HashMap;  
import java.util.Map;  
  
import org.springframework.stereotype.Controller;  
import org.springframework.ui.Model;  
import org.springframework.validation.BindingResult;  
import org.springframework.validation.annotation.Validated;  
import org.springframework.web.bind.annotation.PathVariable;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RequestMethod;  
  
import com.springmvc.demo.entity.User;  
  
/** 
 * 
 *  UserController.java    
 * 
 *  @version : 1.1 
 *   
 *  @author  : 苏若年    发送邮件 
 *     
 *  @since   : 1.0        创建时间:    2013-4-13  下午06:21:34 
 *      
 *  TODO     :  
 * 
 */  
@Controller  
@RequestMapping(value="/user")  
public class UserController {  
  
    private Map users = new HashMap();  
      
    public UserController(){  
        users.put("suruonian", new User("suruonian","suruonian","suruonian@demo.com"));  
        users.put("linyunxi", new User("linyunxi","linyunxi","linyunxi@163.com"));  
        users.put("dennisit", new User("dennisit","dennisit","dennisit@163.com"));  
        users.put("moshaobai", new User("moshaobai","bing_he","1325103287@qq.com"));  
    }  
      
    /** 
     *  
     * 
     * Description:    构建REST风格 /user/users的GET请求时才执行该方法的操作RequestMethod.GET表示 
     *                 只处理GET请求 
     * @param model    用于上下文参数传递 
     * @return        视图页面 user/list  结合user-servlet.xml中配置的视图模型匹配视图页面 
     *                 实例中方法返回表示/WEB-INF/jsp/user/list.jsp页面 
     * 
     */  
    @RequestMapping(value="/users",method=RequestMethod.GET)  
    public String list(Model model){  
        model.addAttribute("users", users);  
        return "user/list";  
    }  
      
  
    /** 
     *  
     * 
     * Description:    链接到页面时是GET请求,执行该方法 添加 
     * @return        返回给用户添加页面 
     * 
     */  
    @RequestMapping(value="/add",method=RequestMethod.GET)  
    public String add(Model model){  
        model.addAttribute("user",new User());    //开启ModelDriven 跳转到增加页面时使用该Model  
        return "user/add";  
    }  
      
    /** 
     *  
     * Description: 添加操作 请求/user/add  form表单提交时使用的post请求调用该方法 
     * @param user    添加的User对象 
     * @param br    验证绑定 
     * @return        视图页面 
     *                         添加成功 请求重定向redirect:/user/users 表示执行操作结束后请求定向为/user/users 
     *                         添加失败 页面转到/WEB-INF/jsp/add.jsp 这里有验证绑定,将在视图页面展示验证错误信息 
     * 
     */  
    @RequestMapping(value="/add",method=RequestMethod.POST)  
    public String add(@Validated User user,BindingResult br){  
        //需要说明的是BindingResult形参一定要跟@Validated修饰的形参后面写验证  
        if(br.hasErrors()){        //如果有错误,直接跳转到添加视图  
            return "user/add";            //服务端跳转 该跳转会自动在前面增加 forward  
        }  
        users.put(user.getUsername(), user);  
        return "redirect:/user/users";    //客户端跳转 使用 redirect  
    }  
      
      
    /** 
     *  
     * 
     * Description:     查看操作 根据用户名查看  REST风格: /detail/查看的用户名 
     * @param username    带查看的用户名@PathVariable 修饰username 表示用请求路径中的username作为 形参 
     * @param model        携带数据的Model 
     * @return            视图页面 /WEB-INF/jsp/user/detail.jsp页面 
     * 
     */  
    @RequestMapping(value="/{username}",method=RequestMethod.GET)  
    public String detail(@PathVariable String username, Model model){  
        System.out.println("获取到传入的参数值为:" + username);  
        model.addAttribute("user", users.get(username));  
        return "user/detail";  
    }  
      
    /** 
     *  
     * 
     * Description:        预更新操作根据用户名查询用户信息 然后数据交给携带体 展示到视图    REST风格: /更新的用户的用户名/update 
     * @param username    @PathVariable修饰 表示形参同URL中的请求参数 
     * @param model        携带数据的Model 
     * @return            视图页面/WEB-INF/jsp/user/update页面 
     * 
     */  
    @RequestMapping(value="/{username}/update",method=RequestMethod.GET)  
    public String update(@PathVariable String username, Model model){  
        System.out.println("获取到传入的参数值为:" + username);  
        model.addAttribute(users.get(username));  
        return "user/update";  
    }  
      
    /** 
     *  
     * 
     * Description:        真正更新的操作    REST风格:    /更新的用户的用户名/update 
     * @param username    带更新的用户的用户名     
     * @param user        带更新的用户的信息对象    @Validated修饰表示信息需要被验证 
     * @param br        验证信息绑定对象 必须紧跟在待验证的信息形参后面 
     * @return            视图页面     
     *                              更新成功  请求重定向 /user/users 
     *                              更新失败      转到/WEB-INF/jsp/user/update.jsp页面 
     * 
     */  
    @RequestMapping(value="/{username}/update",method=RequestMethod.POST)  
    public String update(@PathVariable String username, @Validated User user,BindingResult br){  
        if(br.hasErrors()){        //如果有错误,直接跳转到修改视图  
            return "user/update";  
        }  
        users.put(username, user);  
        return "redirect:/user/users";  
    }  
      
    /** 
     *  
     * 
     * Description:        删除操作 REST风格:/删除的用户名/delete 
     * @param username    删除的用户名        类似表主键,可以标记到整个记录信息 
     * @return            视图页面     
     *                               请求重定向到 /user/users 
     * 
     */  
    @RequestMapping(value="/{username}/delete",method=RequestMethod.GET)  
    public String delete(@PathVariable String username){  
        System.out.println("获取到传入的参数值为:" + username);  
        users.remove(username);  
        return "redirect:/user/users";  
    }  
}  


视图层/WEB-INF/jsp/user/下的list.jsp,add.jsp,detail.jsp,update.jsp文件


list.jsp


[html] view plaincopyprint?
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<%@ taglib prefix="c" uri="" %>  
<%  
    String path = request.getContextPath();  
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;  
%>  
  
 
 
   
     
    <%=basePath%>  
   
    
   
   

用户信息展示

 

添加信息

 
     
        姓名:     ${usermap.value.username}    
        密码:    ${usermap.value.password }  
        邮箱:    ${usermap.value.email }  
        修改  
        删除  
       
 
   
 
   
 


add.jsp


[html] view plaincopyprint?
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<%@ taglib prefix="sf" uri="" %>  
<%  
    String path = request.getContextPath();  
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
%>  
  
 
 
   
     
    <%=basePath%>  
     
    
   
   

增加用户信息页面


 
     
     
        姓名:  
 
        密码:
 
        邮箱:
 
         
   
 
   
 


detail.jsp


[java] view plaincopyprint?
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<%  
    String path = request.getContextPath();  
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;  
%>  
  
 
 
   
     
    <%=basePath%>  
   
    
   
   

用户详细信息页面


 
        姓名:     ${user.username}  
 
        密码:    ${user.password }
 
        邮箱:    ${user.email }
 
        返回用户列表  
   
 


update.jsp
[html] view plaincopyprint?
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<%@ taglib prefix="sf" uri="" %>  
<%  
    String path = request.getContextPath();  
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;  
%>  
 
 
   
     
    <%=basePath%>  
   
    
   
       

修改用户信息页面


 
         
         
            姓名:  
 
            密码:
 
            邮箱:
 
             
       
 
   
 

阅读(1862) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~