1、导入jar包
-- webmvc.jar
-- asm.jar
2、配置核心servlet
<servlet>
<servlet-name>WebServlet</servlet-name>
<servlet-class>
com.cwq.webmvc.core.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>handler-scan</param-name>
<param-value>com.xyz,com.abc</param-value> <!-- 配置包扫描列表,多个包用逗号隔开 -->
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>WebServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
3、handler的定义
handler可以是一个普通的POJO,通过定义一系列的注解使其具备某些功能。
Context Path: /web
Servlet Mapping: *.do
示例1:
@RequestMapping("/Order/.*")
public class OrderHandler {
@RequestMapping(param = "load")
@ForwardUrl("/showOrder.ftl")
public void method1(int uid) // RequestURL: /web/Order/m1.do?uid=2&action=load
{
// do something...
}
@RequestMapping(param = "commond=method2")
@ForwardUrl("/showOrder.ftl")
public void method2(String name) // RequestURL: /web/Order/m1.do?name=张三&commond=method2
{
// do something...
}
}
示例2:
@RequestMapping("/User/.*")
@ForwardUrl("/showUser.ftl")
public class UserHandler {
public void save(User user) // RequestURL: /web/User/save.do?id=2&name=张三
{
// do something...
}
public void load(int id) // RequestURL: /web/User/load/2.do
{
// do something...
}
}
示例3:
@WebHandler
public class ProductHandler {
@RequestMapping("/Product/save")
@ForwardUrl("/showProduct.ftl")
public void save(Product product) // RequestURL: /web/Product/save.do?pid=2&pname=产品1
{
// do something...
}
@RequestMapping("/Product/load")
@ForwardUrl("/showProduct.ftl")
public void load(int pid) // RequestURL: /web/Product/load.do?pid=2
{
// do something...
}
}
注解使用详细说明:
* @RequestMapping:定义在方法级别或类级别
* value: 定义要绑定到该类或方法的url,该url不需要加上ContextPath和ServletMapping。
* param: 定义形式key=value,只有request中有指定的值才满足匹配,如果未指定key,则默认为action,如 param = "save" 等价于 param = "action=save",类似struts
中的DispatchAction。
* method: 定义请求类型的绑定,如 method=RequestMethod.GET,则限定为只有GET请求方式才匹配。
* @ForwardUrl:定义在方法级别或类级别
* value: 定义需跳转的url
* @HandlerInitialize:标识注解,定义在方法级别,标识该方法为handler的初始化方法,在handler中每次请求处理之前都会先执行该方法。
* @HandlerDispose:标识注解,定义在方法级别,在handler中每次请求处理之后都会执行该方法。
* @MethodMapping:定义在方法级别,用于改变方法的绑定名字
* value:默认是以方法名匹配,如 @MethodMapping("newMethod") 将使用newMethod去匹配,而非方法名
* @ModelAttribute:定义在参数级别,定义该参数的值将从ModelMap中获取
* value:定义要获取值的key,如果ModelMap没有指定key对应的值,将抛出异常
* @ParameterConverter:标识注解,定义在方法级别,定义该方法为
* @RequestParam:定义在参数级别,改变参数的绑定名字,
* value:默认是以参数名绑定,如 @RequestParam("newParam") 将使用newParam去匹配,而非参数名
* @SessionAttributes:定义在类级别,指定ModelMap中的哪些值存储在session中
* value:定义定式{"key1","key2"...}
* @WebHandler:标识注解,定义在类级别,标识该类为request handler
* @ReturnKey:定义在方法级别,默认情况下,handler请求处理方法的返回值以'data'为key存储在request中,该注解用于自定义key值
* value:指定返回值新的key值
注意事项:
* 1、尽量不要在一个handler中同时使用基于annotation和REST两种风格的映射,最佳实践是在类级别统一使用@RequestMapping进行url映射,然后在方法级别通过param属性进行进一步分流。
* 2、尽量将绑定的url差异化定义的大一些,避免url出现包含关系,目前出现包含关系的处理方式是:在匹配的前提下,URL的length最大,即为最匹配的。
* 3、对于@RequestMapping的定义,如果出现类级别和类级别、类级别和方法级别、方法级别和方法级别的冲突,均会在servlet初始化时抛出异常。
* 冲突实例:
* 方法级:A、@RequestMapping(param = "method2")
* 方法级:B、@RequestMapping(param = "action=method2")
* 不冲突实例:
* 类级:A、@RequestMapping("/order/Aorder", method = RequestMethod.GET)
* 类级:A、@RequestMapping("/order/Aorder")
* 类级:A、@RequestMapping("/order/Border")
* 方法级:A、@RequestMapping("/order/Border", method = RequestMethod.POST)
但不推荐这样做。
分享到:
相关推荐
在这个"基于Annotation的MVC框架SSH示例"中,我们将探讨如何使用注解(Annotation)来简化SSH框架的配置和实现。 1. **Spring框架**:Spring是核心容器,负责管理应用对象的生命周期和依赖注入。在传统的Spring配置...
NULL 博文链接:https://wc0903.iteye.com/blog/616803
一个非常简单的MVC框架,实现了类似Spring MVC的基本功能。 1、包括自动扫描绑定映射路径,只要在web.xml中指定扫描包,系统启动后会将请求url绑定到指定的处理方法上。如: 在web.xml中定义如下: <param-name>...
以下是关于 Spring 3.0 基于 Annotation 的依赖注入实现的详细说明: 1. **注解驱动的 Bean 定义**: - 使用 `@Component`、`@Service`、`@Repository` 和 `@Controller` 注解,可以直接将类标记为 Spring Bean。...
本文主要介绍了基于Annotation的Java单元测试框架,讨论了Annotation在Java EE中的应用、反射技术的使用和JUnit单元测试框架的结合,建立了一个自动化单元测试框架结构。 一、Annotation概述 Annotation是Java 5中...
基于Annotation的AOP实现是Spring框架的一个重要特性,它极大地简化了AOP的使用。在本篇文章中,我们将深入探讨基于Annotation的AOP实现,特别是动态代理的理念。 首先,了解什么是AOP。AOP的核心概念是“切面”...
S2SH,即Struts2、Spring和Hibernate的组合,是Java Web开发中常用的一个MVC框架。在传统的S2SH应用中,配置文件(如struts.xml、spring.xml、hibernate.cfg.xml等)占据了大量工作量,而基于Annotation的实现则可以...
该项目的核心是基于Java语言实现的MVC架构,采用Annotation注解技术进行实现。项目源码由69个文件组成,涵盖24个类文件、23个Java源文件、7个JSP页面文件、3个XML配置文件以及少量其他类型文件。该项目是jeecg第16期...
在深入探讨Spring框架中基于注解(Annotation)的依赖注入(Dependency Injection,简称DI)实现之前,我们首先需要理解几个核心概念:Spring框架、依赖注入、以及注解本身。 ### Spring框架简介 Spring框架是一个...
- **Controller**: 处理业务逻辑,通常是一个实现了 `org.springframework.web.servlet.mvc.Controller` 或者 `org.springframework.web.bind.annotation.ControllerAdvice` 接口的类。 - **Model**: 表示应用程序的...
例如,下面是一个自定义的 @Tel Annotation 验证: ```java @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface Tel { String message() default "电话号码格式不正确"; Class[] ...
它是Spring MVC配置中的一个便捷元素,用于自动配置基于注解的控制器(@Controller)和数据绑定、异常处理等特性。它会开启对HTTP请求方法(如GET、POST)的自动处理,并且启用像@RequestParam、@PathVariable等注解...
在Spring MVC框架中,`mvc:annotation-driven`和`mvc:message-converters`是两个非常重要的元素,它们在处理基于注解的控制器和数据转换方面起着关键作用。本篇文章将深入探讨这两个组件的工作原理以及如何在实际...
Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建MVC(Model-View-Controller)模式的Web应用程序提供了强大的支持。在本项目中,我们将探讨如何使用Spring MVC、MyBatis和MySQL来搭建一个简单的用户查询...
Spring框架作为一个广泛使用的Java开发框架,提供了强大的依赖注入(Dependency Injection, DI)能力,帮助开发者轻松管理和组织复杂的Java应用。随着Spring 3.0版本的发布,框架引入了基于Annotation的依赖注入机制...
基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能