`
songsong
  • 浏览: 11568 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Restlet2 + Spring3 注解方式配置

阅读更多
Restlet2 + Spring3 配置如下,希望能对大家有用
Restlet : restlet-jee-2.0.3 注意是jee版本
Spring : 3.0.4.RELEASE

web.xml
<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:spring/*.xml</param-value>
	</context-param>

<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

<servlet>
		<servlet-name>restlet</servlet-name>
		<servlet-class> 
			org.restlet.ext.spring.RestletFrameworkServlet
		</servlet-class>
		<init-param>
			<param-name>targetRestletBeanName</param-name>
			<param-value>webApp</param-value>
		</init-param>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>restlet</servlet-name>
		<url-pattern>/resource/*</url-pattern>
	</servlet-mapping>


applicationContext-restlet.xml
	<bean id="webApp" class="org.restlet.Application">
		<property name="root" ref="root" />
	</bean>
	
	<bean name="root" class="org.restlet.ext.spring.SpringBeanRouter"/>
	
	<alias name="indexResource" alias="/index.html"/>
	<alias name="gameTypeResource" alias="/admin/gametypes/{action}"/>

    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
		<property name="templateLoaderPath" value="/WEB-INF/page/" />
		<property name="freemarkerSettings">
			<props>
				<prop key="template_update_delay">0</prop>
				<prop key="default_encoding">UTF-8</prop>
				<prop key="locale">zh_CN</prop>
			</props>
		</property>
	</bean>


IndexResource.java
@Service
@Scope("prototype")
public class IndexResource extends ServerResource {
	
	@Autowired
	protected FreeMarkerConfigurer freemarkerConfig;
	
	@Autowired
	private GameTypeManager gameTypeManager;
	
	@Get("html")
	public Representation index() {
		List<GameType> gameTypeList = gameTypeManager.findListByRoot(GameTypeAttribute.Standard);
		Set<FlashGame> hotGames = gameTypeManager.getGameTypeByName("推荐游戏").getGames();
		final Map<String, Object> dataModel = new TreeMap<String, Object>();
		dataModel.put("gameTypeList", gameTypeList);
		dataModel.put("hotGames", hotGames);
		return new TemplateRepresentation("index.html", freemarkerConfig.getConfiguration(), dataModel, MediaType.TEXT_HTML);
	}

}


GameTypeResource.xml
@Service
@Scope("prototype")
public class GameTypeResource extends ServerResource {
	
	@Autowired
	protected FreeMarkerConfigurer freemarkerConfig;
	
	@Autowired
	private GameTypeManager gameTypeManager;
	
	private String action;
	
	private int pageNum = 1;
	
	@Get("html")
	public Representation represent() {
		if (StringUtils.isNotEmpty((String) getRequest().getAttributes().get("action"))) {
			action = (String) getRequest().getAttributes().get("action");
		}
		if (StringUtils.isNotEmpty((String) getRequest().getAttributes().get("pageNum"))) {
			pageNum = Integer.valueOf(((String) getRequest().getAttributes().get("pageNum")));
		}
		if ("list".equals(action)) {
			return list();
		} else if ("add".equals(action)) {
			return add();
		} else {
			return list();
		}
	}
	
	public Representation list() {
		PageBean pageBean = new PageBean();
		pageBean.setPageNum(pageNum);
		pageBean.setMaxResults(100);
		List<GameType> gameTypes = gameTypeManager.getAll(pageBean);
		final Map<String, Object> dataModel = new TreeMap<String, Object>();
		dataModel.put("gameTypes", gameTypes);
		dataModel.put("pageNum", pageNum);
		return new TemplateRepresentation("admin/gametypes.html", freemarkerConfig.getConfiguration(), dataModel, MediaType.TEXT_HTML);
	}
	
	public Representation add() {
		List<GameType> gameTypes = gameTypeManager.findListByAttribute(GameTypeAttribute.Standard);
		final Map<String, Object> dataModel = new TreeMap<String, Object>();
		dataModel.put("gameTypes", gameTypes);
		return new TemplateRepresentation("admin/gametype_add.html", freemarkerConfig.getConfiguration(), dataModel, MediaType.TEXT_HTML);
	}
	
	@Post
	public Representation acceptRepresentation(Representation entity) throws ResourceException {
		Form form = new Form(entity);
		GameType gameType = new GameType();
		gameType.setName(form.getFirstValue("name"));
		if (!StringUtils.isEmpty(form.getFirstValue("parentId"))) {
			Long parentId = Long.valueOf(form.getFirstValue("parentId"));
			GameType parent = gameTypeManager.get(parentId);
			if (parent != null) {
				gameType.setParent(parent);
			}
		}
		gameType.setGameTypeAttribute(GameTypeAttribute.Standard);
		gameTypeManager.saveByName(gameType);
		return get();
	}
	
	@Put
	public Representation storeRepresentation(Representation entity) throws ResourceException {
		Form form = new Form(entity);
		GameType gameType = new GameType();
		gameType.setName(form.getFirstValue("name"));
		if (!StringUtils.isEmpty(form.getFirstValue("parentId"))) {
			Long parentId = Long.valueOf(form.getFirstValue("parentId"));
			GameType parent = gameTypeManager.get(parentId);
			if (parent != null) {
				gameType.setParent(parent);
			}
		}
		gameType.setGameTypeAttribute(GameTypeAttribute.Standard);
		gameTypeManager.saveByName(gameType);
		return get();
	}
	
	@Delete
	public Representation removeRepresentations(Representation entity) throws ResourceException {
		Form form = new Form(entity);
		if (!StringUtils.isEmpty(form.getFirstValue("id"))) {
			Long id = Long.valueOf(form.getFirstValue("id"));
			gameTypeManager.removeById(id);
		}
		return get();
	}

}


SpringBeanRouter用到的是Spring的BeanNameUrlHandlerMapping,将url映射成bean
对于要使用基于restlet注解(@Get  @Put @Post @Delete)配置,一定要直接继承ServerResource
对于路径的匹配模式还需要研究下
分享到:
评论

相关推荐

    restlet2.0+spring3.0+hibernate3.3.框架集成

    2. **Spring 3.0**:这是Spring框架的一个版本,它是一个全面的后端开发解决方案,包含了依赖注入、面向切面编程、数据访问、Web开发、任务调度等多种功能。Spring的IoC(Inversion of Control)容器管理了应用对象...

    使用注解配置实现Spring动态数据源切换

    使用注解配置实现Spring动态数据源切换,实现原理 1、自定义动态数据源类DynamicDataSource: 实现spring类AbstractRoutingDataSource的方法determineCurrentLookupKey 2、自定义Spring AOP类DataSourceAspect 3、...

    <Reslet1>:Reslet+Spring,配置简单web访问

    在Spring中,我们可以使用`@Component`或`@Service`注解来定义一个Reslet资源,并通过`@Path`注解来指定URL路径。例如: ```java import org.restlet.resource.Get; import org.springframework.stereotype....

    基于Spring的Restlet实例

    Spring Security可以与Restlet结合,实现OAuth2、JWT或其他认证机制,以保护API免受未经授权的访问。 9. **部署和运行**:最后,将构建好的Spring Restlet应用打包成WAR文件,部署到Tomcat、Jetty等Servlet容器,...

    使用注解配置Spring多数据源

    本教程将详细介绍如何使用注解来配置Spring的多数据源,结合spring、restlet和mysql环境进行实战演示。在开始之前,请确保已经执行了提供的`mysql_dml.sql`文件,以初始化必要的测试数据。 首先,我们需要理解...

    Restlet开发实例

    3. Spring与Restlet集成:学习如何在Restlet应用中利用Spring的优势,如依赖注入、事务管理等。 通过这个系列的学习,你将具备使用Restlet框架构建高效、灵活且易于维护的REST服务的能力。无论是简单的API还是复杂...

    Restlet学习的三篇文章

    3. **Restlet与Spring的整合** Spring框架是企业级Java应用的主流选择,提供了依赖注入(DI)、AOP(面向切面编程)等功能。在REST服务中,Spring可以帮助管理bean的生命周期,提供事务控制,以及与其他Spring组件...

    spring2.5 api

    Spring 2.5 引入了注解配置,允许开发者在类和方法级别使用注解,如 @Component、@Service、@Repository 和 @Controller,这些注解对应了传统的 XML 中的 `&lt;bean&gt;` 元素。此外,@Configuration 类可以替代 XML 配置...

    restful webservice构建小例子(restlet).pdf

    3. 与Spring等框架的完美集成:Restlet可以与其他框架,如Struts2、Spring等无缝配合,方便开发者使用。 构建过程包括以下几个步骤: 1. 创建Web工程:首先建立一个基于Tomcat的Web项目,用于调试和部署RESTful...

    restful——webservice

    3. 可集成性:Restlet能够无缝集成到Spring等流行框架中,方便地与企业级应用结合。 实现RESTful Web服务的具体步骤包括: 1. 使用Restlet框架:在项目中引入Restlet库,创建Web工程,并配置服务器环境(如Tomcat...

    Jersey和Tomcat构建RESTful WebService

    1. **核心服务器(Core Server)**:通过提供JSR311中标准化的注解和API,使得开发者可以以直观的方式开发RESTful Web服务。 2. **核心客户端(Core Client)**:Jersey客户端API帮助开发者轻松地与REST服务进行通信。 3...

Global site tag (gtag.js) - Google Analytics