JAVA5000行代码什么概念_mvc: 一个不超过5000行代码的,快速,简单,易用的MVC框架。...

一个不超过5000行代码的,快速,简单,易用的MVC框架。

我们的目的是:

让MVC回归其最初的目的。

因简单而快速,超过目前各种主流MVC。

零侵入,零配置,易于测试,并且让开发者感觉不到MVC的存在

可以单独使用,也可以和Spring整合使用。

飞快的json解析,也支持jsp和freemarker(推荐)。

我们的目的不是:

各种标准,各种用法,20+ Annotations, 超强扩展.... SpringMVC做的足够了。

Multipart, 上传这样的需求应该是单独的、通用的,而不是和业务混在一起,邮箱用过吧...

验证,简单的非空验证远远不能满足实际需要,复杂的验证框架做不到。验证应该交给业务逻辑来做,而不是框架。

Getting Started

在此之前,请准备好:

Java JDK 8

Maven3

1.在您的POM中加入一个repository:

Honqun Nexus 3dp

Honqun Repository

http://115.28.55.60:8081/nexus/content/repositories/thirdparty/

true

2.POM中加入依赖

com.github.catstiger

catstiger-mvc

0.1

3.配置web.xml,加入MvcFilter:

MvcFilter

com.github.catstiger.mvc.MvcFilter

basePackage

org.honqun

MvcFilter

/*

4.写一个Service,哦,Controller,随便吧

@Domain //这个标注表示这个类可以响应HTTP请求,URL前缀为/user_service

public class UserService {

/**

* 连同类对应的URL,访问这个方法的URL为/user_service/create

*/

@API

public User create(@Param("id") Long id, @Param("name") String name) {

return null;

}

}

手册

URL映射规则

类用`@Domain`标注,方法用`@API`标注,只有这样,方法才能响应一个URL。

被@Domain的类对应的URL为类名(驼峰命名)小写,单词之间用_分隔,例如:

//这个类的URL前缀为/employee_join_service

@Param

public class EmployeeJoinService{}

被@API标注的函数,对应的URL为:类名URL + / + 方法URL,方法URL为方法名小写单词之间用_分隔。例如:

@Domain

public class EmployeeJoinService{

//访问这个方法的URL为/employee_join_service/join_on

@API

public Employee joinOn(@Param("emp") Employee emp) {

}

}

@Domain和@API都可以自定义URL,他们的value参数用于覆盖缺省的URL规则:

@Domain("/emp")

public class EmployeeJoinService{

//访问这个方法的URL为/emp/join

@API("join")

public Employee joinOn(@Param("emp") Employee emp) {

}

}

输入参数转换

能够自动从HTTP参数转换成各种常用的Java数据类型:

Primitive类型及其Wrapper

String

BigDecimal

BigInteger

java.util.Date,java.sql.Date,格式可以在web.xml中配置用inti-param配置(dateFormat)

普通Java Bean

由上述数据类型组成的数组。

java.util.List,java.util.Set,必须参数化

用@Param标注参数,可以自定义转换规则。

//MyConverterz实现了ValueConverter接口

public User queryByDate(@Param(value= "date", converter = MyConverter.class) Date date){}

方法参数与请求参数对应关系

如果方法参数只有一个,并且是一个JavaBean,那么JavaBean的属性名称与parameter名称一一对应。

如果方法有多个参数,则需要用@Param指出参数名称和parameter名称的对应关系。

如果方法参数是一个JavaBean,而parameter需要与JavaBeann中的某个Beand的属性对应,则可以使用.分隔参数名称。例如:?user.dept.id=1,对应的是User对象的dept属性的id属性。

例如:

@Domain

public class UserService {

/**

* 对应的URL:/user_service/query_user?id=0&username=a&dept.name=tech

*/

@API

public List queryUser(@Param("id") Long id, @Param("username") String username, @Param("dept") Dept dept){

}

}

解析响应

####缺省的解析规则(根据URL扩展名)

URL没有扩展名或者扩展名为.json,直接输出JSON格式的数据。

URL扩展名为.text,.txt, 则直接将方法执行的结果转换为字符串,渲染到HttpServletResponse中。

URL扩展名为.html,.htm,.do,.action:

/WEB-INF/views/下,对应URL的目录中如果有ftl文件,则解析freemarker,并渲染到HttpServletResponse中。

如果没有ftl文件,重定向d(forward)到/WEB-INF/views/下对应的jsp文件。

例如:URL为/user_service/create.htm,对应的模板文件为/WEB-INF/views/user_service/create.ftl或者create.jsp

可以在web.xml中配置模板文件的目录:

MvcFilter

com.github.catstiger.mvc.MvcFilter

pageFolder

/WEB-INF/ftl

####异常处理

可读异常,通常用于处理用户输入错误等,使用com.github.catstiger.mvc.exception.ReadableException抛出。

请求json数据:渲染一个JSON,包括异常说明(message),异常标记(isFailed)等, 例如:

{"errorCode":"-1","failed":true,"msg":"可读异常!"}

请求html数据,以errorMessage为Attribute Name保存在Request中。

后台不会打印异常栈。

不可读异常,通常是系统错误造成,使用RuntimeException抛出

直接返回505错误,异常对象以"javax.servlet.error.exception"保存。

后台记录日志,并打印异常栈。

####自定义解析规则

@API参数reolver指向一个ResponseResolver的实现类,即可实现自定义解析方式:

@API(resolver = MyResolver.class)

public User createUser(@Param("user") User model) {

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值