SpringMVC基本操作(2)

1.)使用 POJO 对象绑定请求参数值
? Spring MVC 会按请求参数名和 POJO 属性名进行自动匹 配,自动为该对象填充属性值。支持级联属性。 如:dept.deptId、dept.address.tel 等

2.)处理模型数据
Spring MVC 提供了以下几种途径输出模型数据:
–ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据
–Map 及 Model、ModelMap: 入参为 org.springframework.ui.Model、org.springframework.ui. ModelMap 或 java.uti.Map 时,处理
方法返回时,Map 中的数据会自动添加到模型中。

无论我们的返回值是String类型还是ModelAndView类型,SpringMVC框架执行目标Handler方法之后都会将返回值解析为ModelAndView;
我们放入到Map或者Model、ModelMap中的数据都会放入ModelAndView对象中,作为MOdel使用!

3.)关于重定向
一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理
如果返回的字符串中带 forward: 或 redirect: 前缀 时,SpringMVC 会对他们进行特殊处理:将 forward: 和 redirect: 当成指示符,其后的字符串作为 URL 来处理
–redirect:/success.jsp:会完成一个到 success.jsp 的重定向的操作
–forward:/success.jsp:会完成一个到 success.jsp 的转发操作

可以在spingmvc配置文件中配置 <mvc:view-controller path="/j1sp" view-name="success"/>标签,就可以让我们的请求不经过Controller,直接进入另一个目标页面!
<!-- 但是此时原来访问正常的@RequestMapping URL现在却不能正常访问了,如果想正常访问,需要加入<mvc:annotation-driven>该标签-->
<mvc:annotation-driven></mvc:annotation-driven>

–@SessionAttributes: 将模型中的某个属性暂存到HttpSession 中,以便多个请求之间可以共享这个属性
– @ModelAttribute: 方法入参标注该注解后, 入参的对象 就会放到数据模型中

4.)@ModelAttribute注解用于修饰方法,这个@ModelAttribute注解修饰的方法在我们每次请求目标方法之前都会被执行一次!

5.)SpringMVC确定目标方法POJO类型入参的过程:
1.确定一个key:
1).若目标方法的POJO类型的参数木有使用@ModelAttribute作为修饰,则key为POJO类名第一个字母的小写。
2).若使用@ModelAttribute修饰,则key为@ModelAttribute注解的value属性值.

2.在implicitModel中查找key对应的对象,若存在,则作为入参传入。
1).若在@ModelAttribute标记的方法中在Map保存过,且key和1确定的key一致,则会获取到!
3.在implicitModel中不存在key对应的对象,则检查当前的Handler是否使用@SessionAttribute注解修饰,若使用了该主机,且@SessionAttributes注解的value属性值中包含了key,则会从HttpSession中来获取key所对应的value值,若存在则直接传入到目标方法的入参中,若不存在则将抛出异常。
4.若Handler没有标识@SessionAttributes注解或者@SessionAttributes注解的value值中不包含key,则会通过反射来创建POJO类型的参数,传入为目标方法的参数。

5.SpringMVC会把key和POJO对象保存到implicitModel中,进而会保存到request域中!

注意:[email protected]标记的方法,会在每个目标方法执行之前被SpringMVC调用!
[email protected]注解可以来修饰目标方法POJO类型的入参,其value属性值有如下作用:
1).SpringMVC会使用value属性值在implicitModel中查找对应的对象,若存在则会直接传入到目标方法的入参中
2)SpringMVC会以value为key,POJO类型的对象为value,存入到request域中。

6.)@SessionAttributes注解只能标记在类上,可以使得多次请求共享某部一部分数据!
value:指定放入session域中键
types:指定放入Session域中的对象的字节码!

7.)当出现遍历的情况我们就是用JSTL标签,
当我们使用下拉菜单及单选按钮、多选按钮的时候我们就使用springmvc提供的表单标签,
在表单标签中的path属性值相当于我们原生HTML中的name属性值!

8.)对于静态资源文件如【js/css/图片】的访问我们需要在spingmvc配置文件中配置一个标签,如下所示:
<!-- 1.可以映射静态资源的访问请求 -->
<mvc:default-servlet-handler/>

<mvc:annotation-driven></mvc:annotation-driven>

9.) 
10.)EmployeeCRUD:
SpringMVC处理静态资源【导入js文件】:
1.为什么出现这样的问题:
优雅的REST风格的资源URL不希望带.html或.do等后缀,若将DispatcherServlet请求映射配置为/,
则SpringMVC将捕获WEB容器的所有请求,包括静态资源的请求,SpringMVC会将他们当成一个普通请求处理,因此找不到对应处理器将导致错误。
2.解决:在SpringMVC的配置文件中配置<mvc:default-servlet-handler>

11). 当需要表单回显或者使用下拉列表的时候,就使用form表单标签,而如果使用遍历的标签就使用JSTL标签【导包】!

12.)视图和视图解析器【参见Springmvc如何解析视图流程图片】
?请求处理方法执行完成后,最终返回一个 ModelAndView 对象。对于那些返回 String,View 或 ModeMap 等类型的处理方法,SpringMVC 也会在内部将它们装配成一个 ModelAndView 对象,它包含了逻辑名和模型对象的视图

Spring MVC 借助视图解析器(ViewResolver)得到最终 的视图对象(View),最终的视图可以是 JSP ,也可能是Excel、JFreeChart等各种表现形式的视图

视图
视图的作用是渲染模型数据,将模型里的数据以某种形式呈现给客户。
视图对象由视图解析器负责实例化。由于视图是无状态的,所以他们不会有线程安全的问题。

自定义视图
1.自定义视图,实现view接口或者继承AbstractView抽象类,并加入到IOC容器中。
2.在springmvc配置文件中配置BeanNameViewResolver视图解析器。

13.) 数据格式化标签:
1.在SpringMVC配置文件中配置<mvc:annotation-driven/>
2.在目标POJO对象的属性上加上@NumberFormat 或者 @DateTimeFormat 注解!
@DateTimeFormat
– pattern 属性:类型为字符串。指定解析/格式化字段数据的模式, 如:”yyyy-MM-dd hh:mm:ss”
@NumberFormat
–pattern:类型为 String,自定义样式, 如patter="#,###";

14.)数据类型转换以及数据格式化标签:
数据类型转换【了解】
1. 自定义类型转换器实现Converter<S,T>接口并加入到SpringMVC的IOC容器中,
@Component
public class EmployeeConverter implements Converter<String, Employee>{
@Override
public Employee convert(String source) {
System.out.println(source);
if(source != null){
String[] vals = source.split("-");
if(vals != null && vals.length ==5){
String name = vals[0];
String email = vals[1];
Integer gender = Integer.parseInt(vals[2]);
Department department = new Department();
department.setId(Integer.parseInt(vals[3]));
Employee employee = new Employee(null, name, email, gender, department);
return employee;
}
}
return null;
}
}

2.配置自定义转换器到FormattingConversionServiceFactoryBean工厂中!

<!-- 将ConversionService再作为annotation-driven的一个属性存在! -->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

<!-- 配置ConversionService -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="employeeConverter"/>
</set>
</property>
</bean>

15.)SpringMVC如何处理JSON数据?
1.加入json的3个jar包
jackson-annotations-2.1.5.jar
jackson-core-2.1.5.jar
jackson-databind-2.1.5.jar

2. 编写目标方法,使其返回 JSON 对应的对象或集合
3. 在方法上添加 @ResponseBody 注解

6.)文件上传
Spring MVC 上下文中默认没有为文件上传提供了直接的支持,因 此默认情况下不能处理文件的上传工作,如果想使用 Spring 的文件上传功能,需现在上下文中配置 CommonsMultipartResovler:

1.加入jar包:
commons-fileupload-1.3.1.jar
commons-io-2.4.jar

2.在SpringMVC配置文件中配置CommonsMultipartResovler
<!-- 配置CommonsMultipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<!-- 以字节为单位 -->
<property name="maxUploadSize" value="1024000"></property>
</bean>

2.表单:POST请求,file类型,enctype="multipart/form-data"
文件上传
@RequestMapping(value="testUpload",method=RequestMethod.POST)
public String testUpload(HttpServletRequest request,@RequestParam(value="desc",required=false) String desc,@RequestParam("photo") CommonsMultipartFile file) throws Exception{
ServletContext servletContext = request.getServletContext();
String realPath = servletContext.getRealPath("/upload");
File file1 = new File(realPath);
if(!file1.exists()){
file1.mkdir();
}
OutputStream out;
InputStream in;
//uuid_name.jpg
String prefix = UUID.randomUUID().toString();
prefix = prefix.replace("-","");
String fileName = prefix+"_"+file.getOriginalFilename();
System.out.println(fileName);

out = new FileOutputStream(new File(realPath+"\\"+fileName));
in = file.getInputStream();
IOUtils.copy(in, out);
out.close();
in.close();

return "success";
}

时间: 2024-10-07 20:38:36

SpringMVC基本操作(2)的相关文章

spring项目篇15 --- 商城小项目创建订单以及查看所有订单

深圳肺炎患者突破80了,现在心里慌慌的,不知什么时候返深啊...既来之,则安之! 今天,这个简单的小项目最后一步,创建订单以及查看所有订单状态,我们的订单只需要点击一下付款即可完成支付,没有接入第三方支付.下面计划开始学习mybatis. 因为大多是业务代码,我们直接看就可以 先看dao层,在创建订单的时候,因为设计多表操作,因此需要开启事务 // IOrderDao package com.yang.dao; import com.yang.domain.Car; import com.yan

springmvc的RESTful风格

springmvc对RESTful得支持RESTful架构,就是目前最流行得一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以挣得到越来越多网站的采用. RESTful(即Representational State Transfer变现层状态转换)其实是一个开发理念,是对http 的很好的诠释. 状态转换(State Transfer) 客户端用到的手段,只能是HTTP协议.具体来说就是HTTP协议里面四个表示操作方式的动词:GET/POST/PUT/DELETE,分别对应四中

SpringMVC:学习笔记(3)——REST

SpringMVC-REST 说明 什么是REST REST:即 Representational State Transfer.(资源)表现层状态转化.是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用 ? 资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息.它可以是一段文本.一张图片.一首歌曲.一种服务,总之就是一个具体的存在.可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的 URI .要获取这个资

SpringMVC基本知识及配置,参数的传递

SpringMVC:1.)SpringMVC和Spring的关系: 软件开发的三层架构: web层[表示层.表现层]---->Service层---->Dao[DataBase Access Object]---->数据库! SpringMVC实际上是Spring的一个子模块,我们用SpringMVC来代替这个JavaWEB部分! MVC:也是一种设计模式:M:Model[模型]-->V[View]--->C[Controller]! Model用来封装数据的,View:用来

SpringMVC的一个小整理

1.概述 Spring为展示层提供基于MVC设计理念的优秀web框架,是目前主流的MVC框架,而且从Spring3.0后全面超越了Strust2成为了最优秀的MVC框架,其通过一套注解,让POJO成为处理请求的控制器,无需实现任何的接口,还支持REST风格的URL请求,比其他的MVC框架更具有扩展性和灵活性. 2.快速入门 (1)建立动态WEB 项目 (2)导入jar包 –commons-logging-1.1.3.jar            –spring-aop-4.0.0.RELEASE

SpringMVC RequestMapping &amp; 请求参数

SpringMVC 概述 Spring 为展现层提供的基于 MVC 设计理念的优秀的Web 框架,是目前最主流的 MVC 框架之一 Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架 Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口. 支持 REST 风格的 URL 请求 采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性 HelloWorld 步骤: –加入 jar 包 –在 web.xml 中配置

SpringMVC学习系列(1) 之 初识SpringMVC

1.前言: 与SpringMVC的结识源于个人之前想做一个微信公众账号的管理平台玩玩,既然要做就需要考虑平台的选择问题.由于我的朋友只有一台运行了Linux系统的虚拟主机,且上面还运行有他自己的一些论坛.找不到windows虚拟主机,且肯定不能换朋友主机的系统.刚开始时打算用mono把之前做的.Net MVC项目搭的框架运行一下看看能不能用,发现根本跑不起来(项目用了Spring.NET当时mono和Spring.NET还不兼容,Sping.NET论坛说是由于mono的反射实现机制的问题.好消息

SpringMVC总结篇

SpringMVC是基于MVC设计理念的一款优秀的Web框架,是目前最流行的MVC框架之一,SpringMVC通过一套注解,让POPJ成为处理请求的控制器,而无需实现任何接口,然后使用实现接口的控制器也完全没问题:支持REST风格的URL请求:采用松散耦合架构,比其他MVC框架更具有灵活性和扩展性.关于SpringMVC工程如何搭建请点击:minglisoft.cn/technology 0 XML配置文件 web.xml配置DispatcherServlet,DispatcherServlet

170821-关于SpringMVC的知识点

1.SpringMVC 概述 Spring 为展现层提供的基于 MVC 设计理念的优秀的Web 框架,是目前最主流的 MVC 框架之一  Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架  Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请 求的控制器,而无须实现任何接口.  支持 REST 风格的 URL 请求  采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性 2.SpringMVC之HelloWorld 步骤: – 加入 j