`

EWeb4J框架-REST-Demo

阅读更多
呼,写了个用户指南,只完成了MVC部分。好累的说。
不过,也总算框架开发基本完成了。
至少,终于让它RESTful了。
下载地址:http://code.google.com/p/eweb4j/downloads/list

给出一个简单的Controller吧,囧
package test.controller;

import java.io.PrintWriter;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import test.po.Pet;
import test.service.PetService;

import com.cfuture08.eweb4j.component.DivPageComp;
import com.cfuture08.eweb4j.ioc.IOC;
import com.cfuture08.eweb4j.mvc.annotation.Controller;
import com.cfuture08.eweb4j.mvc.annotation.Param;
import com.cfuture08.eweb4j.mvc.annotation.RequestMapping;
import com.cfuture08.eweb4j.mvc.annotation.RequestMethod;
import com.cfuture08.eweb4j.mvc.annotation.Result;
import com.cfuture08.eweb4j.mvc.annotation.Singleton;
import com.cfuture08.eweb4j.mvc.annotation.ValField;
import com.cfuture08.eweb4j.mvc.annotation.ValParam;
import com.cfuture08.eweb4j.mvc.annotation.Validator;
import com.cfuture08.util.JsonConverter;
@Singleton
@Controller
@RequestMapping("pets")
public class PetController {
	private final PetService service = IOC.getBean("PetService");

	@RequestMapping("/")
	@Result(location = { "showAll.jsp" }, name = { "success" }, type = { "" }, index = { "0" })
	public String getAll(HttpServletRequest request) {
		List<Pet> pets = this.service.getAll();
		request.setAttribute("pets", pets);
		return "success";
	}

	@RequestMapping("/分页")
	@Result(location = { "showAll.jsp" }, name = { "success" }, type = { "" }, index = { "0" })
	public String getList(HttpServletRequest request, @Param("p") int pageNum,
			@Param("n") int numPerPage) {
		List<Pet> pets = this.service.getPage(pageNum, numPerPage);
		if (pets != null && pets.size() > 0) {
			DivPageComp dpc = new DivPageComp(pageNum, numPerPage,
					this.service.countAll(), 4);
			dpc.setLocation(String.format("分页?p={pageNum}&n=%s", numPerPage));
			dpc.doWork();
			request.setAttribute("pets", pets);
			request.setAttribute("dpc", dpc);
		}
		return "success";
	}

	@RequestMapping("/{id}")
	@Result(location = { "seeDetail.jsp" }, name = { "success" }, type = { "" }, index = { "0" })
	public String get(HttpServletRequest request, PrintWriter out,
			@Param("id") Integer id, @Param("ext") String ext) {
		Pet pet = this.service.getOne(id);
		if ("json".equalsIgnoreCase(ext)) {
			out.print("<pre>" + JsonConverter.convert(pet) + "</pre>");
			return "ajax";
		}

		request.setAttribute("pet", pet);
		return "success";
	}

	@RequestMapping("/{id}")
	@RequestMethod("DELETE")
	@Result(location = { "分页?p=1&n=10" }, name = { "success" }, type = { "redirect" }, index = { "0" })
	public String deleteOne(PrintWriter out, @Param("id") Integer id) {
		String error = this.service.delete(new Integer[] { id });
		if (error == null) {
			return "success";
		} else {
			out.print(String.format(
					"<script>alert('%s');history.go(-1)</script>", error));
			return "ajax";
		}

	}

	@RequestMapping("/{id}")
	@RequestMethod("PUT")
	@Result(location = { "分页?p=1&n=10" }, name = { "success" }, type = { "redirect" }, index = { "0" })
	@Validator(name = { "requried", "int", "int", "length" }, clazz = {}, index = {}, showErrorType = {})
	@ValField(name = { "id", "id", "age", "type" }, index = { "0", "1", "2",
			"3" }, message = { "请选择要修改的记录", "id必须是数字", "年龄必须是数字", "类型长度不能超过10" })
	@ValParam(index = { "3" }, name = { "maxLength" }, value = { "10" })
	public String put(PrintWriter out, Pet aPet) {
		String error = this.service.update(aPet);
		if (error == null) {
			return "success";
		} else {
			out.print(String.format(
					"<script>alert('%s');history.go(-1)</script>", error));
		}
		return "ajax";
	}

	@RequestMapping("/{id}/编辑")
	@Result(location = { "../edit.jsp" }, name = { "success" }, type = { "" }, index = { "0" })
	public String edit(HttpServletRequest request, @Param("id") Integer id) {
		Pet tPet = this.service.getOne(id);
		request.setAttribute("pet", tPet);
		return "success";
	}

	@RequestMapping("/添加")
	@Result(index = { "0" }, location = { "add.jsp" }, name = { "success" }, type = { "" })
	public String addPet() {
		return "success";
	}

	@RequestMapping("/")
	@RequestMethod("POST")
	@Result(location = { "分页?p=1&n=10" }, name = { "success" }, type = { "redirect" }, index = { "0" })
	@Validator(clazz = {}, index = { "0" }, name = { "int", "length" }, showErrorType = {
			"", "" })
	@ValField(index = { "0", "1" }, message = { "年龄必须是数字", "类型长度不能超过10" }, name = {
			"age", "type" })
	@ValParam(index = { "1" }, name = { "maxLength" }, value = { "10" })
	public String post(PrintWriter out, Pet aPet) {
		String error = this.service.create(aPet);
		if (error == null) {
			return "success";
		} else {
			out.print(String.format(
					"<script>alert('%s');history.go(-1)</script>", error));
		}
		return "ajax";
	}

}


PetService
package test.service;

import test.dao.PetDAO;
import test.po.Pet;

import com.cfuture08.eweb4j.orm.dao.base.BaseDAOImpl;

public class PetService extends BaseDAOImpl<Pet>{
	private PetDAO petDAO;
	public PetService() {
		super(Pet.class);
	}
	public void setPetDAO(PetDAO aPetDAO){
		this.petDAO = aPetDAO;
	}
}

对于我将Service去继承一个BaseDAO,大家有木有什么看法?因为我觉得我的这个程序木有什么业务逻辑,仅有的几个数据验证就让controller帮我做了,数据库访问逻辑让dao帮我做了,又没有什么事务性,所以干脆就让servcice继承一个BaseDAO来应对一些纯粹的数据库访问吧。其实很多的系统都这样吧,service层仅仅是简单的调用了DAO的方法而已。
PetDAO
package test.dao;

public interface PetDAO {
}


PetDAOImpl
package test.dao;

public class PetDAOImpl implements PetDAO {
}



Pet
package test.po;

/**
 * just a po
 * 
 * @author weiwei
 * 
 */
public class Pet {
	private Integer id = 0;
	private String name;
	private String type;
	private int age;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String toString() {
		return "[Pet id:" + this.id + ",name:" + this.name + ",age:" + this.age
				+ ",type:" + this.type + "]";
	}
}



EWeb4J框架配置文件
ioc配置
<?xml version="1.0" encoding="UTF-8"?>

<beans>
  <bean id="PetService" scope="singleton" class="test.service.PetService" xmlBean="com.cfuture08.eweb4j.ioc.config.bean.IOCConfigBean">
    <inject ref="PetDAO" name="petDAO" type="" value="" xmlBean="com.cfuture08.eweb4j.ioc.config.bean.Injection"/>
  </bean>
  <bean id="PetDAO" scope="singleton" class="test.dao.PetDAOImpl" xmlBean="com.cfuture08.eweb4j.ioc.config.bean.IOCConfigBean">
    <inject ref="" name="" type="" value="" xmlBean="com.cfuture08.eweb4j.ioc.config.bean.Injection"/>
  </bean>
</beans>


dbInfo配置
<?xml version="1.0" encoding="UTF-8"?>

<beans>
  <bean name="myDBInfo" xmlBean="com.cfuture08.eweb4j.orm.dao.config.bean.DBInfoConfigBean">
    <dataBaseType>MYSQL</dataBaseType>
    <jndiName></jndiName>
    <jdbcUtil></jdbcUtil>
    <driverClass>com.mysql.jdbc.Driver</driverClass>
    <jdbcUrl>jdbc:mysql://localhost:3306/test</jdbcUrl>
    <user>root</user>
    <password>root</password>
    <initialPoolSize>3</initialPoolSize>
    <maxPoolSize>50</maxPoolSize>
    <minPoolSize>1</minPoolSize>
    <acquireIncrement>3</acquireIncrement>
    <idleConnectionTestPeriod>60</idleConnectionTestPeriod>
    <maxIdleTime>25000</maxIdleTime>
    <autoCommitOnClose>true</autoCommitOnClose>
    <preferredTestQuery></preferredTestQuery>
    <testConnectionOnCheckout>false</testConnectionOnCheckout>
    <testConnectionOnCheckin>false</testConnectionOnCheckin>
    <acquireRetryAttempts>30</acquireRetryAttempts>
    <acquireRetryDelay>1000</acquireRetryDelay>
    <breakAfterAcquireFailure>false</breakAfterAcquireFailure>
  </bean>
</beans>


eweb4j-satrt-config.xml
<?xml version="1.0" encoding="UTF-8"?>

<beans>
  <bean xmlBean="com.cfuture08.eweb4j.config.bean.ConfigBean">
    <debug>0</debug>
    <ioc xmlBean="com.cfuture08.eweb4j.config.bean.ConfigIOC">
      <open>1</open>
      <debug>true</debug>
      <logFile>ioc.log</logFile>
      <logMaxSize>5</logMaxSize>
      <iocXmlFiles xmlBean="com.cfuture08.eweb4j.config.bean.IOCXmlFiles">
        <path>eweb4j-ioc-config.xml</path>
      </iocXmlFiles>
    </ioc>
    <orm xmlBean="com.cfuture08.eweb4j.config.bean.ConfigORM">
      <open>true</open>
      <debug>true</debug>
      <logFile>orm.log</logFile>
      <logMaxSize>5</logMaxSize>
      <ormXmlFiles xmlBean="com.cfuture08.eweb4j.config.bean.ORMXmlFiles">
        <path></path>
      </ormXmlFiles>
      <dbInfoXmlFiles xmlBean="com.cfuture08.eweb4j.config.bean.DBInfoXmlFiles">
        <path>eweb4j-dbinfo-config.xml</path>
      </dbInfoXmlFiles>
    </orm>
    <mvc xmlBean="com.cfuture08.eweb4j.config.bean.ConfigMVC">
      <open>true</open>
      <debug>true</debug>
      <logFile>mvc.log</logFile>
      <logMaxSize>5</logMaxSize>
      <scanActionPackage>test.controller</scanActionPackage>
      <actionXmlFiles xmlBean="com.cfuture08.eweb4j.config.bean.ActionXmlFile">
        <path></path>
      </actionXmlFiles>
      <interXmlFiles xmlBean="com.cfuture08.eweb4j.config.bean.InterXmlFile">
        <path></path>
      </interXmlFiles>
    </mvc>
  </bean>
</beans>



web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <filter>
	<filter-name>EWeb4JFilter</filter-name>
	<filter-class>com.cfuture08.eweb4j.mvc.EWeb4JFilter</filter-class>
  </filter>
  <filter-mapping>
	<filter-name>EWeb4JFilter</filter-name>
	<url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

分享到:
评论
3 楼 liuxiang00435057 2012-10-18  
能加我QQ吗 124180505,探讨关于springmvc rest url权限控制
2 楼 laiweiweihi 2011-08-13  
KimHo 写道
Controller这块像struts2的风格,不像spring3mvc的风格
参考了springside3的实现么?

ss没有具体看过。
其实我本来是参考struts2风格的,后来发现springMVC,Nutz的风格不错,很喜欢,于是就弄成现在这四不像了。
最新的版本已经改进了很多了,ORM也支持事务模板了。总之都在慢慢改进当中。谢谢你的关注。
1 楼 KimHo 2011-08-13  
Controller这块像struts2的风格,不像spring3mvc的风格
参考了springside3的实现么?

相关推荐

    eweb4j

    eweb4j是一个Java开发框架,它专注于提供高效、轻量级且易于使用的Web应用程序解决方案。这个框架的设计理念是简化开发流程,提高开发效率,同时保持代码的清晰性和可维护性。下面我们将深入探讨eweb4j框架的核心...

    eweb4j最新版本src[附带需要的jar]

    **eweb4j框架详解** `eweb4j`是一个基于Java开发的轻量级Web应用框架,旨在简化Web应用程序的开发过程,提高开发效率。它集成了许多实用功能,如MVC模式、数据访问、安全管理等,为开发者提供了一个高效、易用的...

    java猜数字源码-eweb4j-framework:简单的Java网络框架

    EWeb4J ? = EWeb4J 是一个基于 Servlet/Jdbc 构建的轻量级 Java Web 开发框架。它可以代替 SSH 来开发一个完整的 Web 应用程序。 它专注于 少侵入、少配置、松耦合、RESTful架构风格的 Web 应用程序开发。 EWeb4J ...

    1756-eweb手册

    Rockwell 1756-Eweb模块

    java开源框架下载集合

    EWeb4J是一款专为快速构建企业级Web应用而设计的开源框架。它提供了一种声明式的编程模型,允许开发者通过简单的XML配置文件来定义页面布局、数据绑定逻辑等,极大地简化了Web应用的开发过程。EWeb4J支持多种数据库...

    1756-EWEB.pdf

    1756-EWEB

    在线编辑器(eweb)应用实例

    四、参数说明 EWeb编辑器中,许多功能可以通过设置参数来定制。例如,你可以设置编辑器的主题、语言偏好、自动保存间隔等。实例文档会详细解释这些参数的含义和用途,帮助你根据项目需求调整编辑器配置。 五、文件...

    一个很好的eweb编辑器

    在描述中提到的“eweb编辑器 要改下db中的后缀为asp”,这可能是指在使用eweb编辑器进行网站开发时,需要将数据库连接文件或动态页面文件的扩展名从原本的格式更改为ASP(Active Server Pages)格式。ASP是一种微软...

    eweb.rar_eweb_editor

    EWeb编辑器2.80版本包含大量的预设模板,涵盖多种网站类型,如企业官网、博客、电商等,用户可快速套用模板,进行个性化调整,快速搭建网站框架。 4. **图片和媒体管理**: 内置的图片和多媒体管理功能,让用户...

    eweb 网页编辑器

    7. **模板与预设**:eweb内置多种预设模板,用户可以根据需要选择合适的网页布局,快速搭建网页框架。 8. **代码保存与预览**:编辑完成后,用户可以选择保存HTML代码,或者直接预览网页效果,确保内容符合预期。 ...

    招行民生银企直联demo

    个人学习使用,简单的对接银行的接口,发现都是java版本的,写个.net的demo记录下,简单的对接了下招商银行,主要有付款和交易流水查询等基本的接口开发

    eWeb.rar_eWeb Editor Clie_eWebEditor_eweb editoi_文本修改器_文本编辑器

    《eWeb Editor客户端:在线文本编辑器的深度解析与应用》 eWeb Editor是一款功能强大的在线文本编辑器,尤其在Web开发领域中被广泛应用。它以其便捷的操作界面和丰富的编辑功能,为网络编程人员提供了极大的便利。...

    eweb编辑器,shengcheng

    在线编辑HTML,使用户方便使用编码在线编辑HTML,使用户方便使用编码

    eWEB - literate programming in AsciiDoc-开源

    让 AsciiDoc 成为您的文学编程工具集的一部分。 使用 eWEB,您可以使用嵌入的 WEB 代码片段编织和缠结作为 AsciiDoc 文档编写的文字程序。

    eweb编辑器(带图片上传功能)

    ASP常用的后台编辑器,带图片上传功能 调用方法如下例子: &lt;textarea name="nr" ROWS="20" COLS="70"&gt;%=Server.HTMLEncode(rs("nr"))%&gt;&lt;/textarea&gt; &lt;iframe ID="eWebEditor1" src="../...&lt;/iframe&gt;

    演示:Ruffle Web演示(每晚生成)

    ruffle-demo是如何在您的网站中包含Ruffle的示例。 对于开发人员来说,它也是一个不错的本地测试,可以在Web上本地运行Ruffle。 使用ruffle-demo 托管演示 要立即在线观看此演示,。 它与该目录完全相同,每晚更新...

    e-web editor 3.8

    **eWeb Editor 3.8 全面解析** eWeb Editor 3.8 是一款功能强大的在线HTML编辑器,专为网页内容编辑和管理而设计。它提供了丰富的文本格式化选项,让用户无需深入HTML代码就能轻松创建和编辑网页内容。这款编辑器以...

    高速 Fel表达式引擎

    #### 四、执行机制 - **函数实现**: Fel的所有操作,包括基本运算符(如 +, -, *, /)均通过函数来实现。 - **双引擎支持**: - **解释执行**: 直接对表达式进行求值,适用于动态性强、表达式简单的场景。 - **编译...

    eweb:网站是“ eWEB”项目的一部分

    eWEB - 对手,Emmanuel Carrère 该网站是作为我们 eWEB 项目的一部分创建的,其目的是创建一个文化站点。 我们的选择落在了 Emmanuel Carrère 的《对手》一书中。 然后我们决定创建一个互联网站点,该站点涉及...

Global site tag (gtag.js) - Google Analytics