DispatcherServlet请求处理流程

  1. 用户向服务器发送请求,请求被SpringMVC的前端控制器DispatcherServlet截获;
  2. DispatcherServlet根据请求的URL,调用HandlerMapping获得对应的Handler以及Handler对应的Interceptor(拦截器),这些会被封装到一个HandlerExecutionChain中返回。
  3. DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter,HandlerAdapter使用Handler处理请求,调用实际处理的方法。
  4. 提取请求中的模型数据,开始执行Handler。填充Handler参数时,根据配置,会进行下列工作:
  • 数据格式化。如将字符串格式化为数字或日期。
  • 数据验证。验证数据的格式、长度,验证结果存储到BindingResult或Error中。
  1. Handler执行完成后,向DispatcherServlet返回一个ModelAndView,ModelAndView中包含视图和模型。
  2. 根据ModelAndView,选择一个合适的ViewResolver(视图解析器)。
  3. ViewResolver结合Model和View来渲染视图,将渲染结果返回给浏览器。

Read More

Java实现xml文件的xsd校验(schema校验)

JDK中的javax.xml包中有能进行schema校验的类库,但只能返回true或false,无法给出确切的错误信息。

Dom4j中给出了几种schema校验的思路,本文实现其中一种。

Dom4j在github上的文档地址是:https://github.com/dom4j/dom4j/wiki/Cookbook

校验时,能够记录schema中所有不匹配的错误,但首先要保证xmL格式正确,否则只输出格式错误信息。

pom文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
<dependencies>
<!-- dom4j XML工具包 -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.4</version>
</dependency>
</dependencies>

Read More

schema与命名空间的使用案例

1、xml如何使用schema

1
2
3
4
5
6
7
8
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
</beans>

解释:

使用SpringAOP实现自定义注解之切入点表达式

使用Spring AOP实现自定义注解时,关键在于切入点PointCut表达式的书写,即通过表达式扫描指定的注解。

以下给出两种写法,这两种写法都可以扫描指定包下的注解。

1、

1
2
3
4
5
6
7
8
/**
* 作用:捕获方法异常,并修改异常返回结果
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ExceptionMessageHandler {

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Aspect
@Component
public class ExceptionAnnotationAspect {

private static final Logger LOG =Logger.getLogger(ExceptionAnnotationAspect.class);

@Around("execution(@com.fish.webcore.annotation.ExceptionMessageHandler * com.fish.webcore..*.*(..))")
public Object exceptionHandler(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
try {
return proceedingJoinPoint.proceed();
} catch (Exception e) {
LOG.error("服务器内部错误!", e);
return JacksonUtil.getExceptionResult(e, "服务器内部错误!");
}
}

}

Read More

Oracle常用语法

DDL修改表结构

1
2
3
4
5
6
--添加字段的语法:
alter table tablename add (column datatype [default value][null/not null],….);
--修改字段的语法:
alter table tablename modify (column datatype [default value][null/not null],….);
--删除字段的语法:
alter table tablename drop (column);

创建序列

1
2
3
4
5
6
7
8
9
-- 创建序列
create sequence Student_stuId_Seq
increment by 1
start with 1
minvalue 1
maxvalue 999999999;

-- 调用序列
insert into Student(stuId,Stuname) values(Student_stuId_Seq.Nextval,'张三');

原文:http://www.cnblogs.com/xielong/p/8950999.html

Read More