Spring实战4之SpringMVC篇
来源:互联网 发布:淘宝网海外版怎么设置 编辑:程序博客网 时间:2024/06/05 04:19
一、一个请求的过程
二、搭建SpringMVC
1.配置DispatcherServlet
(1)使用Java配置DispatcherServlet
在旧版本中,DispatcherServlet之类的servlet一般在web.xml文件中配置,该文件一般会打包进最后的war包种;但是Spring 3引入了注解,可以在servlet容器中使用Java配置DispatcherServlet,具体的代码列举如下:
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { //根容器 return new Class<?>[] { RootConfig.class }; } @Override protected Class<?>[] getServletConfigClasses() { //Spring mvc容器 return new Class<?>[] { WebConfig.class }; } @Override protected String[] getServletMappings() { //DispatcherServlet映射,从"/"开始 return new String[] { "/" }; } }
(2)AbstractAnnotationConfigDispatcherServletInitializer类分析
AbstractAnnotationConfigDispatcherServletInitializer创建了DispatcherServlet和ContextLoaderListener:
DispatcherServlet仅加载web组件之类的beans,例如controllers(控制器)、view resolvers(视图解析器)和处理器映射(handler mappings);而希望ContextLoaderListener加载应用中的其他类型的beans——例如业务逻辑组件、数据库操作组件等等。
getServletConfigClasses()返回的配置类定义了Spring MVC应用容器中的beans;getRootConfigClasses()返回的配置类定义了Spring应用根容器中的beans。【书中没有说的】:Spring MVC容器是根容器的子容器,子容器可以看到根容器中定义的beans,反之不行。
2.启用SpringMVC
(1)使用Java配置启用SpringMVC
原来我们一般在xml文件中使用元素启动注解驱动的Spring MVC特性。
现在可以使用Java配置启用SpringMVC,具体的代码列举如下:
@Configuration @EnableWebMvc @ComponentScan(value="org.test.spittr.web") public class WebConfig extends WebMvcConfigurerAdapter{ @Bean public ViewResolver viewResolver() { //配置JSP视图解析器 InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); //可以在JSP页面中通过${}访问beans resolver.setExposeContextBeansAsAttributes(true); return resolver; } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); //配置静态文件处理 } }
3.配置RootConfig
@Configuration @ComponentScan(basePackages = {value="org.test.spittr"}, excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class)}) public class RootConfig { }
三、编写一个控制器
@Controller @RequestMapping("/spittles") //定义类级别的请求public class SpittleController { @Autowired private SpittleRepository spittleRepository; @RequestMapping(method = RequestMethod.GET) public String spittles(Model model) { model.addAttribute( spittleRepository.findSpittles(Long.MAX_VALUE, 20)); return "spittles"; } /** * 客户端给控制器的handler以查询参数方式传入参数 */ @RequestMapping(method = RequestMethod.GET) public List<Spittle> spittles( @RequestParam(value = "max", defaultValue = MAX_LONG_AS_STRING) long max, @RequestParam(value = "count", defaultValue = "20") int count) { return spittleRepository.findSpittles(max, count); } /** * 客户端给控制器的handler以路径参数方式传入参数,@PathVariable注解的参数 * 应该和@RequestMapping注解中的占位符名称完全相同; * 如果函数参数也和占位符名称相同,则可以省略@PathVariable注解的参数 */ @RequestMapping(value = "/{spittleId}", method = RequestMethod.GET) public String showSpittle( @PathVariable("spittleId") long spittleId, Model model) { model.addAttribute(spittleRepository.findOne(spittleId)); return "spittle"; } /** * 客户端给控制器的handler以表单参数方式传入参数 * redirect:重定向 */ @RequestMapping(value = "/register", method = RequestMethod.POST) public String processRegistration(Spitter spitter) { spitterRepository.save(spitter); return "redirect:/spitter/" + spitter.getUsername(); } /** * 在Spittr类的定义中规定验证条件后,需要在控制器的处理方法中应用验证条件 */ @RequestMapping(value = "/register", method = RequestMethod.POST) public String processRegistration( @Valid Spitter spitter, Errors errors) { if (errors.hasErrors()) { return "registerForm"; } spitterRepository.save(spitter); return "redirect:/spitter/" + spitter.getUsername(); } }
- Spring实战4之SpringMVC篇
- Spring实战4之SpringMVC高级篇
- spring之springmvc实战篇(二)
- springMVC+spring+MyBatis实战之搭建平台
- 【Spring实战4】10--搭建SpringMVC环境
- 【实战】4-13 Spring及SpringMVC配置
- spring实战4之容器篇
- Spring实战4之AOP篇
- Spring实战4之高级配置篇
- Spring实战4之数据源篇
- Spring实战4之缓存篇
- Spring实战4之Spring Web Flow篇
- Spring实战4之Spring Security
- JPA 实战篇(二)JPA && Spring && SpringMVC 框架整合
- Spring记录之SpringMVC
- Spring之SpringMVC(四)
- 彻底征服 Spring AOP 之 实战篇
- 彻底征服 Spring AOP 之 实战篇
- Android之WiFi相关类:WiFiConfiguration类的子类和属性
- JS中this、new、apply和call详解
- JDBC-ODBC访问数据库,JDBC访问数据库
- EAS BOS 在list界面增加过滤、排序及删除默认的过滤条件,及右键弹出
- Kubernetes
- Spring实战4之SpringMVC篇
- Struts2中ActionContextCleanUp作用
- DB2 执行Sql 语句中时的with ur
- 解决eclipse调试c++程序出现“No source file named” error
- 基于bootstrap的前端分页。带省略号和上下页。
- Android:TextView
- 公共网络开放的WebService接口
- java案例-实现斗地主游戏案例
- jQuery Validate 修改错误显示样式为tooltip