JAVA5000行代码什么概念_GitHub - catstiger/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) {

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572787.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

33 Java语言基础控制跳转语句标号

1 public class Add9 {2 public static void main(String[] args) {3 4 a:for (int i 1; i <9 ; i) { // 标号为合法的标识符5 System.out.println("\n");6 b:for (int j 1; j <i ; j) {7 8 System.o…

java 配置jmstemplate_Spring JMSTemplate 与 JMS 原生API比较

JMSUtil与Spring JmsTemplate的对比Author&#xff1a;信仰Date&#xff1a;2012-4-20未完待续&#xff0c;截止日期2012-4-20从以下几方面比较JMSUtil和Spring JmsTemplatel 对JNDI的支持l 对ConnectionFactory、Connection、Destination、Session、MessageProducer、Messag…

java微信支付必要参数_微信支付 开发账号体系各参数详解

商户在微信公众平台提交申请资料以及银行账户资料&#xff0c;资料审核通过并签约后&#xff0c;可以获得表6-4所示帐户(包含财付通的相关支付资金账户)&#xff0c;用于公众帐号支付。帐号及作用&#xff1a;appid &#xff1a;公众帐号身份的唯一标识。审核通过后&#xff0c…

MyEclipse10的正确破解方法

无法转载&#xff0c;故给出原文链接&#xff0c;以供需要者。 MyEclipse10的正确破解方法转载于:https://www.cnblogs.com/qbzf-Blog/p/6341400.html

【二分法】- leetcode

275. H-Index II 278. First Bad Version 此题的条件必须是left < right, 否则如果只有一个版本的话&#xff0c;一直跳不出循环&#xff0c; time limitation。转载于:https://www.cnblogs.com/93scarlett/p/6353765.html

mysql referential_constraints_hibernate4.3.8与spring mvc结合遇到的问题

2703 [2015-01-21 16:47:42 ] - [ip, ref, ua, sid]WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 1109, SQLState: 42S022703 [2015-01-21 16:47:42 ] - [ip, ref, ua, sid]ERROR o.h.e.jdbc.spi.SqlExceptionHelper - Unknown table ‘referential_constraints‘ in …

ie11浏览器可以下载java吗_解析:WindowsXP系统能否安装IE11浏览器

现在&#xff0c;IE浏览器可以称得上是市场占有率最高的一款网页浏览器。因为windowsxp是一款比较久的操作系统&#xff0c;所以很多用户都会疑惑在xp上是否能够安装最新版的ie11浏览器。下面&#xff0c;小编就给大家详细解答下该问题。很遗憾的告诉大家&#xff0c;Windows X…

centos uninstall teamviewer11

由于某些原因&#xff0c;centos系统上的teamviewer不能运行。一直没有管它&#xff08;懒&#xff09;。 但是&#xff0c;突然看不下去了。因为每次开机后都自动启动&#xff0c;需要关闭&#xff0c;否则有问题。所以&#xff0c;uninstall。 尝试了很多都失败。尝试的步骤是…

java ajax传输图片_Java使用Ajax实现跨域上传图片功能

说明 &#xff1a;图片服务器是用Nginx搭建的&#xff0c;用的是PHP语言这个功能 需要 用到两个js文件&#xff1a;jquery.js和jQuery.form.jsfunction submitImgSize1Upload() {var postData function( form , callback){var form document.getElementById("upload-for…

opencv调节图片饱和度_OpenCV调整彩色图像的饱和度和亮度

问题如何调整彩色图像的饱和度和亮度解决思路详细步骤&#xff1a;将RGB图像值归一化到[0, 1]然后使用函数cvtColor进行色彩空间的转换接下来可以根据处理灰度图像对比度增强伽马变换或者线性变换调整饱和度和亮度分量最后转换到RGB色彩空间代码# !/usr/bin/env python# -*-enc…

Java并发——线程中断学习

1. 使用interrupt()中断线程当一个线程运行时&#xff0c;另一个线程可以调用对应的Thread对象的interrupt()方法来中断它&#xff0c;该方法只是在目标线程中设置一个标志&#xff0c;表示它已经被中断&#xff0c;并立即返回。这里需要注意的是&#xff0c;如果只是单纯的调用…

python etree创建xml_Python构建XML树结构的实例教程

这篇文章主要介绍了Python构建XML树结构的方法,结合实例形式分析了Python创建与打印xml数结构的实现步骤与相关操作技巧,需要的朋友可以参考下本文实例讲述了Python构建XML树结构的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;1.构建XML元素#encodingutf-8from…

分布式服务框架原理(一)设计和实现

分布式服务框架设计 分布式服务框架一般可以分为以下几个部分&#xff0c; &#xff08;1&#xff09;RPC基础层&#xff1a; 包括底层通信框架&#xff0c;如NIO框架、通信协议&#xff0c;序列化和反序列化协议&#xff0c;以及在这几部分上的封装&#xff0c;屏蔽底层通信细…

or函数 java_Java OptionalInt orElseGet()用法及代码示例

orElseGet(java.util.function.IntSupplier)方法可帮助我们获取此OptionalInt对象中的值。如果此OptionalInt中不存在值&#xff0c;则此方法返回提供函数产生的结果&#xff0c;并作为参数传递用法:public int orElseGet(IntSupplier supplier)参数&#xff1a;此方法接受提供…

ADO.NET高级应用

ADO.NET事务处理(4个步骤) 1.调用SqlConnection对象的BeginTransaction()方法&#xff0c;创建一个SqlTransaction对象&#xff0c;标志事务开始。 2.将创建的SqlTransaction对象分配给要执行的SqlCommand的Transaction属性。 3.调用相应的方法执行SqlCommand命令。 4.调用SqlT…

php日常收获

php1、sprintf 用法&#xff08;晚上写成blog w3cschool可查&#xff09;2、使用thinkphp getfield 方法时只查询一个字段默认返回第一条数据&#xff0c;如果想要返回数组需要写成&#xff1a;$this->getField(id,true); // 获取id数组3、数据分页时配合limit&#xff08;x…

java dfs算法蓝桥杯题_【蓝桥杯省赛JavaB组真题详解】四平方和(2016)_疼疼蛇的博客-CSDN博客...

原文作者&#xff1a;疼疼蛇原文标题&#xff1a;【蓝桥杯省赛JavaB组真题详解】四平方和(2016)发布时间&#xff1a;2021-02-26 15:00:01题目描述四平方和四平方和定理&#xff0c;又称为拉格朗日定理&#xff1a;每个正整数都可以表示为至多4个正整数的平方和。如果把0包括进…

Spring JdbcTemplate查询实例

这里有几个例子向您展示如何使用JdbcTemplate的query()方法来查询或从数据库提取数据。整个项目的目录结构如下&#xff1a;1.查询单行数据这里有两种方法来查询或从数据库中提取单行记录&#xff0c;并将其转换成一个模型类。1.1 自定义RowMapper 在一般情况下&#xff0c;它总…

访问php文件显示500错误,nginx 访问.php文件正常,访问.html文件500错误

#php解析需要配置以下参数181 location ~ \.php|\.html$ {把下面的一行修改为上面的&#xff0c;重启nginx服务器。182 #location ~ \.php$ {183 #root /var/www;184 fastcgi_pass 127.0.0.1:9000;185 fastcgi_index index.php;186 #fastcgi_param SCRIPT_FILENAME /scripts$fa…

下面哪个进制能表述 13*16=244是正确的?)[中国台湾某计算机硬件公司V2010年5月面试题]...

A&#xff0e;5B&#xff0e;7C&#xff0e;9D&#xff0e;11解析&#xff1a;13如果是一个十进制的话&#xff0c;它可以用131*1013*100来表示。现在我们不知道13是几进制&#xff0c;那我们姑且称其X进制。X进制下的13转化为十进制可以用131*X13*X0;表示&#xff1b;X进制下的…