一、主要目的

  自定义JavaWeb框架测试。

  框架的功能:支持JavaWeb的表单上传、文件上传、Cookie获取设置、请求转发、会话管理、过滤器;

  框架特点:用1个jar文件和项目集成到一起。

  缺点:不支持动态HTML的模板页面。

  框架项目路径:

https://gitee.com/hujunfeng123456/java-web

 开源项目主页:

二、框架使用测试

 1、克隆项目到本地

2、把"java-web-1.1.jar"依赖文件放入新建的项目

3、添加处理器类

  假设是MainHandler类,需要继承AbstractHandler类:


import org.hujunfeng.entity.HttpRequest;
import org.hujunfeng.entity.HttpResponse;
import org.hujunfeng.entity.Session;
import org.hujunfeng.impl.AbstractHandler;

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

public class MainHandler extends AbstractHandler {

    @Override
    public void init() {
        System.out.println("---------MainHandler初始化-----------");
    }

    @Override
    public void doGet(HttpRequest httpRequest, HttpResponse httpResponse) {
        // 设置响应码为200        
        httpResponse.setCode(200);

        // 设置内容类别为HTML
        httpResponse.setContentType("text/html; charset=UTF-8");
        String body = "" +
                "<html>" +
                "    <head>" +
                "       <title>Hello</title>" +
                "    </head>" +
                "    <body>" +
                "        <p>Hello World!</p>" +
                "    </body>" +
                "</html>";

        try {
            // 获得响应体的字节序列
            byte[] data = body.getBytes("UTF-8");

            // 设置内容长度
            httpResponse.setContentLength(data.length);

            // 获得内容的输出流
            OutputStream output = httpResponse.getBodyOutput();
            output.write(data);
            output.flush();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void destroy() {

    }
}

  如图:

4、添加测试类

import org.hujunfeng.HttpContainer;
import org.hujunfeng.entity.Application;


public class Test {

    public static void main(String[] args) {
        // 1、创建容器类,端口是8080
        HttpContainer container = new HttpContainer(8080);

        // 设置网络读取的超时是2000毫秒
        container.setReadTimeout(2000);

        // 2、创建应用程序类,名字是"/hu"
        Application app = new Application("/hu");

        // 3、创建MainHandler对象
        MainHandler handler = new MainHandler();
        // 设置映射路径
        handler.setMapping("/index");

        // 4、添加处理器
        app.addHandler(handler);

        // 5、把程序添加到容器中
        container.addApp(app);

        // 6、启动容器
        container.run();
    }
}

 如图:

三、执行和访问测试

 1、执行Test类

 2、浏览器访问链接"http://127.0.0.1:8080/hu/index"

四、框架的主要接口

 (一)HttpContainer容器类的接口

 1、构造方法:public HttpContainer(int 端口号)

 2、设置读取超时

void setReadTimeout(long  超时时间)

 3、添加应用程序

void addApp(Application  app)

 4、添加配置

  配置类支持设置文件最大上传大小、静态资源目录。

void setConfig(HttpConfig  config)

 

(二)Application应用程序的主要接口

// 获取属性

Object getAttribute(String var1)

// 设置属性

void setAttribute(String key, Object value)

// 获取会话对象 

Session getSession(String var1)

// 添加处理器

void addHandler(Handler handler)

// 添加过滤器

void addFilter(Filter filter)

(三)HttpRequest请求类的主要接口

// 获取请求方法
String getMethod();

// 获取请求路径

String getResource();

// 获取查询路径

String getQueryString();

// 获取上下文路径

String getContextPath();

// 获取Cookie

Cookie getCookie(String var1);

// 获取请求参数

String getParameter(String var1);

// 获取请求头

String getHeader(String var1);

// 获取文件上传域    

Part getPart(String var1);

// 获取多选文件上传域    

List<Part> getMultiPart(String var1);

// 设置请求域

void setAttribute(String var1, Object var2);

// 获取请求域值

Object getAttribute(String var1);

// 转发请求

void forward(String 映射路径, HttpRequest var2, HttpResponse var3);

// 获取会话对象

Session getSession();

(四)HttpResponse响应类的主要接口

// 设置响应字符集   

void setCharset(String var1);

// 设置响应类别    

void setContentType(String var1);

// 设置响应码    

void setCode(int var1);

// 设置状态消息    

void setMessage(String var1);

// 设置内容长度    

void setContentLength(long var1);

// 设置响应头    

void setHeader(String var1, String var2);

// 获取响应体的内容输出流

OutputStream getBodyOutput();

// 获取响应体的字符打印器    

PrintWriter getBodyWriter();

// 添加一个Cookie对象

void addCookie(Cookie var1);

// 重定向请求

void sendDirect(String var1);

五、总结

  1、基本满足设计要求。

  2、能轻量级的综合到项目里,不需要复杂的容器。

  3、直接启动项目就能测试WEB服务,节省时间。

  4、目前不支持HTTPS协议,内部用的是java.net.ServerSocket类。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐