1)Global.asax里,MvcApplication对象的Application_Start()事件中,调用 RouteConfig.RegisterRoutes(RouteTable.Routes)来注册路由规则。
2)RouteConfig.RegisterRoutes()方法里,给出的默认规则为{controller}/{action}/{id} .
a. 在有特别需要的时候,到这里来修改规则。
b. 未指明Controller默认为HomeContoller,未指定Action默认为Index, 也就是说,直接访问站点时,会默认导航到HomeController下的Index Action.
c. Action后跟的内容会被映射为名为id的参数。 比如: User/Delete/1 会匹配到 UserController的 Delete(int id) 方法。
d. Action分为[HttpGet]和[HttpPost]两种,与HTTP的GET和POST方式对应。 即直接请求的URL只会匹配[HttpGet]方法,而未注明[HttpPost]的方法即默认为[HttpGet]. Post的Action一般会有一个Model参数,MVC会自动将表单里的数据按约定的规则填充到Model实体对象里。 这个约定的规则,就是表单的Name与属性名称有个对应规则。
3)MVC负责按上述规则将执行流程导入合适的Action中,即Controller的某个方法中。
4)Action中,可以直接返回字符串,输出到浏览器, 也可以返回到ActionResult对象, 该对象指向一个View页面,并且附带了一些属性作为传递数据的容器。
这就是model层的设计思路
这就是分层结构,对于较大的web应用来说设计良好的model层绝对是必须的,他可以简化很多代码和数据库 *** 作,而且使用面向借口编程可以自己定制特定的功能。至于你的理解差不多正确,struts2采用valuestack来实现前后台的数据共享传输,他会把值封装到model中,所以action实现implements ModelDriven<T>里的getModel()就可以获取的封装好的参数了。
给你一个自己写的BaseAction:你的action继承他就行了
public class BaseAction<T>implements ModelDriven<T>{
@Resource
protected UserService userService//action需要用到的service都可以在这里注入
protected Class clazz
protected T model
//使用反射获取T的真实类型
public BaseAction(){
try{
Class<T>clazz = null
ParameterizedType pt = (ParameterizedType)this.getClass().getGenericSuperclass()
clazz = (Class<T>) pt.getActualTypeArguments()[0]
this.model = clazz.newInstance()
}catch (Exception e) {
e.printStackTrace()
}
}
public T getModel() {
return model
}
}
MVC分别是Model(模型层) view(视图层) control(控制层)的缩写数据库是属于模型层的。加入在MVC模式中分离一个持久化层,那么Model层就只包括了对象的纯pojo,而数据库此时属于持久化层面.欢迎分享,转载请注明来源:内存溢出
评论列表(0条)