您的位置:首页 > 编程语言 > Java开发

JWeb框架

2015-10-24 18:00 1106 查看
#============================================

#========= jweb 框架介绍 =============

#========= by:yuanqy =============

#============================================

jweb对外抛露三个抽象类:

1、JWebConfig--(类)用来配置jweb框架

├ configConstant()--(方法)用户常量配置区,可覆盖默认配置和文件配置。(加载顺序:系统默认常量->配置文件常量->用户常量)

└ configPlugin()--(方法)插件配置区,如C3P0,MyBatis,quartz....

2、JWebInterceptor--(类)项目拦截,在项目启动/销毁时的额外操作

├ init()--(方法)项目启动时:可以加载默认数据,比如:从数据库读取配置、菜单、权限...

└ destroy()--(方法)项目关闭时: 可以进行资源销毁操作

3、HandleInterceptor--(类)请求拦截、类似Spring中的HandlerInterceptorAdapter

├ preHandle()--(方法)请求执行之前:可以进行编码、安全控制等一系列处理[重要]

└ afterCompletion()--(方法)请求执行之后:可以根据ex是否为null判断是否发生了异常,进行日志记录、重定向。或赋值操作。

jweb系统配置:

说明:所有配置信息(键值对)都保存在:JWebFilter.constants变量中,配置信息来自于以下三个方面:

1、系统默认配置:(不用管,想改可通过后两种方式覆盖)

constants.put("encoding", "utf-8"); // 默认编码
constants.put("ViewPrefix", "/WEB-INF/jsp/"); // 视图地址
constants.put("ViewSuffix", ".jsp"); // 视图类型
constants.put("component-scan", ""); // 项目启动扫描包,""默认全扫描

2、配置文件:(配置文件怎么写就不说了,说下配置文件的放置位置,如有多个文件可以用分号;分割:)

位置说明:在web.xml配置信息filter中加入

<init-param>
<param-name>propertyFile</param-name><!--名字固定为:propertyFile-->
<!-- <param-value>file:/app.properties</param-value> 放在系统根目录 -->
<!-- <param-value>app.properties</param-value> 放在项目根目录 -->
<!-- <param-value>/app.properties</param-value> 放在项目WEB-INF下 -->
<param-value>classpath:app.properties</param-value><!-- 放在项目ClassPath下 -->
</init-param>

3、实现JWebConfig类并在configConstant()方法中往Map<String, String> constants加入配置信息

jweb注解配置:

1、@JController--[TYPE]控制类注解,该类必须继承Controller类,用于Action路由分发

2、@JAutowired--[FIELD]属性变量注解,比如引用的服务或接口

3、@JTransaction--[METHOD]事务控制,只能用于server方法上,须引人cglib-nodep,依赖Mybatis,

4、@JRemark--[METHOD]接口描述,只能用于mybatis接口方法上,记录日志描述用

5、@JParam--[METHOD]Action方法字段取值,有两种类型的值。1.是URL中的通过下标取,2.是Post参数值,直接取

6、@JTask--[TYPE]Quartz定时器

7、@JValue--[FIELD]获取全局配置文件上下文值

8、@JMcache--[METHOD]Service缓存框架,依赖Mybatis,目前用ConcurrentHashMap,后续集成第三方框架

注解加载顺序说明:

启动时:

a、找到@JController控制类,并进行实例化

b、对实例化的类进行反射查找有@JAutowired的属性变量

c、对有@JAutowired的server进行Cglib动态代理(如果没有cglib包,默认直接实例化,并无法使用Mybatis事务)

d、对有@JAutowired的接口进行JDK动态代理

运行时:

e、对有@JTransaction(必须Cglib)的Server方法,在运行时自动加上事务。

f、对有@JRemark的接口方法,在运行时自动记录日志。

jweb的RESTful风格URL:

对URL的处理以对应不同的Controller,method,param

总共分为下列4种URL格式:

* 1: http://abc.com/controllerKey.html ---> 00

* 2: http://abc.com/controllerKey/param.html ---> 01

* 3: http://abc.com/controllerKey/method.html ---> 10

* 4: http://abc.com/controllerKey/method/param.html ---> 11

注: param可以有多个,以/分割。在Action中以 getParameterURL()中以下标取值

controllerKey为@JController注解内写的值

method为控制类中的方法名[公共方法]

param为参数

例:http://localhost:8080/book/read/1001/5.html ::假意为: 读取书库 里面ID为1001的书籍的第5页

@JController("/book")
public class BookController extends Controller {
public void read(@JParam({1}) int bookId,@JParam({2}) int page){
//String p1=getParameterURL().get(0);
//String p2=getParameterURL().get(1);
//可以获取到p1=1001  p2=5
可以获取到bookId=1001  page=5
}
}


jweb编程规范(建议[不强求]):

1、所有@JController注解的类(即控制层)以:xxxxController.java命名

2、所有Server类(即服务层)以:xxxxServer.java命名

3、所有ajax请求以ajax开头,如:验证用户名称: /ajaxCheckName.html

4、提交操作以Action结尾,公用菜单权限,如:进入修改页面为:/edit.html 提交修改为:/editAction.html 能进修改的页面就有修改的权限。

5、服务层和接口层方法命名规则(服务层可以继承接口层,也可以不继承,无所谓):

listXXXX()--返回list对象

getXXXX()--返回一个对象

addXXXX()--新增操作

delXXXX()--删除操作

editXXXX()--修改操作

#==============================注意点====================================

1、jweb框架使用的过滤器filter进行的请求拦截,对于有服务器端的forward,在web.xml的<filter-mapping>标签中必须加上:

<dispatcher>REQUEST</dispatcher>

<dispatcher>FORWARD</dispatcher>

<dispatcher>INCLUDE</dispatcher>

<dispatcher>EXCEPTION</dispatcher>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet java jweb j2ee