Spring_MVC
一、
1.文件上传
(1)表单项为FIle
(2)表单提交方式为Post
(3)表单的enctype属性是多部分表单形式,即enctype = "multipart/form-data"。(将表单修改为多部分表单形式,request.getParameter()将失效。请求正文内容将变成多部分形式。)
2.步骤实现
(1)导入相关坐标:FileUpLoad、io;
(2)配置上传解析器(Spring_MVC中配置);
(3)编写上传文件代码;(文件上传时务必获取文件名并添加到上传方法中。upload.jsp中注意添加属性enctype。)
3.拦截器(interceptor)
类似于Servlect中拦截器Filter,依赖于Servlet容器。访问目标资源方法时,进行干预。实现原理是AOP。
filter可以对所有javaWeb工程进行拦截,进行使用。在url-pattern中设置/*之后可以对所有资源进行拦截。拦截器只作用于Spring-MVC,依赖于框架。只会拦截Controller控制器中的方法,jsp、html、css、image等不被拦截。
4.拦截器实现方法
创建类实现接口HandelInterceptor,配置相关设置在Spring_MVC中。
5.异常处理
(1)简单异常处理器:由Spring_MVC提供,对应发生的异常跳转到相关页面。value要被视图解析器解析。
(2)自定义异常处理器:
创建类实现接口“HandlerExceptionReslover”
配置异常处理器:将定义的异常处理器交给Spring容器管理
编写异常页面
## 二、
#### 1.数据响应方式
(1)页面跳转
----直接返回字符串,SpringMVC 默认为转发形式。
----通过ModelAndView对象返回页面,Return ModelAndView、Model和View 能够分别设置值。View表示跳转到的页面(展示数据)。Mod、表示携带过去的数据值(封装数据)。三种方式可以使用,框架注入(Spring框架会帮助注入很多值)、自己创建、分开设置、原始注入Request。
(2)回写数据
----直接返回字符串:第一种为直接以传参形式传入Response 调用 getWrite() 写回。第二种为方法上加上注解 **@ResponseBody**(告诉框架该方法不执行跳转,直接在原页面显示数据、响应数据。**企业应用场景:ajax**) 直接Return所要回写的参数。Json转换工具,将对象转换为字符串。
----返回对象或者集合:**<mvc:annotation-driven>** mvc注解驱动,省去调用 ObjectMapper 进行转换为 String,直接Return 参数即可。
2.SpringMVC的请求-获得请求参数
(1)基本类型参数:业务方法名称与请请求参数名称一致。(尽量使用封装类)SpringMVC进行自动类型转换,参数顺序可变。
(2)POJO类型封装:将对应类型放入方法中作为参数,SpringMVC 自动封装为该对象。
(3)数组类型:同一数组名称下传递多个参数,方法中定义数组名称。(Arrayas.asList 方法调用)
(4)集合类型参数:不能直接获取,需要定义JavaBean将集合作为属性,前端传入请求参数封装到该类中。简化中 @RequestBody 如果想要接受对像时,必须为Json类型。(contentType:"application/json")
3.参数绑定注解
@RequestParam:当请求参数与业务中参数不同时,需要该注解进行协调。
4.自定义类型转换器
SpringMVC默认带有一些转换器
自定义类型转换器开发步骤:
(1)定义转换器类实现日期接口Converter;
(2)配置文件中声明转换器ConversionServiceFactoryBean;
(3)在<annotation-drivern>中
5.SpringMVC相关API
我们定义方法,框架调用方法。
(1)HttpServletRequest
(2)HttpServletResponse
(3)HttpSession
实质上Controller 中的方法只是普通的方法,真正帮我们执行的是SpringMVC框架。
三、
1.基本三层架构环境搭建
javax.servlet-api
javax.servlet.jsp-api
2.监听器解决Spring加载配置文件代码冗余问题
每次从容器中获取Bean都要创建容器,繁琐复杂。因此需要只创建一次,使用时调用即可。
ServletContextListener:web项目启动时,ServletContext对象被创建,加载应用上下文。Listener就会监听web应用的启动。(ServletContext作用域)
3.代码实现
ServletContextEvent是ServletContext一个父类,可以用来获取ServletContext。
web.xml中全局参数获取 ServletContext.getInitParameter
applicationContext 报红在前面添加 classpath: 可以解决。表示从类路径下获取。
4.SpringMvc分析
(1)行为分为共有和特有行为,抽取共有行为简化代码操作。
(2)前端控制器,web框架所共有。POJO普通JAVABean 控制器Controller。
(3)SpringMvc封装了Servlet的框架。对共性的东西进行了封装。
SpringMvc与Servlet的区别:
一个性能好,一个开发效率高,是对另一个的封装。
5.SpringMvc操作步骤
(1)导入SpringMvc坐标
(2)配置Servlet:核心控制器
(3)创建Contreller类和视图页面:创建Controller 创建jsp页面
(4)使用注解配置将Contreller类放入Spring中:@Controller、@RequestMapping
(5)配置SpringMvc核心配置文件Spring_MVC.xml,配置@Contreller注解扫描。
(6)请求
6.代码实现
(1)相关API坐标
spring-web 、 spring-contextx 、spring-api 、spring-webmvc
7.注解分析
(1)RequestMappring:作用于类和方法上。类上为类级别的,访问路径前加类上路径(相对路径)。
method——提交方式 (RequestMethod.提交方式名称)
param——使用该方法必须携带的参数
8.SpringMVC 组件扫描
(1)扫描标签形式
<context:component-scan back-package="所要扫描的包的路径">
Spring相当于SpringMVC的父类,Spring中的数据都可以被SpringMVC访问到。SpringMVC中的数据 不会被父类Spring所访问。
SpringMVC中初始化的与父类相同的数据会覆盖父类中初始化过的数据。
9.SpringMVC的XML配置解析
默认组件均是在 DispatcherServlet.properties 配置文件中配置的,其中"redirect" 表示重定向跳 转、"forward"表示转发跳转。使用方法在COntroller 中 return 前添加。
return 中访问的路径可以被简化缩写,标签中"prefix" 表示名称前缀设置,"suffix" 表示名称后缀设置。 |
|