springmvc(七)---RESTful的应用

来源:互联网 发布:js同源策略和跨越请求 编辑:程序博客网 时间:2024/05/20 03:37

一、简介

RESTful(即Representational State Transfer的缩写)其实是一个开发理念,是对http的很好的诠释。RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。

下面通过实现用户的crud来对RESTful的url格式进行学习

二、RESTful的crud应用

1、首先需要配置web.xml的前端控制器拦截方式:

<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
  <servlet-mapping>
     <servlet-name>springmvc</servlet-name>
     <!-- /  RESTful 拦截路径的配置-->
     <url-pattern>/</url-pattern>    
  </servlet-mapping>

并且需要在springmvc.xml配置静态资源解析方法:

<!--

default-servlet-handler 将在 SpringMVC 上下文中定义一个DefaultServletHttpRequestHandler,它会对进入 DispatcherServlet 的请求进行筛查, 如果发现是没有经过映射的请求, 就将该请求交由 WEB 应用服务器默认的 Servlet 处理. 如果不是静态资源的请求,才由 DispatcherServlet 继续处理。 一般 WEB 应用服务器默认的 Servlet 的名称都是 default.若所使用的 WEB 服务器的默认 Servlet 名称不是 default,则需要通过 default-servlet-name 属性显式指定

-->

<!-- 静态资源解析 -->
<mvc:default-servlet-handler/>

2、pojo类

package top.einino.pojo;

public class User {
    private Integer id;
    private String username;

public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}

}

3、controller类,完成对所有用户的查询操作

    @RequestMapping("/users")
public String users(Model model){
List<User> users = new ArrayList<User>();
User user1 = new User();
user1.setId(1);
user1.setUsername("李四");
User user2 = new User();
user2.setId(2);
user2.setUsername("王五");
users.add(user1);
users.add(user2);
model.addAttribute("users", users);
   return "user/userList";
}

显示界面userList.jsp:

所有用户:
<table border="1">
<tr>
    <td>用户id</td>
        <td>用户姓名</td>
<td>用户操作</td>
</tr>
<c:forEach items="${users }" var="user">
<tr>
        <td>${user.id }</td>
            <td>${user.username }</td>
<td>
<a href="javascript:void(0)" onclick="window.open('${pageContext.request.contextPath }/user/${user.id }')">修改</a>
<a href="${pageContext.request.contextPath}/user/${user.id}" class="delete">删除</a>
</td>
</tr>
</c:forEach>
</table>

4、controller类,完成对用户的保存操作

//转到添加用户界面
   @RequestMapping("/addUser")
public String addUser(){
    return "user/addUser";
}
//RESTFul的保存用户形式
   @RequestMapping(value="/user",method=RequestMethod.POST)
public String save(User user){
System.out.println(user.getId());
System.out.println(user.getUsername());
return "redirect:/users";
}

显示界面

userList.jsp:

<input type="button" value="添加用户" onclick="addUser()"/></br>

<script type="text/javascript">

function addUser(){
     window.location.href="${pageContext.request.contextPath}/addUser";
}

</script>

addUser.jsp:

<form action="${pageContext.request.contextPath }/user" method="post">
用户id:    <input type="text" name="id"/></br>
用户姓名:    <input type="text" name="username"/></br>
<input type="submit" value="添加 "/>
</form>

5、controller类,完成对用户的删除操作

a、 //RESTful的删除用户形式
 @RequestMapping(value="/user/{id}",method=RequestMethod.DELETE)
public String deleteUser(@PathVariable("id") Integer id){
System.out.println(id);
//重定向所有用户列表
return "redirect:/users";
}

b、userList.jsp

<a href="${pageContext.request.contextPath}/user/${user.id}" class="delete">删除</a>

<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.4.4.min.js"></script>
<script type="text/javascript">

$(function(){
//为删除链接添加按钮事件
$(".delete").click(function(){
if(window.confirm("确定要删除该用户么?")){
         //获取到删除路径
                var href = $(this).attr("href");
                //更改deleteform的请求路径并完成提交
                $("form").attr("action", href).submit();
                return false;
}
});
});

</script>

<form action="" method="POST">

<!--将post请求转换成delete请求-->
   <input type="hidden" name="_method" value="DELETE"/>
</form>

c、需要在web.xml中配置将post请求转换成delete和put,如果请求时有隐藏域为_method,就会将post转换成相应的请求方式

<!-- 将post请求转换为put、delete请求 -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

6、controller类,完成用户修改操作

a、显示操作
//显示修改的用户信息
 @RequestMapping(value="/user/{id}", method=RequestMethod.GET)
public String toEdit(@PathVariable("id") Integer id, Model model){
User user = new User();
user.setId(id);
user.setUsername("李四");
model.addAttribute("user", user);
return "user/addUser";
}

c、修改addUser.jsp界面,使之与修改界面共用

<form action="${pageContext.request.contextPath }/user" method="POST">
用户id:    <input type="text" name="id" value="${user.id }"/></br>
用户姓名:    <input type="text" name="username" value="${user.username }"/></br>

<c:if test="${user.id!=null }">
<input type="hidden" name="_method" value="PUT"/>
<input type="submit" value="修改 "/>
</c:if>
<c:if test="${user.id==null }">
<input type="submit" value="添加 "/>
</c:if>
</form>

d、controller类,完成修改操作


//修改用户
 @RequestMapping(value="/user", method=RequestMethod.PUT)
public String editUser(User user){
System.out.println(user.getId());
System.out.println(user.getUsername());
return "redirect:/users";
}

三、小结

本博文介绍了RESTful的基本概括,并介绍了RESTful在springmvc的使用。通过一个小例子完成对RESTful四种请求方式的学习。

如果有疑问或者对本博文有何看法或建议或有问题的,欢迎评论,恳请指正!

0 0
原创粉丝点击