springMVC 4.X入门学习

基础指引与运用

早起的框架:SSH(Structs1.x + Spring + Hibernate),这框架风靡十几年。
后出现Structs2.x,和1无任何技术关联,只是借用名称。常年被称为SSH,专业称S2SH。
基础了解和运用
springMVC在2014-2015Web框架排名第一,占40%的份额。
针对MVC和三层架构,我们的理解是:
MVC - Model+View+Controller(数据模型+视图+控制器)
三层架构 - 展现层 +运用层+数据访问层
但实际上:三层架构中展现层就包含MVC;
展现层:直接给用户展示的界面,和需要给展示的一定操作。(M数据实体,V界面样式,C实现页面呈现逻辑)
运用层:实现业务对应逻辑处理。
数据访问层:底层数据库的增删改查处理。
springMVC中,建立了一个专门的类Model,用来和V之间数据交互,传值。C就是控制器,采用@Controller的类。
springMVC是基于 DispatcherServlet 来开发Web,2.5以下版本采用web.xml;现在采用Servlet3.0+无web.xml,采用 WebApplicationInitializer 接口实现web.xml配置。
实现方式:
1、导入需要的包依赖:

 <dependency>
	    <group>org.springframework</group>
	    <artfactId>spring-webmvc</artfactId>
	    <version>4.1.5.RELEASE</version>
    </dependency>

2、建立自己的配置类

@Configureration
@EnableWebMvc
@ComponetScan("com.ly.web")
pubilc class MyMvcConfig{
	@Bean
	//初始化视图映射
	public InternalResourceViewResolver viewResolver(){
		InternalResourceViewResolver v = new InternalResourceViewResolver ();
		v.setPrefix("/WEB-INF/classes/views");//代码编译后视图路径
		...
		return v;
	}
}

3、将配置类放到WebApplicationInitializer实现类中
重写onStartup方法,参数ServletContext 注册 配置类。
方法内部实现:

{
	AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
	ctx.register(MyMvcConfig.class);
	ctx.setServletContext(servletContext );
	
    Dynamic servlet = servletContext .addServlet("dispatcher",new DispatcherServlet(ctx));
    servlet.adMapping("/");
    servlet.setLoadOnStartup(1);

}

常用注解

springMVC常用注解:
@Controller:声明为spring的一个bean,Dispatcher Servlet(springMVC实现基础)自动扫描加载此类(加载这个注解的方法和AOP的注解注入原理类似。声明被注解的类是控制器。
详情我的博客主题:
> spring4.x学习归纳 - spring基础特性 - 二、面向切面编程(AOP) - 注解方式

@RequestMapping:用来映射Web请求(访问路径和参数)、处理类和方法。可注解到类和方法上。支持request和response作为参数和对应媒体类型配置。
属性:直接添加字符串,默认为路径,类上和方法上进行叠加。若需要配置返回类型,value表示路径,produces表示response的媒体类型和字符集。
请求参数:HttpServletRequest 请求对象,HttpServletResponse响应对象。
DemoBean默认加载类中参数。如:/aa?id=1&name=YungLee2018 ;id、name为DemoBean默认参数,有get、set方法。
双路径同一方法:@RequestMapping(value={"/a1",“a2”},produces=“text/plain;charset=UTF-8”)
@RequestBody:支持将返回值放在response体内(默认加载静态页面)。
返回数据,作用在方法上和返回方法类型前。
@RequestBody:request参数就在request体内,放在参数前面。
@PathVariable:接收路径参数 RequesetMapping("/aa/YungLee2018") @PathVariable String name
@RestController:组合注解,组合@Controller和@ResponseBody,针对只涉及数据交互时使用。

基本配置

基本配置需要我们自定义的配置类(见运用创建的MyMvcConfig )继承WebMvcConfigurerAdapter类。下面对这个继承类重写方法作用进行说明。
1、静态资源映射;创建的js文件、css文件需要被访问到,需要添加映射配置。

重写方法 : 资源路径- src/main/resource/static/js/ly.js

	@Override
    public void adResourceHandlers(ResourceHandlerRegistry registry){
    	registry.addResourceHandler("/static/**") // 对外暴露的访问路径
    	.addResourceLocations("classpath:/sratic/");//文件放置的目录
    } //注册

2、拦截器配置;请求处理前后进行业务处理,类似Servlet的Filter。
定义一个普通的bean(在配置中用@Bean注解引入)实现HandlerInterceptor接口或者继承HandlerInterceptorAdapter类来实现自定义拦截器类。
public class DemoInterceptor extends HandlerInterceptorAdapter{
public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throw Exception{
//请求前
}
public boolean postHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throw Exception{
//请求后
}
}
在配置类中将类转换成bean,并注册为拦截器生效。
@Bean
public DemoInterceptor demoInterceptor(){
return new DemoInterceptor();
}
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(demoInterceptor());
}
3、对于控制器配置统一管理;涉及三个点,异常管理,全局Model管理,WebDataBinder(spring内部将属性对应bean的一种处理机制)。
定义一个统一管理点的类,注上:@ControllerAdvice,这个注解实现注册为bean。对所有RequestMapping有效。
异常处理:类中实现方法,注上@ExceptionHandler(value=Exception.class) //过滤条件,设定捕获异常。当前是所有异常。
全局管理:类中实现方法,注上@ModelAttribute,参数Model添加信息。在Controller类的@RequestMapping通过@ModelAttribute(“键”) String msg 获取。
@InitBinder 控制入参情况(WebDataBinider webDataBinider )可以调用webDataBinider .setDisallowedFields(“id”);不显示入参/ly?id=1;将不做转换为java bean的id属性
4、快捷访问配置
后端只做页面跳转,controller中实现过于麻烦,可以直接在 配置中的一个方法:

addViewController(ViewControllerRegistry registry){
registry.addViewController("/index").setViewName("/index");
}

5、路径匹配参数设置
针对请求:/ly?id1.23 ;.后面数据无法获取。需要配置取消 . 的识别
configurerPathMatch( PathMatchconfigurer configurer ){
configurer.setUseSuffixPatternMatch(false);
}
更多配置:WebMvcConfigurerAdapter ,实现了WebMvcConfigurer接口。

高级配置

1、文件上传
上传初始化配置:MultipartResolver,设置文件上传大小等,对应实体类CommonMultipartResolver
接收文件类:MultipartFile,多文件采用MultipartFile[]
上传文件配置头文件:multipart/form-data
2、自定义的HttpMessageConverter
作用:处理request和response中的数据。
可自定义媒体类型进行解析成对应bean
自定类实现AbstractHttpMessageConverter;

  • 构造函数定义自定义媒体类型; readInternal 请求数据转换; writeInternal 返回数据转换; supports
    定义需要处理的bean;

配置中生效:重写配置中 两个方法:对应转换格式。
configureMessageConverters:覆盖默认,以当前为准。
extendMessageConverters:叠加自定义转换
3、服务器端推送技术
目的:客户端发送请求,服务器端处理完毕后返回信息,中途客户端可以继续处理其他事情无需等待。
1)、SSE。
特定媒体格式:text/event-stream
特定浏览器(有对象EventSource),采用js端推送。
2)、Servlet3.0+异步方法处理
支持异步,在核心启动类(继承WebApplicationInitializer)实现Asyn开启,采用spring管理容器进行变量记录,一个请求发过来没直接用spring的bean对象存储值,服务器处理完完毕后,放回bean中。这里采用一个特定的异步类 DeferredResult 作为返回对象。

springMVC的测试

测试的作用:按需求开发,初版代码的缺陷和后期维护,都需要不断测试中更新,难带每次都要在环境中运行?有个概念叫驱动开发(TTD),根据需求和实际代码缺陷不断迭代和重构,保证代码质量。
测试的包:
spring-test 和 junit
scope 属性为test,这些包只在测试时有用。

测试类注解上:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {MyMvcConfig .class})
@WebAppConfiguration(“src/main/resource”) //静态资源

MockMvc对象bean
@Before 测试前初始化方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值