# FHTTP: 一个简洁易用的java http框架
**FHTTP抛弃了已有的web服务器,从serversocket开始,
直接构建http服务,从零编写http服务器,并对使用者提供简单的使用方法**
**框架内部所有数据全部使用utf-8编码处理且不支持修改**
[项目地址](https://gitee.com/forestrabbit/fhttp)
version: 1.3.2 and 1.3.3
1.3.2 and 1.3.3修复提交文件名中文乱码问题以及其它一些bug
version: 1.3.1
1.3.1修正了上传文件时的bug
version: 1.3
### 1.3新功能
1.3版本添加了对jwt token的支持,使用方法如下
设置一个验证器
```
response.getJwtBuilder().withClaim("userName", "root").withExpiresAt(
Date.from(LocalDateTime.now().plusHours(1).atZone(ZoneId.systemDefault()).toInstant()
));
response.setJwtPassord("123456789");
```
框架会将生成的token写入http header中的Authorization项目中
读取一个验证器
```
@Token("123456789")
public String handlerMain(Map<String, Claim> claimMap) {
if (claimMap.containsKey(key) && claimMap.get(key).asString().equals(value)) {
return "<h1>hello, world</h1>";
} else {
return "<h1>please login first</h1>";
}
}
```
如果一个mapping方法设置了Token注解,框架会在请求的request头中查找Authorization头,如果
没找到,抛出异常;找到的话,以Token注解的字符串为密码,验证token是否正确,如果正确,在参数中存在Map<String, Claim>类型的情况下将claimMap传给函数,否则返回403
验证失败
1.3版本增加了对http长连接的支持,节省了创建socket的时间
1.3版本增加了@Raw注解,在方法上使用此注解,并在方法参数上使用OutputStream类型参数,可以在方法中
操作socket的输出流,直接写数据,例如
```
@Raw
@Mapping("/image_raw")
public void handleRaw(OutputStream output) throws IOException {
output.write("HTTP/1.1 200 OK\r\nContent-Type: image/jpeg\r\nTransfer-Encoding: chunked\r\n\r\n".getBytes(StandardCharsets.UTF_8));
var buffer = new byte[100];
try (var input = Test2.class.getClassLoader().getResourceAsStream("a.jpg")) {
int n;
while (true) {
assert input != null;
if ((n = input.read(buffer)) == - 1) break;
output.write((Integer.toHexString(n) + "\r\n").getBytes(StandardCharsets.UTF_8));
output.write(buffer, 0, n);
output.write("\r\n".getBytes(StandardCharsets.UTF_8));
}
}
output.write("0\r\n\r\n".getBytes(StandardCharsets.UTF_8));
}
```
使用Raw注解后,框架仍然会将客户端传来的参数进行解析并传递到方法上,
但是,任何与输出流有关的信息都需要手动通过socket输出流设置
1.3版本支持如下方式打jar包
```xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
```
version: 1.2.2
修复上传json的bug,支持查看未经解析的原始上传数据
### 1.2.2新功能
1.2.2 版本支持查看未经解析的原始上传数据
```
byte[] data = request.getRawData();
```
version: 1.2.1
支持post表单上传json格式数据,支持查看上传表单文件的文件名
### 1.2.1新功能
1.2.1 版本查看上传表单文件的文件名
```
request.getFileInputStream(key).getFileName();
```
version: 1.2
版本使用新的方法启动框架并且支持jar运行
### 1.2新功能
1.2 版本使用如下方式启动框架
```
new FHTTP(启动类.class).start();
```
框架会以启动类所在目录为根目录,自动寻找其它类
框架推荐使用如下maven插件打包
```xml
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>Main</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>dependencies/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/dependencies/</outputDirectory>
<includeScope>runtime</includeScope>
<useBaseVersion>true</useBaseVersion>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
```
version: 1.1.2
版本使用更新的方法获取用户上传的文件
示例:获取表单中name为img的文件
```
try (var output = new FileOutputStream("...")) {
try (var input = request.getFileInputStream("img")) {
output.write(input.readAllBytes());
//获取文件的mime类型
String mime = input.getMimeType();
}
}
```
version: 1.1.1
修复默认情况下框架加载内部404, 500页面失败问题
version: 1.1.0
增加404以及500的处理功能
## 404和500
如果没有指定自定义的404以及500处理函数,框架会调用内部自带的一个简陋的404以及500页面,
如果想要进行自定义,可以在Controller中定义一个带有@Status("404 ...")或@Status("500 ...")
的方法,此方法不需要带有@Mapping注解,另外,被标注为404或500的处理函数,必须返回一个html页面。
框架建议,只定义一个404和500处理函数
version: 1.0.1
修复http方法为head时的bug
version: 1.0
## 使用方法
### 启动服务器
首先,在main方法中,需要用以下代码开启一个http服务
```
new FHTTP(启动类.class).start(); //详见1.2版本更新
//new FHTTP("项目类路径").start(); 过时
```
其中,项目类路径非常重要,框架将在这个路径上搜索其它代码,
一般选择main函数所在类的路径作为项目类路径(已过时)
以上代码会默认开启一个监听端口为8080的socket,如果想要更改端口,
请使用FHTTP类的setPort(int port)方法,例如
```
//var fhttp = new FHTTP("项目类路径"); 过时
var fhttp = new FHTTP(启动类.class); //详见1.2版本更新
fhttp.setPort(8000);
```
使用FHTTP的getPort方法可以获得当前监听的端口
### 编写Controller
一旦框架启动,框架会在类路径范围内所有目录下搜索带有@Controller注解的类,
并寻找类中标有@Mapping注解的方法,一旦寻找成功,框架会将http请求中的url对应到相应的方法上,使用方法如下
```java
@Controller
public class Test2 {
@Mapping("/")
public Object handleIndex() {
return something;
}
@Mapping("/x")
public void handleX() {
//TODO
}
}
```
当浏览器访问url为/时,框架将会调用Test2中的handleIndex方法,
当浏览器访问url为/x时,框架将会调用Test2中的handleX方法
Controller注解中也可以写入url,例如
```java
@Controller("/c1")
public class Test2 {
@Mapping("/")
public Object handleIndex() {
return something;
}
@Mapping("/x")
public void handleX() {
//TODO
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Forest有哪些特性? 以Httpclient和OkHttp为后端框架 通过调用本地方法的方式去发送Http请求, 实现了业务逻辑与Http协议之间的解耦 因为针对第三方接口,所以不需要依赖Spring Cloud和任何注册中心 支持所有请求方法:GET, HEAD, OPTIONS, TRACE, POST, DELETE, PUT, PATCH 支持文件上传和下载 支持灵活的模板表达式 支持拦截器处理请求的各个生命周期 支持自定义注解 支持OAuth2验证 支持过滤器来过滤传入的数据 基于注解、配置化的方式定义Http请求 支持Spring和Springboot集成 JSON格式数据序列化和反序列化 XML格式数据序列化和反序列化 Protobuf格式数据序列化和反序列化 JSON、XML或其他类型转换器可以随意扩展和替换 支持JSON转换框架: Fastjson, Jackson, Gson 支持JAXB形式的XML转换 可以通过OnSuccess和OnError接口参数实现请求结果的回调 配置简单,一般只需要@Request一个注解就能完成绝大多数请求的定义 支持异步请求调用
资源推荐
资源详情
资源评论
收起资源包目录
一个简洁的java http框架.rar (92个子文件)
一个简洁的java http框架
新建文本文档.txt 19B
fhttp-main
pom.xml 2KB
src
test
resources
test.jpg 0B
b.jpg 85KB
图片.jpg 134KB
index.html 1KB
java
FHTTPTest.java 452B
test2
Test2.java 5KB
User.java 725B
Test1.java 22B
main
resources
403.html 249B
500.html 271B
404.html 301B
java
WebHandler.java 23KB
models
CheckMime.java 134B
ClassMethod.java 109B
HTTPInputStream.java 2KB
Request.java 1KB
Param.java 121B
Response.java 9KB
MString.java 114B
StringPair.java 71B
FHTTP.java 6KB
annotations
Delete.java 276B
Put.java 273B
MIME.java 332B
Post.java 274B
Status.java 296B
JSON.java 274B
Head.java 274B
Controller.java 309B
Token.java 293B
UrlParam.java 281B
Raw.java 273B
PathParam.java 282B
BodyParam.java 282B
Mapping.java 297B
readme.md 13KB
.idea
jarRepositories.xml 845B
uiDesigner.xml 9KB
vcs.xml 180B
misc.xml 780B
inspectionProfiles
Project_Default.xml 832B
compiler.xml 526B
checkstyle-idea.xml 705B
.gitignore 47B
encodings.xml 144B
target
classes
403.html 249B
500.html 271B
FHTTP.class 8KB
WebHandler.class 18KB
404.html 301B
models
Request.class 2KB
MString.class 296B
HTTPInputStream.class 2KB
ClassMethod.class 2KB
StringPair.class 1KB
Param.class 2KB
Response.class 9KB
CheckMime.class 238B
annotations
MIME.class 416B
Put.class 371B
Status.class 408B
Controller.class 446B
UrlParam.class 384B
Token.class 406B
JSON.class 373B
BodyParam.class 386B
Mapping.class 410B
Delete.class 377B
PathParam.class 386B
Raw.class 371B
Head.class 373B
Post.class 373B
FHTTP-1.3.4.jar 31KB
test-classes
test.jpg 0B
b.jpg 85KB
图片.jpg 134KB
index.html 1KB
FHTTPTest.class 2KB
Test1.class 240B
test2
User.class 1KB
Test2.class 7KB
maven-status
maven-compiler-plugin
compile
default-compile
createdFiles.lst 561B
inputFiles.lst 2KB
testCompile
default-testCompile
createdFiles.lst 63B
inputFiles.lst 239B
surefire-reports
test2.Test2.txt 252B
TEST-test2.Test2.xml 5KB
Test1.txt 246B
TEST-Test1.xml 5KB
maven-archiver
pom.properties 111B
共 92 条
- 1
资源评论
野生的狒狒
- 粉丝: 1632
- 资源: 1667
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功