{"id":18660159,"url":"https://github.com/magiclu550/noyarksystem-web-framework","last_synced_at":"2025-11-06T02:30:31.292Z","repository":{"id":102906255,"uuid":"179506267","full_name":"MagicLu550/NoyarkSystem-web-framework","owner":"MagicLu550","description":"The web framework","archived":false,"fork":false,"pushed_at":"2019-04-06T09:38:12.000Z","size":85,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-27T15:42:57.368Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MagicLu550.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-04T13:47:57.000Z","updated_at":"2022-03-28T18:29:02.000Z","dependencies_parsed_at":"2023-06-15T19:30:39.747Z","dependency_job_id":null,"html_url":"https://github.com/MagicLu550/NoyarkSystem-web-framework","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MagicLu550%2FNoyarkSystem-web-framework","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MagicLu550%2FNoyarkSystem-web-framework/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MagicLu550%2FNoyarkSystem-web-framework/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MagicLu550%2FNoyarkSystem-web-framework/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MagicLu550","download_url":"https://codeload.github.com/MagicLu550/NoyarkSystem-web-framework/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239478683,"owners_count":19645575,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-07T07:42:30.253Z","updated_at":"2025-11-06T02:30:31.224Z","avatar_url":"https://github.com/MagicLu550.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![LICENSE](https://img.shields.io/badge/license-Noyark-green.svg)](NoyarkLICENSE.md)\n![VERSION](https://img.shields.io/badge/version-0.0.2-green.svg)\n![Build](https://img.shields.io/badge/build-passing-green.svg)\n[![en](https://img.shields.io/badge/readme-english-orange.svg)](README_EN.md)\n![logo](logo1.jpeg)\n# Noyark-System Web轻量级框架\n*测试版，目前没有优化代码和标准注释*\n借鉴了`spring`框架风格,作者日常作品\n代码原创\n\n\u003e  如何配置该框架？\n* 首先，在web.xml如下配置\n```xml\n\u003cservlet\u003e\n    \u003cdescription\u003e\u003c/description\u003e\n    \u003cdisplay-name\u003eMainServlet\u003c/display-name\u003e\n    \u003cservlet-name\u003eMainServlet\u003c/servlet-name\u003e\n    \u003cservlet-class\u003enet.noyark.www.servlet.MainServlet\u003c/servlet-class\u003e\n    \u003cinit-param\u003e\n      \u003cparam-name\u003econtextConfigLocation\u003c/param-name\u003e\n      \u003cparam-value\u003eclasspath:noyark.xml\u003c/param-value\u003e\n    \u003c/init-param\u003e\n  \u003c/servlet\u003e\n  \u003cservlet-mapping\u003e\n    \u003cservlet-name\u003eMainServlet\u003c/servlet-name\u003e\n    \u003curl-pattern\u003e*.no\u003c/url-pattern\u003e\n  \u003c/servlet-mapping\u003e\n  \u003cfilter\u003e\n    \u003cdisplay-name\u003eRequestEncodingFilter\u003c/display-name\u003e\n    \u003cfilter-name\u003eRequestEncodingFilter\u003c/filter-name\u003e\n    \u003cfilter-class\u003enet.noyark.www.filter.RequestEncodingFilter\u003c/filter-class\u003e\n   \u003cinit-param\u003e\n     \u003cparam-name\u003eencoding\u003c/param-name\u003e\n     \u003cparam-value\u003eUTF-8\u003c/param-value\u003e\n   \u003c/init-param\u003e\n  \u003c/filter\u003e\n  \u003cfilter-mapping\u003e\n    \u003cfilter-name\u003eRequestEncodingFilter\u003c/filter-name\u003e\n    \u003curl-pattern\u003e/*\u003c/url-pattern\u003e\n  \u003c/filter-mapping\u003e\n```\nservlet的url-pattern是通用路径，访问时，凡是xxx.no都会经过MainServlet进行处理\nservlet中的param-value是noyarksystem配置文件路径,class path:前缀可以获取到resource的classpath路径\n第二个拦截器是设置默认编码，这里配置了utf-8\n* 配置noyark.xml\n在github中，下载配置文件，全套下载即可\n有3个文件夹和一个xml文件，都需要下载\n* 配置pom.xml\n在pom.xml的`denpendencies`配置以下jar包坐标\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003enet.noyark\u003c/groupId\u003e\n  \u003cartifactId\u003eequery-framework\u003c/artifactId\u003e\n  \u003cversion\u003e0.3.0\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n  \u003cgroupId\u003enet.noyark\u003c/groupId\u003e\n  \u003cartifactId\u003enoyark-system\u003c/artifactId\u003e\n  \u003cversion\u003e0.0.2.1\u003c/version\u003e\n\u003c/dependency\u003e \n\u003cdependency\u003e \n      \u003cgroupId\u003edom4j\u003c/groupId\u003e  \n      \u003cartifactId\u003edom4j\u003c/artifactId\u003e  \n      \u003cversion\u003e1.6.1\u003c/version\u003e \n    \u003c/dependency\u003e  \n    \u003c!—  [https://mvnrepository.com/artifact/mysql/mysql-connector-java](https://mvnrepository.com/artifact/mysql/mysql-connector-java)  —\u003e  \n    \u003cdependency\u003e \n      \u003cgroupId\u003emysql\u003c/groupId\u003e  \n      \u003cartifactId\u003emysql-connector-java\u003c/artifactId\u003e  \n      \u003cversion\u003e8.0.15\u003c/version\u003e \n    \u003c/dependency\u003e  \n    \u003cdependency\u003e \n      \u003cgroupId\u003ecommons-dbcp\u003c/groupId\u003e  \n      \u003cartifactId\u003ecommons-dbcp\u003c/artifactId\u003e  \n      \u003cversion\u003e1.4\u003c/version\u003e \n    \u003c/dependency\u003e\n```\n之后配置以下节点\n```xml\n\u003crepositories\u003e\n \u003crepository\u003e\n    \u003cid\u003enexus\u003c/id\u003e\n    \u003cname\u003eTeam Neux Repository\u003c/name\u003e\u003curl\u003e http://www.noyark.net:8081/nexus/content/groups/public/ \u003c/url\u003e\n\u003c/repository\u003e\n\u003c/repositories\u003e\n\u003cpluginRepositories\u003e\n    \u003cpluginRepository\u003e\n      \u003cid\u003enexus\u003c/id\u003e\n      \u003cname\u003eTeam Neux Repository\u003c/name\u003e\n      \u003curl\u003e http://www.noyark.net:8081/nexus/content/groups/public/ \u003c/url\u003e\n    \u003c/pluginRepository\u003e\n \u003c/pluginRepositories\u003e\n```\nnoyark-system环境配置完成\n\u003e 如何在xml中配置bean\n\nnoyark-system支持以下xml-bean配置方式\n`普通配置方式`\n`自身的工厂模式配置` \n`对象工厂模式配置` \n`懒初始化` \n`自动装配` \n`scope装配` \n`指定初始化方法和销毁方法`\n* 普通的配置模式：\n```xml \n\u003cbean id=\"test\" class=\"test.User\"\u003e\u003c/bean\u003e\n```\n同时，允许使用name代替id\n```xml\n\u003cbean name=\"test\" class=\"test.User\"\u003e\u003c/bean\u003e\n```\n* 自身的工厂模式配置\n如果一个类有静态工厂方法，用来初始化对象，可以以下配置方式\n```xml\n\u003cbean id=\"factory\" class=\"java.util.Calendar\" factory-method=\"getInstance\"\u003e\n```\n* 通过其他对象的方法初始化该对象\n如果之前创建了bean且bean拥有方法初始化一个对象，可以使用\n```xml\n\u003cbean id=\"test\" class=\"test.User\"\u003e\n\u003cbean id=\"factory\" factory-bean=\"test\" factory-method=\"getInstance\"\u003e\n```\n* 懒初始化\n所有对象都是在容器开启时就会初始化,如果有些对象不会立即使用，可以使用懒初始化的解决方案\n```xml\n\u003cbean id=\"test\" class=\"test.User\" lazy-init=\"true\"\u003e\n```\n* 自动装配\n自动装配会在整个容器环境中寻找对象，有两种搜索方法\ngetByType getByName ,getByName会在整个环境寻找相同id的bean，getByType会寻找同一个类型的bean\n```xml\n\u003cbean id=\"test\" class=\"test.User\" autowired=\"getByName\"\u003e\n```\n* scope装配\n目前支持protoType，加上该属性后,实例化将不是单一对象，每次getBean都会获得一个新对象\n```xml\n\u003cbean id=\"test\" class=\"test.User\" scope=\"protoType\"\u003e\n```\n* 在装配时可以指定初始化和销毁方法\n```xml\n\u003cbean id=\"test\" class=“test.User” init-method=\"init\" despory-method=\"despory\"\u003e\n```\n\u003e 如何利用注解创建bean\n这里支持使用以下注解创建bean对象\n@Component 通用注解\n@Controller 控制器注解\n@Service 业务层注解\n@Repository DAO等持久层注解\n他们在作用上都是等价的，但是为了语意明显，建议分化使用\n* 如何配置包扫描器\n在使用注解前，必须配置好一个节点，用于扫描和识别注解，在noyark.xml配置\n```xml\n\u003ccontext:component-scan base-package=“net.noyark.www”/\u003e\n```\n`base-package`是基本包路径，该包路径下的全部子包里和该包里带bean注解的类都会被扫描到\n* 如何在类中使用\n```java\npackage net.noyark.www;\n\n@Component\npublic class User{\n}\n```\n使用该注解，默认beanid是user，即类名的首字母小写，如果要制定beanid，可以在注解加入一个value值\n```java\n@Component(\"id\")\n```\n即制定了beanid，其他注解同样等价\n\u003e 如何使用bean\n使用bean需要启动容器，来解析bean，使用以下类：\n```java\nNoyarkAbstractApplicationContext nac_ = new NoyarkApplicationContext(“noyark.xml”,true);\n```\n获取bean：(这里以之前的user bean为例子)\n获取bean两种方式，推荐第二种，在后面表明bean的类型，但是要保证这个bean是这个类型的对象，否则会抛出类型转换异常\n```java\nUser user = (User)(nac.getBean(\"user\"));//需要强制转换\nUser user = nac.getBean(\"user\",User.class);//不需要转换\n```\n\u003e 需要注意：保证每个类有无参构造器，否则无法被实例化\n\n\u003e 如何注入bean中的字段\n* 平常的注入\nNoyark-system可以在不需要构造方法和set方法情况下注入值\n使用property节点注入：实例省略bean中内容\n```xml\n\u003cbean\u003e\n\t\u003cproperty name=\"\" value=\"\"/\u003e\n\u003c/bean\u003e\n```\n其中要保证`name`指定的字段是存在的，否则也会抛出异常\n`value`只能指定基本类型和字符串，如果要导入bean，可以使用`ref`\n```xml\n\u003cbean\u003e\n\t\u003cproperty name=\"\" ref=\"beanid\"\u003e\n\u003c/bean\u003e\n```\n其中对于bean的先后顺序没要求\n* 注入集合\n这里支持集合标签的注入\n需要在property关键字中进行\n```xml\n\u003cbean\u003e\n\t\u003cproperty name=\"\"\u003e\n\t\t\u003clist\u003e\n\t\t\t\u003cvalue\u003evalue\u003c/value\u003e\n\t\t\u003c/list\u003e\n\t\u003c/property\u003e\n\u003c/bean\u003e\n```\nnoyarksystem支持集合注入bean\n```xml\n\u003cbean\u003e\n\t\u003cproperty name=\"\" type=\"泛型类型\"\u003e\n\t\t\u003clist\u003e\n\t\t\t\u003cvalue ref=\"beanid\"/\u003e\n\t\t\u003c/list\u003e\n\t\u003c/property\u003e\n\u003c/bean\u003e\n```\n数组和list的注入方式相同，同时共用array和list节点，他们是等价的，注入数组可以使用这种方式，但是保证类型一致\nnoyarksystem支持set集合，仅将list换成set即可，也支持注入bean\n\nnoyark-system支持map集合注入\n```xml\n\u003cbean\u003e\n\t\u003cproperty name=\"\"\u003e\n\t\t\u003cmap\u003e\n\t\t\t\u003centry key=\"\"\u003e\n\t\t\t\t\u003cvalue\u003e\u003c/value\u003e\n\t\t\t\u003c/entry\u003e\n\t\t\u003c/map\u003e\n\t\u003c/property\u003e\n\u003c/bean\u003e\n```\n```xml\n\u003cbean\u003e\n\t\u003cproperty name=\"\"\u003e\n\t\t\u003cmap\u003e\n\t\t\t\u003centry key=\"\" value=\"\"/\u003e\n\t\t\u003c/map\u003e\n\t\u003c/property\u003e\n\u003c/bean\u003e\n```\n也支持注入bean\n```xml\n\u003cbean\u003e\n\t\u003cproperty name=\"\" key-type=“” value-type=“”\u003e\n\t\t\u003cmap\u003e\n\t\t\t\u003centry key=\"\" ref=“”\u003e\n\t\t\t\u003c/entry\u003e\n\t\t\u003c/map\u003e\n\t\u003c/property\u003e\n\u003c/bean\u003e\n```\n同时，支持Property对象的注入\n```xml\n\u003cbean\u003e\n\u003cproperty name=\"\"\u003e\n\t\u003cprops\u003e\n\t\t\u003cprop key=\"\" value=\"\"\u003e\n\t\u003c/props\u003e\n\u003c/property\u003e\n\u003c/bean\u003e\n```\n也支持构造方法注入：\n```xml\n\u003cbean\u003e\n\t\u003cconstructor-value value=\"\" type=\"\"\u003e\u003c/constructor-value\u003e\n\u003c/bean\u003e\n```\nValue是构造方法属性的值，type是该属性的类型，容器会根据constructor先后顺序和type找到对应的构造方法，并对参数对应类型进行赋值\n* 导入Properties文件，注入到对象\n```xml\n\u003cutil:properties id=“” location=“classpath:xxxx”\u003e\n```\n如何在bean中使用，请看下面的注入表达式\n\u003e 注入时注意，应当确定存在这个属性，并且类型对应\n* 注入表达式：\nnoyark-system支持注入表达式，语法\n`#{bean.property.propertyInside}`\n通过property等的value=‘’“来指定即可\n\n* property对象：beanID.property的name.propertyKey\n* 普通值：beanID.fieldname\n* set，数组，list: beanID.name[index]\n* map值：beanID.mapName.key\n* 导入的properties:propertiesID.key,其中如果有多个点，可以用叹号分隔\n```xml\n#{config.!system.bean.let!}\n```\n* 别名机制\n你可以为一个bean起别名\n```xml\n\u003calias id=\"beanid\" alias=\"alias\"\u003e\n```\n但是之后不能有重复别名名字的bean，且确定之前没有重名的bean属性\n# NoyarkSystem MVC\nnoyarksystem支持mvc功能，基于之前介绍的bean容器和servlet的转发功能实现：\n之前已经提到的以下web.xml配置模式：\n```xml\n\u003cservlet\u003e\n    \u003cdescription\u003e\u003c/description\u003e\n    \u003cdisplay-name\u003eMainServlet\u003c/display-name\u003e\n    \u003cservlet-name\u003eMainServlet\u003c/servlet-name\u003e\n    \u003cservlet-class\u003enet.noyark.www.servlet.MainServlet\u003c/servlet-class\u003e\n    \u003cinit-param\u003e\n      \u003cparam-name\u003econtextConfigLocation\u003c/param-name\u003e\n      \u003cparam-value\u003eclasspath:noyark.xml\u003c/param-value\u003e\n    \u003c/init-param\u003e\n  \u003c/servlet\u003e\n  \u003cservlet-mapping\u003e\n    \u003cservlet-name\u003eMainServlet\u003c/servlet-name\u003e\n    \u003curl-pattern\u003e*.no\u003c/url-pattern\u003e\n  \u003c/servlet-mapping\u003e\n  \u003cfilter\u003e\n    \u003cdisplay-name\u003eRequestEncodingFilter\u003c/display-name\u003e\n    \u003cfilter-name\u003eRequestEncodingFilter\u003c/filter-name\u003e\n    \u003cfilter-class\u003enet.noyark.www.filter.RequestEncodingFilter\u003c/filter-class\u003e\n   \u003cinit-param\u003e\n     \u003cparam-name\u003eencoding\u003c/param-name\u003e\n     \u003cparam-value\u003eUTF-8\u003c/param-value\u003e\n   \u003c/init-param\u003e\n  \u003c/filter\u003e\n  \u003cfilter-mapping\u003e\n    \u003cfilter-name\u003eRequestEncodingFilter\u003c/filter-name\u003e\n    \u003curl-pattern\u003e/*\u003c/url-pattern\u003e\n  \u003c/filter-mapping\u003e\n```\n`指定包路径：`\n将被扫描的包指定好noyark.xml\n```xml\n\u003ccontext:component-scan base-package=“net.noyark.www”/\u003e\n```\n之后即可开始\n* 认识注解\n@RequestMapping\n@AutoWired\n@ExceptionHandle\n- RequestMapping注解的作用\n该注解可以放在两个位置，类上和方法上\n```java\n@Controller\n@RequestMapping(\"start\")\npublic class Controller{\n\t@RequestMapping(\"test.no\")\n\tpublic String test(HttpServletRequest req){\n\t\tSystem.out.println(\"进入test.no\");\n\t\treturn null;\n\t}\n}\n```\n那么路径默认为start/test.no\n如果我们访问http://localhost:8080/项目名/start/test.no\n控制台会输出`进入test.no` 然后404，说明框架配置成功\n关于RequestMapping下的方法:\n目前版本只支持返回String，虽然返回其他对象也不报错，但是`不会起作用` 返回的值就是转发到的路径，如果在返回值之前加`redirect:`，则就是重定向\n加在类上就会以此作为父路径\n- 关于AutoWired注解\n它的作用位置在字段上，可以自动注入这个字段上的值\n```java\n@AutoWired\npublic User user;\n```\n- 关于ExceptionHandle注解\nExceptionHandle注解会在RequestMapping下方法抛出异常时，跳转到ExceptionHandle下方法进行处理，需要指定异常类型或者异常父类类型\n必须要带Exception参数\n```java\n@ExceptionHandle(Exception.class)\npublic String handleException(Exception e){\n\t//...\n\treturn null;\n}\n```\n#### 附文：\n\u003e 如何打开参数识别？\n\u003eeclipse： \n换成jdk1.8以上版本，找到windows\u003epreferences(mac是Eclipse\u003epreferences)\u003ejava\u003eComplier,找到Classfile Generation，打开最后一个选项即可\n\n\u003eidea:\nPreferences -\u003e \"Build, Execution, Deployment\" -\u003e Compiler -\u003e \"Java Compiler\",\"Project bytecode version\"设置为1.8\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmagiclu550%2Fnoyarksystem-web-framework","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmagiclu550%2Fnoyarksystem-web-framework","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmagiclu550%2Fnoyarksystem-web-framework/lists"}