1、创建控制器
每个request都会创建一个控制器实例,用于处理请求,控制器能产生响应并渲染指定的视图。控制器的类名必须以Controller结尾,比如ApplicationController, HelloController等。
2、创建操作
每个控制器可以有多个操作,每个操作将会映射到URI上,比如
public class BookController extends ApplicationController{
public void index(){
}
public void list(){
}
public void show(){
}
}
将会映射到/myweb/book/index, /myweb/book/list, /myweb/book/show。
如果一个操作不存在,将会选择index的操作,比如对于/myweb/book这个URI的请求,将会尝试查找并执行Book控制器中的index动作。
3、隐式对象
控制器因为继承了Controller,所以可以操作Controller中的一些对象,常用的对象如下:
- request
- response
- session
- servletContext
- flash
- controllerName
- actionName
其作用可以从名称中猜到吧。
4、视图
控制器中每个动作一般都会渲染一个视图,默认将使用JSP视图,即对于上面的Book控制器,将会对应使用/WEB-INF/views/book目录中的index.jsp, list.jsp, show.jsp页面。
每个控制器将对于一个目录,目录名称对应控制器名称,但必须是小写的,每个动作将对应一个模板文件,这依赖于动作所使用的视图类型。
框架支持多种视图的类型,并且可以自行扩展,比如可以使用JspView, TextView, JsonView, FreeMarketView, BinaryView等,那么如何使用不同的视图类型呢,这通过动作的返回值进行选择。比如
public JsonView create() throws Exception{
Map<String,Object> result = new HashMap<String,Object>();
result.put("success", true);
//...
return new JsonView(result);
}
这个create动作将使用JsonView视图,也即返回json的字符串信息。其他使用视图的方式类推,如果没有明确指定何种视图,即返回值是void的情况,将会默认使用Jsp视图。