July 2, 2017
使用maven已经是不可避免的事情了,如果你是个java工程师的话。并且,使用maven基本上是你最好的选择。但是我并不喜欢用IDE来集成maven,这算是强迫症,命令行强迫症。
Maven 是什么? # 传说他的功能十分强大,目前我感受到的是如下几个功能:
自动构建项目结构,根据不同的框架需求 自动包依赖管理 自动编译工程 自动启动测试 总而言之就是恰到好处的做了你觉得很麻烦又没有必要自己做的事情。 安装 # 跟JDK是一个思路的,在环境变量中添加M2_HOME即可。
使用 # # 创建Java Web 项目 mvn archetype:generate -DgroupId=com.hello -DartifactId=hello -DarchetypeArtifactId=maven-archetype-webapp # 生成项目 mvn install # 发布到tomcat # 复制生成的./target/xxx.war到tomcat目录下的webapps中去,如果不能访问就重启一下tomcat。 上述是将项目自带的helloworld页面显示出来,我们自己使用会用到一个更核心的方法–配置文件。
pom.xml # 这个配置文件是maven的核心。
在创建好的文件夹中有一个pom.xml 这里的内容分成两部分,一部分是你的项目基本信心,叫啥,啥版本的等等;还有一部分是我们要配置的部分。这一部分又分成好几部分,有依赖关系(dependencies)、生成(build)等等。
下面是一个Maven的基本结构
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- The Basics --> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <packaging>...</packaging> <dependencies>...</dependencies> <parent>...</parent> <dependencyManagement>...</dependencyManagement> <modules>...</modules> <properties>...</properties> <!-- Build Settings --> <build>...</build> <reporting>...</reporting> <!-- More Project Information --> <name>...</name> <description>.
...
July 1, 2017
jersy是一个Web Service的框架,据说是符合RESTful架构的一种框架,这是一种新的思路,而不是新的技术,是对于前端的各种技术而言,所设计的后台实现方式,力图以一种统一的方便的方式组织为前端提供数据。 jersey的官网.
此次接触这个框架是业务需要了,但是,觉得这个框架比较简单,正好也有时间,所以就做一个学习实验,探索一下在资源短缺的情况下如何学习一个新的东西。事实上资源也确实不是很多,这一次主要依靠官方文档学习使用。
原本打算直接上代码的,但是在官网上看了一会后就发现有好多名词解释的问题。那就先来看几个名词。
首先第一个就是JAX-RS,这是JAVA EE6引进的新技术,全称Java api for RESTful Web Service. 主要是使用了注解的形式来简化Web开发和部署。然后跟Jersey的关系是Jersey实现了JAX-RS的框架接口,并且扩展了更多的东西,提供了自己的API。
然后学习Jersey的第一步就是搞懂他的路由方式,在这里就是注解了。
在讲注解之前还有一个不是很重要的名词:POJO(Plain Old Java Object), 称之为简单一般Java对象,这个概念是与JavaBean做区分的。其实没有什么必要,引用Martin Fowler的一句话:
“我们疑惑为什么人们不喜欢在他们的系统中使用普通的对象,我们得到的结论是——普通的对象缺少一个响亮的名字,因此我们给它们起了一个,并且取得了很好的效果。” ——Martin Fowler
所以事实上也就是个名词,所谓简单Java对象就是不包含业务逻辑的对象,一般用于描述数据实体。具体的区别等到写JavaBean的时候就看出来了,这里不讲了。
在我手中的项目使用了其中的两个包,maven代码如下:
<!-- jersey --> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>2.25</version> </dependency> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-client</artifactId> <version>2.25</version> </dependency> 可以看到一个是servlet的Container,另外一个是client客户端。具体的用法,等到用到再说。
注解路由 # 这里用的路由就是JAX-RS的规范。(一次写不完,慢慢补充)。
@Path # 这个注解的原文解释非常好,所以有时间的还是去看一下原文是怎么写的吧,下面我就结合自己理解写一下。
这个@Path注解的内容是一个相对的URI路径,由其注解的类会被相应的路径访问到。
在下面这个例子中可以看到,这个类被一个@Path注解为"printers",当URL路径为/printers的时候就会路由到这个类中,那么这个类有那么多函数,调用那个函数呢?下面还有子路径以及路径的通信方式。
首先HTTP-Methods都是被支持的,常用的有:
@POST @GET @PUT @DELETE 并且对于每个函数都可以进行@Path的进一步注解,有过Web开发经验的人都知道是怎么玩的。如果你的URL路径是/printers/list, 就会定位到getListOfPrinters()函数。同理可知其他的用法。 需要说的可能是如果一个函数没有注解而其他的函数有注解,在路径为printers的时候就会定位那个没有注解的,因为其他的都是精确匹配的,按照精确匹配无法匹配到其他的函数,这个是不精确匹配的,所以就过来了。 对于/,开始和结尾的位置可以加可以不加,都能够被解析。除此以外,这里还有些内容你可能看不太懂,下面会讲。
@Path("/printers") public class PrintersResource { @GET @Produces({"application/json", "application/xml"}) public WebResourceList getMyResources() { ... } @GET @Path("/list") @Produces({"application/json", "application/xml"}) public WebResourceList getListOfPrinters() { .
...
May 17, 2017
这篇文章是对我自己编写的PHP MVC 框架:Husky 的详细说明, 算作是官方说明文档。
项目的GitHub地址
Husky是什么? # Husky 是一个使用PHP语言编写的Web MVC微框架,此项目最初是作者偶然看到的一篇博客中的教学项目。我对项目的代码进行了一些修改和整理,删除了一些不必要的内容,添加了部分设计,目前框架处于第一个版本(Husky-0.9),框架将会长期维护更新。目前只在Linux开发环境下测试可用。
如果你是一个初出茅庐的Web开发者,那么本框架就十分适合你来使用了。相比较很多成熟的PHP框架来说,Husky的体积小,逻辑简单,还没有加入很多集成的自动化功能。整个框架按照一个既定的数据格式实现了MVC开发的需求,更主要的是,在一定程度上说,这个框架还处于比较原始的状态, 这对新手深入了解框架的体系结构十分有利,你可以按照自己的想法对框架进行修改,甚至可能在此基础上改写出更出色的框架。
本框架的开发初衷是为作者所在的学生社团开发网站,多人合作模式下编写网站没有一个框架实在太乱了。但是衡量工作内容,于是决定自己开发一个微框架来辅助网站的开发,就有了这个项目。
你需要掌握什么? # 此框架需要一定的php网站开发经验才能熟练的使用。所以在使用之前,你需要具备以下的知识或能力:
配置apache2 的Rewrite功能 数据库SQL语句 php基本语法 面向对象编程的基本知识 简要了解http协议与请求url链接 清楚的了解软件 MVC 架构的组成 在进一步开发框架之前,你需要进一步具备以下的知识或能力:
apache2 的更多配置选项 熟练掌握http协议 深入理解 MVC 框架结构 熟练使用php语言进行面向对象编程 熟练使用PDO数据库操作库 良好的编程习惯 Husky 做了什么? # Husky 实现了下面几个功能:
唯一的网站入口,url地址重定向 自动化加载MVC控制类,自动化解决类间依赖 过滤SQL注入攻击的安全问题, 使用PDO进行数据库操作 Controller、Model、View模块分离 定义数据参数等的格式 配置环境 # 框架需要软件环境:
Linux apache2 php(>=5.4) mysql 开启apache2 rewrite 功能 # 默认的Ubuntu apache2是没有开启这个功能的,要先去看一下 /etc/apache2/mods-enabled/ 文件夹下是否存在rewrite.load 模块的链接,如果没有,要去看一下 /etc/apache2/mods-available/ 中是否存在对应的文件,如果有,则使用下面的命令建立一个链接到 ../mods-enabled/ 文件夹下:
$ ln -s /etc/apache2/mods-available/rewrite.
...