springmvc纯注解启动案例

时间: 2023-08-05 08:46:01 浏览: 53
以下是一个简单的Spring MVC纯注解启动案例: 1. 创建一个Spring MVC配置类`AppConfig`,用于配置视图解析器、处理器映射器和控制器。 ```java @Configuration @EnableWebMvc @ComponentScan(basePackages = "com.example") public class AppConfig implements WebMvcConfigurer { @Override public void configureViewResolvers(ViewResolverRegistry registry) { registry.jsp("/WEB-INF/views/", ".jsp"); } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } @Bean public MyController myController() { return new MyController(); } @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("index"); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()); } @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) { resolvers.add(new MyArgumentResolver()); } @Override public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) { handlers.add(new MyReturnValueHandler()); } } ``` 在上面的配置类中,使用注解`@Configuration`标识为Spring配置类,使用注解`@EnableWebMvc`启用Spring MVC支持,使用注解`@ComponentScan`扫描注解`@Controller`的控制器类。其中,`configureViewResolvers()`方法配置了JSP视图解析器,`configureDefaultServletHandling()`方法启用了默认的Servlet处理器,`myController()`方法定义了一个控制器Bean,`addViewControllers()`方法配置了根路径的视图控制器,`addInterceptors()`方法添加了一个拦截器,`addArgumentResolvers()`方法添加了一个参数解析器,`addReturnValueHandlers()`方法添加了一个返回值处理器。 2. 创建一个控制器类`MyController`,处理`/hello`路径的请求。 ```java @Controller public class MyController { @RequestMapping("/hello") public String hello(Model model) { model.addAttribute("message", "Hello, Spring MVC!"); return "hello"; } } ``` 在上面的控制器类中,使用注解`@Controller`标识为控制器类,`hello()`方法处理`/hello`路径的请求,并将消息添加到模型中,返回名为`hello`的JSP视图。 3. 创建一个拦截器类`MyInterceptor`,拦截所有请求并打印日志。 ```java public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("Request URL: " + request.getRequestURL()); return true; } } ``` 在上面的拦截器类中,实现了`HandlerInterceptor`接口,重写了`preHandle()`方法,在请求处理前打印请求URL。 4. 创建一个参数解析器类`MyArgumentResolver`,用于解析请求参数并注入控制器方法参数。 ```java public class MyArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.getParameterType().equals(MyModel.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { MyModel model = new MyModel(); model.setMessage(webRequest.getParameter("message")); return model; } } ``` 在上面的参数解析器类中,实现了`HandlerMethodArgumentResolver`接口,重写了`supportsParameter()`方法和`resolveArgument()`方法,用于判断是否支持参数类型和解析参数并返回控制器方法参数。 5. 创建一个返回值处理器类`MyReturnValueHandler`,用于处理控制器方法返回值并渲染模型和视图。 ```java public class MyReturnValueHandler implements HandlerMethodReturnValueHandler { @Override public boolean supportsReturnType(MethodParameter returnType) { return returnType.getParameterType().equals(String.class); } @Override public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception { mavContainer.setViewName((String) returnValue); MyModel model = (MyModel) webRequest.getAttribute("myModel", RequestAttributes.SCOPE_REQUEST); mavContainer.getModel().put("message", model.getMessage()); } } ``` 在上面的返回值处理器类中,实现了`HandlerMethodReturnValueHandler`接口,重写了`supportsReturnType()`方法和`handleReturnValue()`方法,用于判断是否支持返回值类型和处理返回值并渲染模型和视图。 6. 在`web.xml`中配置`DispatcherServlet`和`ContextLoaderListener`。 ```xml <web-app> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>myServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextClass</param-name> <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> </init-param> <init-param> <param-name>contextConfigLocation</param-name> <param-value>com.example.AppConfig</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> ``` 在上面的配置中,使用`ContextLoaderListener`加载根配置类`applicationContext.xml`,使用`DispatcherServlet`加载Spring MVC配置类`AppConfig`,并映射到根路径`"/"`。 至此,一个简单的Spring MVC纯注解启动案例就完成了。

相关推荐

最新推荐

recommend-type

springmvc常用注解标签详解

springmvc常用注解标签详解,总结,常用注解,标签详解,springmvc
recommend-type

SpringMVC restful 注解之@RequestBody进行json与object转换

主要介绍了SpringMVC restful 注解之@RequestBody进行json与object转换的相关资料,需要的朋友可以参考下
recommend-type

SpringMvc自定义拦截器(注解)代码实例

主要介绍了SpringMvc自定义拦截器(注解)代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
recommend-type

SpringMVC 学习总结

关于SpringMVC的基础知识点总结,SpringMVC参数绑定6种方式,使用不同的方式跳转页面,后台处理json格式的数据,SpringMVC框架简介,SpringMVC的入门案例等
recommend-type

从SpringMVC迁移到Springboot的方法步骤

本篇文章主要介绍了从SpringMVC迁移到Springboot的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】MATLAB用遗传算法改进粒子群GA-PSO算法

![MATLAB智能算法合集](https://static.fuxi.netease.com/fuxi-official/web/20221101/83f465753fd49c41536a5640367d4340.jpg) # 2.1 遗传算法的原理和实现 遗传算法(GA)是一种受生物进化过程启发的优化算法。它通过模拟自然选择和遗传机制来搜索最优解。 **2.1.1 遗传算法的编码和解码** 编码是将问题空间中的解表示为二进制字符串或其他数据结构的过程。解码是将编码的解转换为问题空间中的实际解的过程。常见的编码方法包括二进制编码、实数编码和树形编码。 **2.1.2 遗传算法的交叉和
recommend-type

openstack的20种接口有哪些

以下是OpenStack的20种API接口: 1. Identity (Keystone) API 2. Compute (Nova) API 3. Networking (Neutron) API 4. Block Storage (Cinder) API 5. Object Storage (Swift) API 6. Image (Glance) API 7. Telemetry (Ceilometer) API 8. Orchestration (Heat) API 9. Database (Trove) API 10. Bare Metal (Ironic) API 11. DNS
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。