Struts2.x+Spring3.x+Hibernate4.x 整合(七)整合struts RESTful

8 篇文章 0 订阅
2 篇文章 0 订阅

Struts从2.1开始提供了RESTful插件,使 Struts 2 可以支持 Rails 风格的 URL,以对外提供 REST 风格的资源服务。

1 导入jar包

从struts 2.3.15.3压缩包中找到以下文件导入到项目WEB-INF/lib目录中:

ezmorph-1.0.6.jar

json-lib-2.3-jdk15.jar

struts2-convention-plugin-2.3.15.3.jar

struts2-rest-plugin-2.3.15.3.jar

xstream-1.4.2.jar


2 创建实体类

package com.whowii.app.model;

public class Book {
	private Integer id;
	private String name;
	private double price;

	// 无参数的构造器
	public Book() {
	}

	public Book(Integer id, String name, double price) {
		super();
		this.id = id;
		this.name = name;
		this.price = price;
	}

	// id 属性的 setter 和 getter 方法
	public void setId(Integer id) {
		this.id = id;
	}

	public Integer getId() {
		return this.id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

}

3 创建Service层代码

这里只是演示代码,并未从数据库中读取数据。

package com.whowii.app.restful.book.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.whowii.app.model.Book;

public class BookService {
	private static Map<Integer, Book> books = new HashMap<Integer, Book>();
	// 保留下本图书的 ID
	private static int nextId = 5;
	// 以内存中的数据模拟数据库的持久存储
	static {
		books.put(1, new Book(1, "疯狂 Java 讲义", 99));
		books.put(2, new Book(2, "轻量级 Java EE 企业应用实战", 89));
		books.put(3, new Book(3, "疯狂 Ajax 讲义", 78));
		books.put(4, new Book(4, "Struts 2 权威指南", 79));
	}

	// 根据 ID 获取
	public Book get(int id) {
		return books.get(id);
	}

	// 获取系统中全部图书
	public List<Book> getAll() {
		return new ArrayList<Book>(books.values());
	}

	// 更新已有的图书或保存新图书
	public void saveOrUpdate(Book book) {
		// 如果试图保存的图书的 ID 为 null,表明是保存新的图书
		if (book.getId() == null) {
			// 为新的图书分配 ID。
			book.setId(nextId++);
		}
		// 将保存 book
		books.put(book.getId(), book);
	}

	// 删除图书
	public void remove(int id) {
		books.remove(id);
	}
}


4 创建控制器

package com.whowii.app.restful.book.action;

import java.util.List;

import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.rest.DefaultHttpHeaders;
import org.apache.struts2.rest.HttpHeaders;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.whowii.app.model.Book;
import com.whowii.app.restful.book.service.BookService;

//定义返回 success 时重定向到 book Action 
@Results(@Result(name = "success", type = "redirectAction", params = { "actionName", "book" }))
public class BookController extends ActionSupport implements ModelDriven<Object> {
	private static final long serialVersionUID = 3983645930580636395L;
	// 封装 id 请求参数的属性
	private int id;
	private Book model = new Book();
	private List<Book> list;
	// 定义业务逻辑组件
	private BookService bookService = new BookService();

	// 获取 id 请求参数的方法
	public void setId(int id) {
		this.id = id;
		// 取得方法时顺带初始化 model 对象
		if (id > 0) {
			this.model = bookService.get(id);
		}
	}

	public int getId() {
		return this.id;
	}

	// 处理不带 id 参数的 GET 请求
	// 进入首页
	public HttpHeaders index() {
		list = bookService.getAll();
		DefaultHttpHeaders dh = new DefaultHttpHeaders("index").disableCaching();
		return dh;
	}

	// 处理不带 id 参数的 GET 请求
	// 进入添加新图书。
	public String editNew() {
		// 创建一个新图书
		model = new Book();
		return "editNew";
	}

	// 处理不带 id 参数的 POST 请求
	// 保存新图书
	public HttpHeaders create() {
		// 保存图书
		bookService.saveOrUpdate(model);
		addActionMessage("添加图书成功");
		return new DefaultHttpHeaders("success").setLocationId(model.getId());
	}

	// 处理带 id 参数的 GET 请求
	// 显示指定图书
	public HttpHeaders show() {
		return new DefaultHttpHeaders("show");
	}

	// 处理带 id 参数、且指定操作 edit 资源的 GET 请求
	// 进入编辑页面 (book-edit.jsp)
	public String edit() {
		return "edit";
	}

	// 处理带 id 参数的 PUT 请求
	// 修改图书
	public String update() {
		bookService.saveOrUpdate(model);
		addActionMessage("图书编辑成功!");
		return "success";
	}

	// 处理带 id 参数,且指定操作 deleteConfirm 资源的方法
	// 进入删除页面 (book-deleteConfirm.jsp)
	public String deleteConfirm() {
		return "deleteConfirm";
	}

	// 处理带 id 参数的 DELETE 请求
	// 删除图书
	public String destroy() {
		bookService.remove(id);
		addActionMessage("成功删除 ID 为" + id + "的图书!");
		return "success";
	}

	// 实现 ModelDriven 接口必须实现的 getModel 方法
	public Object getModel() {
		return (list != null ? list : model);
	}
}

5 创建视图文件

以下文件保存到:WEB-INF\content\book-index.jsp

<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %> 
 <%@taglib prefix="s" uri="/struts-tags" %> 
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 <html xmlns="http://www.w3.org/1999/xhtml"> 
 <head> 
    <title> 图书展示系统 </title> 
    <link href="<%=request.getContextPath() %>/css/demo.css"
        rel="stylesheet" type="text/css" /> 
 </head> 
 <body> 
 <s:actionmessage /> 
 <table> 
    <tr> 
        <th> 图书 ID</th> 
        <th> 书名 </th> 
        <th> 价格 </th> 
        <th> 操作 </th> 
    </tr> 
    <s:iterator value="model"> 
    <tr> 
        <td><s:property value="id"/></td> 
        <td>${name}</td> 
        <td>${price}</td> 
        <td><a href="book/${id}"> 查看 </a> | 
        <a href="book/${id}/edit"> 编辑 </a> | 
        <a href="book/${id}/deleteConfirm"> 删除 </a></td> 
    </tr> 
    </s:iterator> 
 </table> 
 <a href="<%=request.getContextPath() %>/book/new"> 创建新图书 </a> 
 </body> 
 </html>

6 访问示例

http://localhost:8180/ssh/book.do


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值