2023年6月21日发(作者:)

SSM学习总结⼀、Spring学习1. Spring是⼀个开源框架2. Spring为简化企业级开发⽽⽣,使⽤Spring,JavaBean就可以实现很多以前要靠EJB才能实现的功能。同样的功能,在EJB中要通过繁琐的配置和复杂的代码才能够实现,⽽在Spring中却⾮常的优雅和简洁。3. Spring是⼀个IOC(DI)和AOP容器框架。4. Spring的优良特性① ⾮侵⼊式:基于Spring开发的应⽤中的对象可以不依赖于Spring的API② 依赖注⼊:DI——Dependency Injection,反转控制(IOC)最经典的实现。③ ⾯向切⾯编程:Aspect Oriented Programming——AOP④ 容器:Spring是⼀个容器,因为它包含并且管理应⽤对象的⽣命周期⑤ 组件化:Spring实现了使⽤简单的组件配置组合成⼀个复杂的应⽤。在 Spring 中可以使⽤XML和Java注解组合这些对象。5. ⼀站式:在IOC和AOP的基础上可以整合各种企业应⽤的开源框架和优秀的第三⽅类库(实际上Spring ⾃⾝也提供了表述层的SpringMVC和持久层的Spring JDBC)。1、Factory BeanSpring中有两种类型的bean,⼀种是普通bean,另⼀种是⼯⼚bean,即FactoryBean。⼯⼚bean跟普通bean不同,其返回的对象不是指定类的⼀个实例,其返回的是该⼯ ⼚bean的getObject⽅法所返回的对象。⼯⼚bean必须实现yBean接⼝。2、bean的作⽤域bean的作⽤域参数主要分为4个singleton: 单例的(默认值), 在整个IOC容器中只能存在⼀个bean的对象. ⽽且在IOC容器对象被创建时,就创建单例的bean的对象. 后续每次通过getBean()⽅法获取bean对象时,返回的都是同⼀个对象.prototype: 原型的/多例的 在整个IOC容器中可有多个bean的对象。 在IOC容器对象被创建时, 不会创建原型的bean的对象。 ⽽是等到没次通过getBean()⽅法获取bean对象时,才会创建⼀个新的bean对象返回.request: ⼀次请求对应⼀个bean对象session: ⼀次会话对应⼀个bean对象 ApplicationContext ctx =

new ClassPathXmlApplicationContext(""); Car car1 = n("car",); Car car2 = n("car",); n(car1 == car2); // true

3、⾃动装配1. 根据类型⾃动装配:将类型匹配的bean作为属性注⼊到另⼀个bean中。若IOC容器中有多个与⽬标bean类型⼀致的bean,Spring将⽆法判定哪个bean最合适该属性,所以不能执⾏⾃动装配2. 根据名称⾃动装配:必须将⽬标bean的名称和属性名设置的完全相同3. 通过构造器⾃动装配:当bean中存在多个构造器时,此种⾃动装配⽅式将会很复杂。不推荐使⽤。 byName: 使⽤bean的属性名与IOC容器中的id值进⾏匹配. 匹配成功则装配成功.

byType: 使⽤bean的属性的类型与IOC容器中的class进⾏匹配。 如果唯⼀匹配则装配成功 如果匹配到多个兼容类型的bean。则跑出异常。最多使⽤注解的⽅式,默认是bytype3) @Autowired注解①根据类型实现⾃动装配。②构造器、普通字段(即使是⾮public)、⼀切具有参数的⽅法都可以应⽤@Autowired 注解③默认情况下,所有使⽤@Autowired注解的属性都需要被设置。当Spring找不到匹 配的bean装配属性时,会抛出异常。④若某⼀属性允许不被设置,可以设置@Autowired注解的required属性为 false⑤默认情况下,当IOC容器⾥存在多个类型兼容的bean时,Spring会尝试匹配bean 的id值是否与变量名相同,如果相同则进⾏装配。如果bean的id值不相同,通过类 型的⾃动装配将⽆法⼯作。此时可以在@Qualifier注解⾥提供bean的名称。Spring 甚⾄允许在⽅法的形参上标注@Qualifiter注解以指定注⼊bean的名称。 ⑥@Autowired注解也可以应⽤在数组类型的属性上,此时Spring将会把所有匹配的bean进⾏⾃动装配。⑦@Autowired注解也可以应⽤在集合属性上,此时Spring读取该集合的类型信息,然后⾃动装配所有与之兼容的bean。⑧@Autowired注解⽤在上时,若该Map的键值为String,那么 Spring将⾃动装配与值类型兼容的bean作为值,并以bean的id值作为键。4、DI和AOPDI从上⾯可以感受出来就是⼀个新的对象在获取别的对象的时候可以通过容器框架来帮我们获取具体值,当把类声明成组件之后⼯具类会直接帮我们⽣成好,⾃动装配提供给我们所需的对象的值。这部分还是⾯向对象的部分只是在AOP则是⾯向对象编程的进阶版,⾯向切⾯编程,利⽤动态代理的思想,具体实现不需要我们来进⾏代理,⽤户只需要将被代理类告诉给框架就可以⾃动实现代理。将所有对象⽅法按层级划分。4.1 aspectjAspectJ:Java社区⾥最完整最流⾏的AOP框架。在Spring2.0以上版本中,可以使⽤基于AspectJ注解或基于XML配置的AOP。 /** *

声明切⼊点表达式 */ @Pointcut("execution(* tion.*.*(..))") public void declarePointCut() {}

/** *

前置通知:

在⽬标⽅法(连接点)执⾏之前执⾏.

*/ @Before("execution(public int (int,int))") public void beforeMethod(JoinPoint joinPoint) { //获取⽅法的参数 Object [] args = s(); //⽅法的名字 String methodName = nature().getName();

n("LoggingAspect==> The method "+methodName+" begin with "+ (args)); }

/** *

后置通知:

在⽬标⽅法执⾏之后执⾏,

不管⽬标⽅法有没有抛出异常.

不能获取⽅法的结果 * * tion.*.*(..) * * :

任意修饰符

任意返回值 * * :

任意类 * * :

任意⽅法 * ..:

任意参数列表 *

*

连接点对象: JoinPoint */

//@After("execution(* tion.*.*(..))") @After("declarePointCut()") public void afterMethod(JoinPoint joinPoint) { //⽅法的名字 String methodName = nature().getName(); n("LoggingAspect==> The method " + methodName +" ends .");

}5、JDBCtemplates * queryForObject(): * 1. 查询单⾏数据 返回⼀个对象 * 2. 查询单值 返回单个值 * batchUpdate(): 批量增删改 * update(): 增删改操作*

5.1具名参数的JdbcTemplate配置⽅式

id="namedTemplate"

class="arameterJdbcTemplate"> 使⽤String sql = "INSERT INTO depts (dept_name) VALUES (:deptName)";Department department = new Department(null, "YYY", null);SqlParameterSource sqlParameterSource =

new BeanPropertySqlParameterSource(department);(sql, sqlParameterSource);5.2事务为了保证数据的完整性和⼀致性使⽤事务使⽤⽅式

@Transactional //对当前类中所有的⽅法都起作⽤@Servicepublic class BookShopServiceImpl implements BookShopService {

@Autowired private BookShopDao bookShopDao ;

/** *

事务属性:

* 1.

事务的传播⾏为 propagation:

⼀个事务⽅法被另外⼀个事务⽅法调⽤时,当前的事务如何使⽤事务.

* ED

默认值.

使⽤调⽤者的事务.

* ES_NEW

将调⽤者的事务挂起,

重新开启事务来使⽤.

* 2.

事务的隔离级别 isolation * 1

读未提交

脏读 * 2

读已提交

不可重复读 * 4

可重复读

幻读 * 8

串⾏化

效率低。 * 3.

事务的回滚与不回滚

默认情况下, Spring会对所有的运⾏时异常进⾏事务回滚. * rollbackFor

* rollbackForClassName * noRollbackFor * noRollbackForClassName * 4.

事务的只读设置: * readOnly

* true:

只读

代表着只会对数据库进⾏读取操作,

不会有修改的操作. *

如果确保当前的事务只有读取操作,就有必要设置为只读,可以帮助数据库 *

引擎优化事务

* false:

⾮只读

不仅会读取数据还会有修改操作。

* 5.

事务的超时设置:

设置事务在强制回滚之前可以占⽤的时间.

* timeout:

*

*/

//只对当前的⽅法起作⽤ @Transactional(propagation=ES_NEW, isolation=_COMMITTED, /* noRollbackFor={}*/ readOnly=false, timeout=3)

public void buyBook(String username, String isbn) {

/*try { (5000); } catch (InterruptedException e) { tackTrace(); }*/

Integer price = iceByIsbn(isbn);

Stock(isbn);

UserAccount(username, price);

}⼆、Springmvc学习controller=handler 控制器1、RequestMapping映射请求占位符PathVariable注解带占位符的 URL 是 Spring3.0 新增的功能,该功能在 SpringMVC 向 REST ⽬标挺进发展过程中具有⾥程碑的意义通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理⽅法的⼊参中:URL 中的 {xxx} 占位符可以通过 @PathVariable(“xxx”) 绑定到操作⽅法的⼊参中。//@PathVariable

注解可以将请求URL路径中的请求参数,传递到处理请求⽅法的⼊参中@RequestMapping(value="/testPathVariable/{id}")public String testPathVariable(@PathVariable("id") Integer id){n("id="+id);return "success";}testPathVariable2、@RequestParam注解1)在处理⽅法⼊参处使⽤ @RequestParam 可以把请求参数传递给请求⽅法2)value:参数名3)required:是否必须。默认为 true, 表⽰请求参数中必须包含对应的参数,若不存在,将抛出异常4)defaultValue: 默认值,当没有传递参数时使⽤该值控制器⽅法/** * @RequestParam

注解⽤于映射请求参数 * value

⽤于映射请求参数名称 * required

⽤于设置请求参数是否必须的 * defaultValue

设置默认值,当没有传递参数时使⽤该值 */@RequestMapping(value="/testRequestParam")public String testRequestParam(@RequestParam(value="username") String username,@RequestParam(value="age",required=false,defaultValue="0") int age){n("testRequestParam - username="+username +",age="+age);return "success";}testRequestParam1和2都是处理签名的⽅法,对⽐两者之间的不同,1是利⽤路径直接获取,2则是拼接字符串当作参数传⼊3、POJO(Plain Ordinary Java Object)简单的Java对象1) 使⽤ POJO 对象绑定请求参数值2) Spring MVC 会按请求参数名和 POJO 属性名进⾏⾃动匹配,⾃动为该对象填充属性值。⽀持级联属性。如:、 等如果有乱码,就 需要在xml中配置filter1-3都是对参数进⾏请求,4则是对内部数据进⾏总结4、处理模型数据之 Map实现了map接⼝,最终结果在requestScope当中1)Spring MVC 在内部使⽤了⼀个 接⼝存储模型数据具体使⽤步骤2)Spring MVC 在调⽤⽅法前会创建⼀个隐含的模型对象作为模型数据的存储容器。3)如果⽅法的⼊参为 Map 或 Model 类型,Spring MVC 会将隐含模型的引⽤传递给这些⼊参。4)在⽅法体内,开发者可以通过这个⼊参对象访问到模型中的所有数据,也可以向模型//⽬标⽅法的返回类型也可以是⼀个Map类型参数(也可以是Model,或ModelMap类型)@RequestMapping("/testMap")public String testMap(Map map){ //【重点】n(ss().getName());//("names", ("Tom","Jerry","Kite"));return "success";}testMapnames: ${ }5、视图1) 请求处理⽅法执⾏完成后,最终返回⼀个 ModelAndView 对象。对于那些返回 String,View 或 ModeMap 等类型的处理⽅法,Spring MVC 也会在内部将它们装配成⼀个 ModelAndView 对象,它包含了逻辑名和模型对象的视图2) Spring MVC 借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可以是 JSP ,也可能是 Excel、JFreeChart等各种表现形式的视图3) 对于最终究竟采取何种视图对象对模型数据进⾏渲染,处理器并不关⼼,处理器⼯作重点聚焦在⽣产模型数据的⼯作上,从⽽实现MVC 的充分解耦1) 视图的作⽤是渲染模型数据,将模型⾥的数据以某种形式呈现给客户,主要就是完成的操作.(具体见5.2)2) 为了实现视图模型和具体实现技术的解耦,Spring 在 t 包中定义了⼀个⾼度抽象的 View 接⼝:5.1 JSTLJSTL包含了和以下操作相关的标签:1、核⼼标签:核⼼标签库是整个JSTL中最常⽤的部分,主要由以下⼏部分组成:基本输⼊输出、流程控制、迭代操作和URL操作。负责Web应⽤的常见⼯作,如:循环、表达式赋值、基本输⼊输出等。2、I18N格式标签库:⽤来格式化显⽰数据的⼯作如:对不同区域的⽇期格式化等。3、XML标签库:⽤来访问XML⽂件的⼯作,⽀持JSP对XML⽂档的处理。若项⽬中使⽤了JSTL,则SpringMVC 会⾃动把视图由InternalResourceView转为 JstlView (断点调试,将JSTL的jar包增加到项⽬中,视图解析器会⾃动修改为JstlView)JSTLVIEW是前者的⼦类常见代码⽤法<%@taglib prefix="c" uri="/jsp/jstl/core" %>

EmpIdLastNameGenderEmailDepartmentNameEditDelete
${ }${me }${==0?"Female":"Male" }${ }${mentName }EditDelete
5.2mvc中使⽤重定向和转发① ⼀般情况下,控制器⽅法返回字符串类型的值会被当成逻辑视图名处理② 如果返回的字符串中带 forward: 或 redirect: 前缀时,SpringMVC 会对他们进⾏特殊处理:将 forward: 和 redirect: 当成指⽰符,其后的字符串作为 URL 来处理③ redirect::会完成⼀个到 的重定向的操作④ forward::会完成⼀个到 的转发操作@RequestMapping("/testRedirect")public String testRedirect(){n("testRedirect");return "redirect:/";//return "forward:/";}6、表单标签form 标签

2023年6月21日发(作者:)

SSM学习总结⼀、Spring学习1. Spring是⼀个开源框架2. Spring为简化企业级开发⽽⽣,使⽤Spring,JavaBean就可以实现很多以前要靠EJB才能实现的功能。同样的功能,在EJB中要通过繁琐的配置和复杂的代码才能够实现,⽽在Spring中却⾮常的优雅和简洁。3. Spring是⼀个IOC(DI)和AOP容器框架。4. Spring的优良特性① ⾮侵⼊式:基于Spring开发的应⽤中的对象可以不依赖于Spring的API② 依赖注⼊:DI——Dependency Injection,反转控制(IOC)最经典的实现。③ ⾯向切⾯编程:Aspect Oriented Programming——AOP④ 容器:Spring是⼀个容器,因为它包含并且管理应⽤对象的⽣命周期⑤ 组件化:Spring实现了使⽤简单的组件配置组合成⼀个复杂的应⽤。在 Spring 中可以使⽤XML和Java注解组合这些对象。5. ⼀站式:在IOC和AOP的基础上可以整合各种企业应⽤的开源框架和优秀的第三⽅类库(实际上Spring ⾃⾝也提供了表述层的SpringMVC和持久层的Spring JDBC)。1、Factory BeanSpring中有两种类型的bean,⼀种是普通bean,另⼀种是⼯⼚bean,即FactoryBean。⼯⼚bean跟普通bean不同,其返回的对象不是指定类的⼀个实例,其返回的是该⼯ ⼚bean的getObject⽅法所返回的对象。⼯⼚bean必须实现yBean接⼝。2、bean的作⽤域bean的作⽤域参数主要分为4个singleton: 单例的(默认值), 在整个IOC容器中只能存在⼀个bean的对象. ⽽且在IOC容器对象被创建时,就创建单例的bean的对象. 后续每次通过getBean()⽅法获取bean对象时,返回的都是同⼀个对象.prototype: 原型的/多例的 在整个IOC容器中可有多个bean的对象。 在IOC容器对象被创建时, 不会创建原型的bean的对象。 ⽽是等到没次通过getBean()⽅法获取bean对象时,才会创建⼀个新的bean对象返回.request: ⼀次请求对应⼀个bean对象session: ⼀次会话对应⼀个bean对象 ApplicationContext ctx =

new ClassPathXmlApplicationContext(""); Car car1 = n("car",); Car car2 = n("car",); n(car1 == car2); // true

3、⾃动装配1. 根据类型⾃动装配:将类型匹配的bean作为属性注⼊到另⼀个bean中。若IOC容器中有多个与⽬标bean类型⼀致的bean,Spring将⽆法判定哪个bean最合适该属性,所以不能执⾏⾃动装配2. 根据名称⾃动装配:必须将⽬标bean的名称和属性名设置的完全相同3. 通过构造器⾃动装配:当bean中存在多个构造器时,此种⾃动装配⽅式将会很复杂。不推荐使⽤。 byName: 使⽤bean的属性名与IOC容器中的id值进⾏匹配. 匹配成功则装配成功.

byType: 使⽤bean的属性的类型与IOC容器中的class进⾏匹配。 如果唯⼀匹配则装配成功 如果匹配到多个兼容类型的bean。则跑出异常。最多使⽤注解的⽅式,默认是bytype3) @Autowired注解①根据类型实现⾃动装配。②构造器、普通字段(即使是⾮public)、⼀切具有参数的⽅法都可以应⽤@Autowired 注解③默认情况下,所有使⽤@Autowired注解的属性都需要被设置。当Spring找不到匹 配的bean装配属性时,会抛出异常。④若某⼀属性允许不被设置,可以设置@Autowired注解的required属性为 false⑤默认情况下,当IOC容器⾥存在多个类型兼容的bean时,Spring会尝试匹配bean 的id值是否与变量名相同,如果相同则进⾏装配。如果bean的id值不相同,通过类 型的⾃动装配将⽆法⼯作。此时可以在@Qualifier注解⾥提供bean的名称。Spring 甚⾄允许在⽅法的形参上标注@Qualifiter注解以指定注⼊bean的名称。 ⑥@Autowired注解也可以应⽤在数组类型的属性上,此时Spring将会把所有匹配的bean进⾏⾃动装配。⑦@Autowired注解也可以应⽤在集合属性上,此时Spring读取该集合的类型信息,然后⾃动装配所有与之兼容的bean。⑧@Autowired注解⽤在上时,若该Map的键值为String,那么 Spring将⾃动装配与值类型兼容的bean作为值,并以bean的id值作为键。4、DI和AOPDI从上⾯可以感受出来就是⼀个新的对象在获取别的对象的时候可以通过容器框架来帮我们获取具体值,当把类声明成组件之后⼯具类会直接帮我们⽣成好,⾃动装配提供给我们所需的对象的值。这部分还是⾯向对象的部分只是在AOP则是⾯向对象编程的进阶版,⾯向切⾯编程,利⽤动态代理的思想,具体实现不需要我们来进⾏代理,⽤户只需要将被代理类告诉给框架就可以⾃动实现代理。将所有对象⽅法按层级划分。4.1 aspectjAspectJ:Java社区⾥最完整最流⾏的AOP框架。在Spring2.0以上版本中,可以使⽤基于AspectJ注解或基于XML配置的AOP。 /** *

声明切⼊点表达式 */ @Pointcut("execution(* tion.*.*(..))") public void declarePointCut() {}

/** *

前置通知:

在⽬标⽅法(连接点)执⾏之前执⾏.

*/ @Before("execution(public int (int,int))") public void beforeMethod(JoinPoint joinPoint) { //获取⽅法的参数 Object [] args = s(); //⽅法的名字 String methodName = nature().getName();

n("LoggingAspect==> The method "+methodName+" begin with "+ (args)); }

/** *

后置通知:

在⽬标⽅法执⾏之后执⾏,

不管⽬标⽅法有没有抛出异常.

不能获取⽅法的结果 * * tion.*.*(..) * * :

任意修饰符

任意返回值 * * :

任意类 * * :

任意⽅法 * ..:

任意参数列表 *

*

连接点对象: JoinPoint */

//@After("execution(* tion.*.*(..))") @After("declarePointCut()") public void afterMethod(JoinPoint joinPoint) { //⽅法的名字 String methodName = nature().getName(); n("LoggingAspect==> The method " + methodName +" ends .");

}5、JDBCtemplates * queryForObject(): * 1. 查询单⾏数据 返回⼀个对象 * 2. 查询单值 返回单个值 * batchUpdate(): 批量增删改 * update(): 增删改操作*

5.1具名参数的JdbcTemplate配置⽅式

id="namedTemplate"

class="arameterJdbcTemplate"> 使⽤String sql = "INSERT INTO depts (dept_name) VALUES (:deptName)";Department department = new Department(null, "YYY", null);SqlParameterSource sqlParameterSource =

new BeanPropertySqlParameterSource(department);(sql, sqlParameterSource);5.2事务为了保证数据的完整性和⼀致性使⽤事务使⽤⽅式

@Transactional //对当前类中所有的⽅法都起作⽤@Servicepublic class BookShopServiceImpl implements BookShopService {

@Autowired private BookShopDao bookShopDao ;

/** *

事务属性:

* 1.

事务的传播⾏为 propagation:

⼀个事务⽅法被另外⼀个事务⽅法调⽤时,当前的事务如何使⽤事务.

* ED

默认值.

使⽤调⽤者的事务.

* ES_NEW

将调⽤者的事务挂起,

重新开启事务来使⽤.

* 2.

事务的隔离级别 isolation * 1

读未提交

脏读 * 2

读已提交

不可重复读 * 4

可重复读

幻读 * 8

串⾏化

效率低。 * 3.

事务的回滚与不回滚

默认情况下, Spring会对所有的运⾏时异常进⾏事务回滚. * rollbackFor

* rollbackForClassName * noRollbackFor * noRollbackForClassName * 4.

事务的只读设置: * readOnly

* true:

只读

代表着只会对数据库进⾏读取操作,

不会有修改的操作. *

如果确保当前的事务只有读取操作,就有必要设置为只读,可以帮助数据库 *

引擎优化事务

* false:

⾮只读

不仅会读取数据还会有修改操作。

* 5.

事务的超时设置:

设置事务在强制回滚之前可以占⽤的时间.

* timeout:

*

*/

//只对当前的⽅法起作⽤ @Transactional(propagation=ES_NEW, isolation=_COMMITTED, /* noRollbackFor={}*/ readOnly=false, timeout=3)

public void buyBook(String username, String isbn) {

/*try { (5000); } catch (InterruptedException e) { tackTrace(); }*/

Integer price = iceByIsbn(isbn);

Stock(isbn);

UserAccount(username, price);

}⼆、Springmvc学习controller=handler 控制器1、RequestMapping映射请求占位符PathVariable注解带占位符的 URL 是 Spring3.0 新增的功能,该功能在 SpringMVC 向 REST ⽬标挺进发展过程中具有⾥程碑的意义通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理⽅法的⼊参中:URL 中的 {xxx} 占位符可以通过 @PathVariable(“xxx”) 绑定到操作⽅法的⼊参中。//@PathVariable

注解可以将请求URL路径中的请求参数,传递到处理请求⽅法的⼊参中@RequestMapping(value="/testPathVariable/{id}")public String testPathVariable(@PathVariable("id") Integer id){n("id="+id);return "success";}testPathVariable2、@RequestParam注解1)在处理⽅法⼊参处使⽤ @RequestParam 可以把请求参数传递给请求⽅法2)value:参数名3)required:是否必须。默认为 true, 表⽰请求参数中必须包含对应的参数,若不存在,将抛出异常4)defaultValue: 默认值,当没有传递参数时使⽤该值控制器⽅法/** * @RequestParam

注解⽤于映射请求参数 * value

⽤于映射请求参数名称 * required

⽤于设置请求参数是否必须的 * defaultValue

设置默认值,当没有传递参数时使⽤该值 */@RequestMapping(value="/testRequestParam")public String testRequestParam(@RequestParam(value="username") String username,@RequestParam(value="age",required=false,defaultValue="0") int age){n("testRequestParam - username="+username +",age="+age);return "success";}testRequestParam1和2都是处理签名的⽅法,对⽐两者之间的不同,1是利⽤路径直接获取,2则是拼接字符串当作参数传⼊3、POJO(Plain Ordinary Java Object)简单的Java对象1) 使⽤ POJO 对象绑定请求参数值2) Spring MVC 会按请求参数名和 POJO 属性名进⾏⾃动匹配,⾃动为该对象填充属性值。⽀持级联属性。如:、 等如果有乱码,就 需要在xml中配置filter1-3都是对参数进⾏请求,4则是对内部数据进⾏总结4、处理模型数据之 Map实现了map接⼝,最终结果在requestScope当中1)Spring MVC 在内部使⽤了⼀个 接⼝存储模型数据具体使⽤步骤2)Spring MVC 在调⽤⽅法前会创建⼀个隐含的模型对象作为模型数据的存储容器。3)如果⽅法的⼊参为 Map 或 Model 类型,Spring MVC 会将隐含模型的引⽤传递给这些⼊参。4)在⽅法体内,开发者可以通过这个⼊参对象访问到模型中的所有数据,也可以向模型//⽬标⽅法的返回类型也可以是⼀个Map类型参数(也可以是Model,或ModelMap类型)@RequestMapping("/testMap")public String testMap(Map map){ //【重点】n(ss().getName());//("names", ("Tom","Jerry","Kite"));return "success";}testMapnames: ${ }5、视图1) 请求处理⽅法执⾏完成后,最终返回⼀个 ModelAndView 对象。对于那些返回 String,View 或 ModeMap 等类型的处理⽅法,Spring MVC 也会在内部将它们装配成⼀个 ModelAndView 对象,它包含了逻辑名和模型对象的视图2) Spring MVC 借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可以是 JSP ,也可能是 Excel、JFreeChart等各种表现形式的视图3) 对于最终究竟采取何种视图对象对模型数据进⾏渲染,处理器并不关⼼,处理器⼯作重点聚焦在⽣产模型数据的⼯作上,从⽽实现MVC 的充分解耦1) 视图的作⽤是渲染模型数据,将模型⾥的数据以某种形式呈现给客户,主要就是完成的操作.(具体见5.2)2) 为了实现视图模型和具体实现技术的解耦,Spring 在 t 包中定义了⼀个⾼度抽象的 View 接⼝:5.1 JSTLJSTL包含了和以下操作相关的标签:1、核⼼标签:核⼼标签库是整个JSTL中最常⽤的部分,主要由以下⼏部分组成:基本输⼊输出、流程控制、迭代操作和URL操作。负责Web应⽤的常见⼯作,如:循环、表达式赋值、基本输⼊输出等。2、I18N格式标签库:⽤来格式化显⽰数据的⼯作如:对不同区域的⽇期格式化等。3、XML标签库:⽤来访问XML⽂件的⼯作,⽀持JSP对XML⽂档的处理。若项⽬中使⽤了JSTL,则SpringMVC 会⾃动把视图由InternalResourceView转为 JstlView (断点调试,将JSTL的jar包增加到项⽬中,视图解析器会⾃动修改为JstlView)JSTLVIEW是前者的⼦类常见代码⽤法<%@taglib prefix="c" uri="/jsp/jstl/core" %>

EmpIdLastNameGenderEmailDepartmentNameEditDelete
${ }${me }${==0?"Female":"Male" }${ }${mentName }EditDelete
5.2mvc中使⽤重定向和转发① ⼀般情况下,控制器⽅法返回字符串类型的值会被当成逻辑视图名处理② 如果返回的字符串中带 forward: 或 redirect: 前缀时,SpringMVC 会对他们进⾏特殊处理:将 forward: 和 redirect: 当成指⽰符,其后的字符串作为 URL 来处理③ redirect::会完成⼀个到 的重定向的操作④ forward::会完成⼀个到 的转发操作@RequestMapping("/testRedirect")public String testRedirect(){n("testRedirect");return "redirect:/";//return "forward:/";}6、表单标签form 标签