[TOC]
## 命名规范
>[warning] 控制器的类名首字母必须为大写,统一命名为:**控制器名+Controller**
>[warning] @Controller注解的value值统一为:**应用名.控制器类名**
> 这样做的目的是为了解决多个应用下,类名重名直接使用@Controller会报错的问题
>[warning] @RequestMapping注解的value值统一为:
> 1、类注解为 **/应用名/控制器名(小写)**
> 2、方法注解为 **/方法名(小写)**
> 这样做的目的是为了规范,方便根据url反查到控制器以及方法
```
package cn.lcfms.app.admin.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.lcfms.app.BaseController;
@Controller("index.TestController")
@RequestMapping("/index/test")
public class TestController extends BaseController{
@RequestMapping("/name")
public void name() {
}
}
```
## 继承
1. 一般的控制器可以继承控制器基类**cn.lcfms.app.BaseController**,该类提供两个核心方法,如下,**beforeProtected**方法将在控制器执行前被调用,**afterProtected**方法将在控制器执行后被调用。
```
protected void beforeProtected(HttpServletRequest request,HttpServletResponse response){...}
protected void afterProtected(HttpServletRequest request,HttpServletResponse response,ModelAndView view) throws IOException{...}
```
2. 可以在子类中重写**beforeProtected**方法与**afterProtected**方法,重写之后将自动执行子类的方法,建议重写后使用super首先执行父类的方法,如下:
```
@Override
protected void beforeProtected(HttpServletRequest request, HttpServletResponse response) {
super.beforeProtected(request, response);
//...你需要在控制器被调用前执行的操作
}
@Override
protected void afterProtected(HttpServletRequest request,HttpServletResponse response,ModelAndView view) throws IOException {
super.afterProtected(request, response, view);
//...你需要在控制器被调用后执行的操作
}
```
3. 如果是使用后台管理界面的应用,也可以继承**cn.lcfms.app.admin.controller.AdminBaseController**,继承了该类的控制器可以使用通用视图模板, [查看详细](通用视图模板.md)
## 控制器返回值
### 返回jsp视图
>[info] 遵循SpringMvc规范,返回ModelAndView对象或jsp的文件名字符串
```
@RequestMapping("/name")
public ModelAndView name() {
return new ModelAndView("test");
}
或者
@RequestMapping("/name")
public String name() {
return "test";
}
```
### 返回json字符串
>[info] 为了使书写简便,继承了BaseController的控制器支持直接返回json字符串,不需要写@ResponseBody注解,系统将自动识别json格式的字符串
```
@RequestMapping("/name")
public String name() {
return "{\"code\":1}";
}
或者将内部的双引号去掉
@RequestMapping("/name")
public String name() {
return "{code:1}";
}
```
### 返回xml字符串
>[info] 为了使书写简便,继承了BaseController的控制器支持直接返回jxml字符串,不需要写@ResponseBody注解,系统将自动识别xml格式的字符串
```
@RequestMapping("/name")
public String name() {
return "<xml ... >";
}
```
- 系统入门
- 系统简介
- 目录结构
- 系统配置
- 应用
- 应用
- 控制器
- 模板
- 自定义标签
- 用户信息
- 调试
- 调试模式
- 使用Vardump打印
- 访问数据库
- 数据库配置
- Dao模式
- BaseService模式
- 获取对象
- 插入
- 修改
- 删除
- 查询
- where方法
- column方法
- join方法
- 其他查询方法
- 操作集合
- sql方法
- 查询回调接口
- 使用别名
- 后台验证
- 同步表结构
- 使用事务
- 数据分页
- 通用视图模板
- CommonPageView
- CommonPageLayer
- CommonTreeView
- CommonEditView
- CommonEditLayer
- 日志管理
- 后台菜单
- 权限管理
- CMS
- CMS核心
- CMS仿站工具
- CMS采集工具
- websocket
- UI自动生成器
- 缓存
- 自定义缓存
- 生成静态页面
- 表单
- 上传文件
- 前端验证