`
shelltea
  • 浏览: 34606 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2整合REST Plugin

阅读更多

1.添加依赖的Jar

 

 <dependency>
  	<groupId>org.apache.struts</groupId>
  	<artifactId>struts2-convention-plugin</artifactId>
  	<version>2.1.6</version>
 </dependency>
 <dependency>
  	<groupId>org.apache.struts</groupId>
  	<artifactId>struts2-rest-plugin</artifactId>
  	<version>2.1.6</version>
 </dependency>


2.参数配置

// Action的类名以Controller为后缀
<constant name="struts.convention.action.suffix" value="Controller"/>
// Action中没有@Action注解也创建映射
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.default.parent.package" value="rest-default"/>
// Action类所在的包
<constant name="struts.convention.action.packages" value="com.st.web"/>
// 搜索以web为结尾的包
<constant name="struts.convention.package.locators" value="web"/>

3.BaseController设计
package com.st.web;

import java.io.Serializable;

import org.apache.struts2.rest.HttpHeaders;

import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;

public abstract class BaseController<T> implements ModelDriven<T>,
		Serializable, Preparable {
	private static final long serialVersionUID = 7449478681110941532L;
	protected T entity;

	/**
	 * GET: /{model}
	 */
	public abstract HttpHeaders index();

	/**
	 * POST: /{model}
	 */
	public abstract HttpHeaders create();

	/**
	 * PUT: /{model}/{id}
	 */
	public abstract String update();

	/**
	 * DELETE: /{model}/{id}
	 */
	public abstract String destroy();

	/**
	 * GET: /{model}/{id}
	 */
	public abstract HttpHeaders show();

	/**
	 * GET: /{model}/{id}/edit
	 */
	public abstract String edit();

	/**
	 * GET: /{model}/new
	 */
	public abstract String editNew();

	@Override
	public T getModel() {
		return entity;
	}

	/**
	 * 子类通过重写此方法初始化实体类
	 */
	@Override
	public abstract void prepare();
}


什么时候需要返回HttpHeaders?
当返回的给用户的响应需要 在http头部自定义一些内容 ,需要返回HttpHeaders的实现类。

官方文档原文:
The REST Plugin adds support for action methods that return HttpHeaders objects as a way for the action to have more control over the response. 

REST Plugin HttpHeaders的实现类DefaultHttpHeaders有哪些更多的控制?
String resultCode;
int status = SC_OK;
Object etag; //被请求变量的实体值
Object locationId;
String location; // 响应报头域用于重定向接受者到一个新的位置
boolean disableCaching; // 用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制)
boolean noETag = false;
Date lastModified; //标记此文件在服务期端最后被修改的时间

Last-Modified和Etags如何帮助提高性能?
        聪明的开发者会把Last-Modified 和ETags请求的http报头一起使用,这样可利用客户端(例如浏览器)的缓存。因为服务器首先产生 Last-Modified/Etag标记,服务器可在稍后使用它来判断页面是否已经被修改。本质上,客户端通过将该记号传回服务器要求服务器验证其(客户端)缓存。 
        过程如下:
        1. 客户端请求一个页面(A)。 
        2. 服务器返回页面A,并在给A加上一个Last-Modified/ETag。 
        3. 客户端展现该页面,并将页面连同Last-Modified/ETag一起缓存。 
        4. 客户再次请求页面A,并将上次请求时服务器返回的Last-Modified/ETag一起传递给服务器。 
        5. 服务器检查该Last-Modified或ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304和一个空的响应体。

4.自定义的Controller
package com.st.web;

import java.util.Date;
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.st.entity.User;
import com.st.service.UserService;

@Results( { @Result(name = "success", type = "redirectAction", params = {
		"actionName", "user" }) })
public class UserController extends BaseController<User> {
	private static final long serialVersionUID = -2697052455833496406L;
	private UserService userService;
	private List<User> list;
	private Long id;

	public HttpHeaders create() {
		entity.setCreateTime(new Date());
		userService.save(entity);
		return new DefaultHttpHeaders("success");
	}

	public String destroy() {
		userService.delete(entity.getId());
		return "success";
	}

	public String edit() {
		return "edit";
	}

	public String editNew() {
		entity = new User();
		return "editNew";
	}

	public HttpHeaders index() {
		list = userService.list();
		return new DefaultHttpHeaders("index").disableCaching();
	}

	public HttpHeaders show() {
		return new DefaultHttpHeaders("show");
	}

	public String update() {
		userService.save(entity);
		return "success";
	}

	public void setUserService(UserService userService) {
		this.userService = userService;
	}

	public UserService getUserService() {
		return userService;
	}

	@Override
	public User getModel() {
		return entity;
	}

	public void setId(Long id) {
		if (null != id) {
			System.out.println("id:" + id);
			entity = userService.get(id);
		} else {
			this.id = id;
		}
	}

	public Long getId() {
		return id;
	}

	public List<User> getList() {
		return list;
	}

	public void setList(List<User> list) {
		this.list = list;
	}

	@Override
	public void prepare() {
		entity = new User();
	}
}
 
5.View层
在WEB-INF\content目录下建立以下文件:user-edit.jsp,user-editNew.jsp,user-index.jsp。
user-index.jsp--以列表显示所有的User
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>User</title>
  </head>
  	
  <body>
  	<a href="">List</a>
  	<a href="user/new">Add User</a>
  	
  	<table border="0">
  		<tr>
  			<td width="100">Login Name</td>
  			<td width="120">Password</td>
  			<td width="100">Create Time</td>
  			<td width="80">Manage</td>
  		</tr>
  		<s:iterator value="list" id="u">
	  		<tr>
	  			<td><s:property value="#u.loginName"/></td>
	  			<td><s:property value="#u.password"/></td>
	  			<td><s:date format="yyyy-MM-dd HH:mm" name="#u.createTime"/></td>
	  			<td>
	  				<a href="user/${u.id }/edit">Edit</a>
	  				<span>|</span>
	  				<a href="user/${u.id}?_method=DELETE">Delete</a>
	  			</td>
	  		</tr>
  		</s:iterator>
  	</table>
  </body>
</html>
 
user-editNew.jsp--创建新用户
<%@ page contentType="text/html; charset=UTF-8" language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>User</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  </head>
  
  <body>	
  	<s:form action="%{#request.contextPath}/user" theme="simple" method="post">
  	<table>
  		<tr>
  			<td>Login Name:<s:textfield name="loginName"/></td>
  		</tr>
  		<tr>
  			<td>Password:<s:password name="password"/></td>
  		</tr>
  		<tr>
  			<td><s:submit value="Submit"/><s:reset value="Cancel" onclick="history.back()"/></td>
  		</tr>
  	</table>
  	</s:form>
  </body>
</html>
 
user-edit.jsp--编辑用户信息
<%@ page contentType="text/html; charset=UTF-8" language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>User</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  </head>
  
  <body>	
  	<s:form action="%{#request.contextPath}/user/%{id}" theme="simple" method="post">
  	<s:hidden name="_method" value="put" />
  	<table>
  		<tr>
  			<td>ID:<s:textfield name="id" disabled="true"/></td>
  		</tr>
  		<tr>
  			<td>Login Name:<s:textfield name="loginName"/></td>
  		</tr>
  		<tr>
  			<td>Password:<s:password name="password"/></td>
  		</tr>
  		<tr>
  			<td><s:submit value="Submit"/><s:reset value="Cancel" onclick="history.back()"/></td>
  		</tr>
  	</table>
  	</s:form>
  </body>
</html>
 

11
0
分享到:
评论

相关推荐

    Struts2-rest插件(有注释)

    以 Convention 插件为基础,Struts 2.1 又新增了 REST 插件,允许 Struts 2 应用对外提供 REST 服务。REST 插件也无需使用 XML 进行配置管理。Struts 2.1 通过 REST 插件完全可以提供让人和机器客户端共同使用的资源...

    struts2版本 2.1.6 必须的jar包 和 web.xml 文件的修改

    8. **struts2-spring-plugin.jar**(如果使用Spring)- 用于整合Spring框架,管理Action实例的生命周期。 除了这些核心库,你可能还需要其他特定插件或依赖,如JSP、Servlet容器相关的库(如servlet-api.jar、jsp-...

    struts-2.1.8-LIB包

    9. **struts2-spring-plugin.jar**:如果结合Spring框架使用,这个插件可以帮助整合Struts 2和Spring,实现依赖注入和事务管理。 10. **struts2-tiles-plugin.jar**:对于更复杂的布局管理,Struts 2提供了Tiles...

    struts2.1.6+spring2.0+hibernate3.2常用配置包

    最近温习ssh2整合编程,顺便浏览下struts2有什么更新的消息,下载了新版本的struts2的2.1.8.1版,使用的是MyEclipse8.0开发,但是问题就随之而来了。MyEclipse8.0中自带的struts2版本是2.1.6,spring版本有2.0,2.5...

    Struts2整合Spring

    Struts2通过配置struts-plugin.xml文件来识别这些Spring Bean,并将它们作为Action实例。这样,我们在Action类中可以直接使用Spring管理的其他服务,如DAO层对象,无需手动创建或初始化。 接下来是Hibernate,它是...

    struts2.x jar

    在实际开发中,开发者通常会根据项目需求选择并引入相应的Struts2插件,以实现特定的功能,比如使用`struts2-spring-plugin.jar`来整合Spring框架,实现依赖注入,或者使用`struts2-rest-plugin.jar`来支持RESTful...

    struts2的各种jar包(16个)

    6. **struts2-spring-plugin.jar**:这个插件将Struts2与Spring框架整合,允许使用Spring管理Struts2的Action和其他依赖。 7. **struts2-tiles-plugin.jar**:与Tiles框架集成,提供布局和模板功能,方便创建复杂的...

    struts2框架详解

    - Struts2拥有丰富的插件生态系统,如REST插件、Ajax插件、Freemarker和Velocity模板插件等,可以扩展框架的功能。 9. **与Spring的整合** - 使用`struts2-spring-plugin`,可以直接在Spring容器中管理Action实例...

    Struts2 开发者文档 api

    10. ** strut2-tiles-plugin**:整合了Tiles框架,使得布局和复用页面变得更加容易。 11. ** strut2-json-plugin**:支持JSON格式的数据交换,便于与AJAX和移动应用进行交互。 12. ** strut2-dojo-plugin**:提供...

    struts2拆分页面的所用的jar包(7个)

    - **struts2-spring-plugin.jar**(如果使用Spring):整合Spring框架,提供依赖注入功能。 - **struts2-struts1-plugin.jar**(如果需要与Struts1兼容):提供与Struts1的兼容性。 5. **模板引擎**:在"struts2...

    RESTful-Struts2-2.3.15_JARs

    3. `struts2-rest-plugin-2.3.15.jar`: REST插件,提供了处理RESTful请求的能力,如将URL映射到Action和方法。 4. `xwork-core-2.3.15.jar`: XWork框架的核心库,是Struts2的基础,提供了Action管理和数据绑定等功能...

    SSH整合jar包-spring5.0+hibernate5.1+struts2.5

    3. Struts2的核心库和插件(如struts2-core、struts2-convention-plugin、struts2-json-plugin等) 4. 其他可能的依赖库,如log4j、commons-logging、slf4j等 使用这个SSH整合jar包,开发者可以快速搭建一个基于SSH...

    struts-2.3.30-all

    5. `struts2-dojo-plugin-2.3.30.jar`:Dojo库的整合插件,用于创建富客户端界面。 6. `struts2-json-plugin-2.3.30.jar`:JSON支持插件,方便与AJAX进行交互。 7. `struts2-spring-plugin-2.3.30.jar`:与Spring...

    struts2全部文件

    2. 插件库:如struts2-convention-plugin.jar、struts2-dojo-plugin.jar等,提供了额外的功能,如自动配置、Dojo JavaScript库的集成。 3. 拦截器库:如struts2-interceptor.jar,包含Struts2内置的拦截器,用于实现...

    Java高级框架开发struts篇

    Struts 2有一个丰富的插件生态系统,比如Struts2-dojo-plugin用于集成Dojo库,Struts2-convention-plugin简化了配置,还有其他如REST、JSON等插件,极大地丰富了框架的功能。 通过深入学习和实践"Java高级框架开发...

    最新版本Struts2.1.8+Spring3.0+Hibernate3.3.2+DWR2.0.6配置

    - **支持AJAX**:通过插件如`struts2-dwr-plugin`,可以轻松实现AJAX功能。 - **增强的类型转换和验证机制**:使数据处理更加灵活且高效。 - **国际化支持**:便于多语言应用的开发。 - **插件架构**:允许开发者...

Global site tag (gtag.js) - Google Analytics