写出一个你自己的MVC框架-基于对springMVC源码实现和理解(3):数据初始化(二)
2015-03-12 16:09
513 查看
前文已经对SpringMVC中DispatcherServlet数据初始化过程有了一定的认识,下面开始编码:
1.设计自定义注解@MyController:
[java]
view plaincopy
package com.wbh.mymvc.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyController {
}
2.设计自定义注解@MyInterceptor:
[java]
view plaincopy
package com.wbh.mymvc.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyInterceptor {
/**
* 默认全匹配,匹配规则如下
* "/*"项目根目录下匹配,不包含子目录
* "/**"项目下全匹配,包括所有子目录下的请求
* "/Example/*"即Example下的请求匹配,不包含子目录,以此类推
* "!:"后跟的目录为要排除的目录
* @return
*/
String[] mappingPath() default {"/**"};
String interceptionMethod() default "both";//默认拦截GET,POST方法
int index() ;
}
3.设计自定义注解@MyRequestMapping:
[java]
view plaincopy
package com.wbh.mymvc.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyRequestMapping {
String value() default "/";
String method() default "GET"; //默认请求方式为GET
}
4.设计拦截器接口BaseInterceptor:
[java]
view plaincopy
package com.wbh.mymvc.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.wbh.mymvc.ui.MyModelAndView;
/**
* 基本的拦截器接口
* @author wbh
*
*/
public interface BaseInterceptor {
/**
* 先于获得handler
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
boolean beforeHandler(HttpServletRequest request, HttpServletResponse response)
throws Exception;
/**
* handler执行后执行,先于view加载
* @param request
* @param response
* @param handler
* @throws Exception
*/
void afterHandler(HttpServletRequest request, HttpServletResponse response, MyModelAndView modelAndeView)
throws Exception;
/**
* view加载后执行
* @param request
* @param response
* @param handler
* @throws Exception
*/
void afterViewLoad(HttpServletRequest request, HttpServletResponse response)
throws Exception;
}
5.设计拦截器适配器 :
[java]
view plaincopy
package com.wbh.mymvc.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.wbh.mymvc.ui.MyModelAndView;
/**
* 拦截器适配器
* @author wbh
*
*/
public abstract class InterceptorAdapt implements BaseInterceptor {
@Override
public boolean beforeHandler(HttpServletRequest request,
HttpServletResponse response) throws Exception {
return true; //默认允许
}
@Override
public void afterHandler(HttpServletRequest request,
HttpServletResponse response, MyModelAndView modelAndView) throws Exception {
}
@Override
public void afterViewLoad(HttpServletRequest request,
HttpServletResponse response) throws Exception {
}
}
1.设计自定义注解@MyController:
[java]
view plaincopy
package com.wbh.mymvc.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyController {
}
2.设计自定义注解@MyInterceptor:
[java]
view plaincopy
package com.wbh.mymvc.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyInterceptor {
/**
* 默认全匹配,匹配规则如下
* "/*"项目根目录下匹配,不包含子目录
* "/**"项目下全匹配,包括所有子目录下的请求
* "/Example/*"即Example下的请求匹配,不包含子目录,以此类推
* "!:"后跟的目录为要排除的目录
* @return
*/
String[] mappingPath() default {"/**"};
String interceptionMethod() default "both";//默认拦截GET,POST方法
int index() ;
}
3.设计自定义注解@MyRequestMapping:
[java]
view plaincopy
package com.wbh.mymvc.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyRequestMapping {
String value() default "/";
String method() default "GET"; //默认请求方式为GET
}
4.设计拦截器接口BaseInterceptor:
[java]
view plaincopy
package com.wbh.mymvc.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.wbh.mymvc.ui.MyModelAndView;
/**
* 基本的拦截器接口
* @author wbh
*
*/
public interface BaseInterceptor {
/**
* 先于获得handler
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
boolean beforeHandler(HttpServletRequest request, HttpServletResponse response)
throws Exception;
/**
* handler执行后执行,先于view加载
* @param request
* @param response
* @param handler
* @throws Exception
*/
void afterHandler(HttpServletRequest request, HttpServletResponse response, MyModelAndView modelAndeView)
throws Exception;
/**
* view加载后执行
* @param request
* @param response
* @param handler
* @throws Exception
*/
void afterViewLoad(HttpServletRequest request, HttpServletResponse response)
throws Exception;
}
5.设计拦截器适配器 :
[java]
view plaincopy
package com.wbh.mymvc.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.wbh.mymvc.ui.MyModelAndView;
/**
* 拦截器适配器
* @author wbh
*
*/
public abstract class InterceptorAdapt implements BaseInterceptor {
@Override
public boolean beforeHandler(HttpServletRequest request,
HttpServletResponse response) throws Exception {
return true; //默认允许
}
@Override
public void afterHandler(HttpServletRequest request,
HttpServletResponse response, MyModelAndView modelAndView) throws Exception {
}
@Override
public void afterViewLoad(HttpServletRequest request,
HttpServletResponse response) throws Exception {
}
}
相关文章推荐
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(4):数据初始化(三)
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(3):数据初始化(二)
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(2):数据初始化(一)
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(4):数据初始化(三)
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(5):数据初始化(四)
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(2):数据初始化(一)
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(5):数据初始化(四)
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(1):入口所在
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(1):入口所在
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(7):执行,调度和渲染(二)
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(6):执行,调度和渲染(一)
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(6):执行,调度和渲染(一)
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(8):总结和对以后版本的展望
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(8):总结和对以后版本的展望
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(7):执行,调度和渲染(二)
- 一个简单的MVC框架的实现-基于注解的实现
- 基于jquery实现一个滚动的分步注册向导-附源码
- Android实现基于滑动的SQLite数据分页加载技术(附demo源码下载)
- 【分享】分享一个基于SSH实现的简单学生选课系统(附源码)
- SIFT算法实现理解及注释详解(基于Rob Hess源码)