我们利用MVC来建立一个Hello World!的Web应用程序1。首先在项目pom.xml添加ajaxjs-web的JAR包依赖。
<dependency>
<groupId>com.ajaxjs</groupId>
<artifactId>ajaxjs-web</artifactId>
<version>1.2.0</version>
</dependency>
把多个路由封装起来的类称之为控制器。接着我们编写它,在源码目录中新建一个Java文件:HelloWorldController
类,实现IController
接口。在MVC中标识一个类是控制器类非常简单,只需要实现接口Icontroller
即可。如下列HelloWorldController
就被认为是一个控制器。
package com.mysoft.app;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import com.ajaxjs.mvc.controller.IController;
@Path("/SayHello") // 定义URL路径
public class HelloWorldController implements IController {
@GET // 绑定 HTTP GET 方法,用户一访问 GET /SayHello,就会跑到这方法来
public String helloWorld() {
return "html::Hello World!"; // 返回字符串就是要显示的内容,html:: 是固有的前缀,不会显示
}
}
作为一个完整的控制器,还需要开发者定义@Path
注解和起码编写一个方法。注解@Path就是路由路径,不能为空或者空字符串。若为/时表示全部路径都跑到这个控制器里面来。其次是一个带有HTTP方法注解的Java方法。上述例子代码中的@GET
对应helloWorld()
方法,意思是GET请求到/SayHello
这个路径上马上执行helloWorld()
方法,方法返回的String表示输出一段具体的HTML。
一个最简单的路由控制器算写好了,最后一步是简单的配置扫描包名。我们不主张一开始就要初学者面对复杂吓人的配置,连web.xml
都省去了。但无论如何优化约定,都要用户自己配置“唯二”的两处地方:一、组件所在的包,让框架去扫描;二、数据库连接的配置。
全局配置文件site_config.json
约定位于WebContent或WebRoot下的META-INF目录中,打开它修改System.scanPackage
那一项,多个包名“,”分隔,修改为你目标的包名,如本例中的com.mysoft.app,但一般较大的包名即可,如com.mysoft,不然太细了输入多个包名也麻烦。如同文件目录那般,包名也支持递归查找的。
最后跑一下,在IDE里面执行工程,运行服务器,如无意外你会看到控制台输出如插图 4.2所示的日志。
在浏览器中正确的网页内容,如插图 3.10所示。
控制器中每个动作一般都会返回结果作为响应输出,例如当前字符串里html::XXXX
含有前缀“html::”,表示后面表示要输出的HTML字符串。前缀是约定好的,每种情况都不一样。好比html::说的是将前缀后面的内容植入简单的HTML页面body中,如下例所示。
<html>
<meta charset="utf-8" />
<body>Hello World!</body>
</html>
这里的String还可以是其他情况,MvcDispatcher会根据此返回值确定最后以何种视图响应前端,不同类型的前缀如表格 4.1所示。
除了上述约定还可以设置返回void的方法——那不表示不响应,而是表示不返回基于文本(字符串)的HTTP报文,适合在控制resposne对象进行二进制输出、图片输出、文件下载等的时候使用。